我是靠谱客的博主 震动未来,最近开发中收集的这篇文章主要介绍java中static关键字的用法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

static关键字

static静态方法就是没有this的方法
通常写this的时候,都是指“这个对象”或“当前对象”,而且它本身表示对当前对象的引用。

用于修饰类的成员方法、类的成员变量;可以编写static代码块来优化程序性能

  • 特点:
    • 被所有的对象所共享
    • 可以直接使用类名调用
    • 不能作用于局部变量
    • 在static方法内部不能调用非静态方法,但反过来是成立的

非静态成员变量和成员方法是属于对象的,而被static修饰的成员变量及方法并不属于特定的对象。
初始化的顺序先是静态对象,后是非静态对象,并且静态初始化动作只进行一次(当首次生成这个类的一个对象时,或者首次访问那个类的静态数据成员时)


  • 在static静态方法中可以调用静态成员变量,及态成员方法
  • 在static静态方法中不能调用非静态成员变量,及非静态成员方法
  • 静态方法只能调用静态成员
  • 非静态方法可以调用静态成员变量,及静态成员方法
public class Static_access {
    public static void main(String[] args) {
        Student st = new Student();
        Student.name = "mo fei";
        Student.name();
        st.eat();
    }
}

class Student {
    static String name;
    public static void name() {
        System.out.println(name);
        sport();
    }
    public static void sport() {
        System.out.println("sport");
    }
    public void eat() {
        System.out.println("eat");
        System.out.println(name);
        sport();
    }
}
/*
mo fei
sport
eat
mo fei
sport
*/

  • static 的优点
    –对对象的共享数据提供单独空间的存储,节省空间,没有必要每一个对象都存储一份
    –可以直接被类名调用,不用在堆内创建对象
  • static 的弊端
    –访问出现局限性。(静态虽好,但只能访问静态)

代码块

  • 局部代码块
    –局部代码块:存在于方法中,控制变量的声明周期
public class Part_block {
    public static void main(String[] args) {
        {
            int num = 1;
            for(int i = 0; i < 3; i++)
                System.out.println(num);
        }
        //当将代码块内部的变量拿出代码块输出时,将会会编译错误
        //System.out.println(num);    //Error
    }
}
/*
1
1
1
 */
  • 构造代码块
    –构造代码块:提取构造方法中的共性,每次创建对象都会执行,并且在执行构造方法之前执行
class Stu {
    String name;
    int data;
    Stu() {
        System.out.println("女学生");
    }

    Stu(String name, int data) {
        this.name = name;
        this.data = data;
        System.out.println("男学生");
    }

    {
        for(int i = 0; i < 3; i++)
            System.out.println("java 学习");
    }
}

public class Structure_block {
    public static void main(String[] args) {
        Stu stu = new Stu();
        Stu stu2 = new Stu("mofei", 2020);
    }
}
/*
java 学习
java 学习
java 学习
女学生
java 学习
java 学习
java 学习
男学生
 */
  • 静态代码块
    –静态代码块:随着类的加载而加载,只加载一次,加载类时需要做一些初始化,比如加载驱动
class Stu {
    String name;
    int data;
    Stu() {
        System.out.println("女学生");
    }

    Stu(String name, int data) {
        this.name = name;
        this.data = data;
        System.out.println("男学生");
    }

    static {
        for(int i = 0; i < 3; i++)
            System.out.println("java 学习");
    }
}

public class Structure_block {
    public static void main(String[] args) {
        Stu stu = new Stu();
        Stu stu2 = new Stu("mofei", 2020);
    }
}
/*
java 学习
java 学习
java 学习
女学生
男学生
 */

执行顺序

一.

class Code {
    static {
        System.out.println("Code静态代码块");
    }

    {
        System.out.println("Code构造代码块");
    }

    Code() {
        System.out.print("Code无参构造执行");
    }
}

public class Order_block {
    public static void main(String[] args) {
        Code c = new Code();
    }
}
/*
Code静态代码块
Code构造代码块
Code无参构造执行
 */

二.

class Code {
    static {
        System.out.println("Code静态代码块");
    }

    {
        System.out.println("Code构造代码块");
    }

    Code() {
        System.out.println("Code无参构造执行");
    }
}

public class Order_block {
    static {
        System.out.println("Order_block静态代码块");
    }

    {
        System.out.println("Order_block构造代码块");
    }

    public Order_block() {
        System.out.print("Order_block 无参构造执行");
    }
    public static void main(String[] args) {
        Code c = new Code();
        Code cc = new Code();
    }
}
/*
Order_block静态代码块
Code静态代码块
Code构造代码块
Code无参构造执行
Code构造代码块
Code无参构造执行
 */

static修饰内部类

普通类是不允许声明为静态的,,只有内部类才可以。

  • 被static修饰的内部类通常被称为嵌套类,嵌套类意味着:1,要创建嵌套类的对象,并不需要其外围类的对象;2,不能从嵌套类的对象中访问非静态的外围类对象。
    外部类.内部类 c = new 外部类.内部类();
class Outer {
    public static class Inner {
        Inner() {
            System.out.println("Inner");
        }
    }
}

public class Static_Class {
    public static void main(String[] args) {
        Outer.Inner inner = new Outer.Inner();
    }
}
  • 如果内部类没有用static修饰,只能先创建外部类引用
    外部类 t = new 外部类();
    外部类.内部类 c = t.new 内部类()
class Outer1 {
    public class Inner {
        Inner() {
            System.out.println("Inner");
        }
    }
}

public class Static_Class2 {
    public static void main(String[] args) {
        Outer1 t = new Outer1();
        Outer1.Inner inner = t.new Inner();
    }
}

最后

以上就是震动未来为你收集整理的java中static关键字的用法的全部内容,希望文章能够帮你解决java中static关键字的用法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(90)

评论列表共有 0 条评论

立即
投稿
返回
顶部