当前位置: 移动技术网 > IT编程>开发语言>Java > Java开发中static关键字使用

Java开发中static关键字使用

2020年08月01日  | 移动技术网IT编程  | 我要评论
static关键字一、static二、静态属性1、属性根据是否使用static修饰,分为静态变量和实例变量静态变量:实例变量:2、其他说明3、静态属性举例:4、内存分布:5、开发中,如何确定一个属性是否要声明为static的?三、静态方法1、方法根据是否使用static修饰,分为 静态方法和非静态方法静态方法非静态方法2、其他说明3、开发中,如何确定一个方法是否要声明为static的?4、代码块1、代码块根据是否使用static修饰,分为 静态代码块和非静态代码块a、静态代码块b、非静态代码块2、静态代码块




一、static

static是静态的,可以修饰属性、方法、代码块、内部类 

二、静态属性

被static修饰的属性叫静态属性(类变量),static修饰的变量,不属于某一个类,是共享的。不需要new对象就能调用。 

1、属性根据是否使用static修饰,分为静态变量和实例变量

静态变量:

创建多个类,多个对象共享同一个静态变量。修改其中一个对象的静态属性时,会导致其他对象的同样的属性值被修改。 

实例变量:

创建多个类,修改其中一个对象的非静态属性时,不会导致其他对象中的同样的属性值修改 

2、其他说明

①. 静态变量随着类的加载而加载。可以通过“类.静态变量”的方式调用

②. 静态变量的加载早于对象的创建

③. 类只会加载一次,静态变量在内存中也只会加载一次

④. 调用方式

类变量 实例变量
Y N
对象 Y Y

3、静态属性举例:

System.out、  Math.PI(静态常量); 

4、内存分布:

栈:局部变量
堆:new出来的结构:对象、数组
方法区:类的加载信息、静态域、常量池 

5、开发中,如何确定一个属性是否要声明为static的?

属性可以被多个对象共享,不会随着对象不同而不同的。
类中的常量也常声明为static 

三、静态方法

被static修饰的方法是静态方法。 

1、方法根据是否使用static修饰,分为 静态方法和非静态方法

静态方法

①、静态方法中,只能调用静态的方法或属性。(在静态方法中,不能使用this关键字,super关键字)
②、静态方法随着类的加载而加载。可以通过“类.静态方法”的方式调用 

非静态方法

非静态方法中,既可以调用非静态的方法或属性,也可以调用静态的方法或属性 

2、其他说明

①在静态方法中,不能使用this关键字,super关键字

②关于静态属性和方法的使用,从生命周期的角度理解

③调用方式

静态方法 非静态方法
Y N
对象 Y Y

3、开发中,如何确定一个方法是否要声明为static的?

操作静态属性的方法,通常设置为静态方法
工具类中的方法,习惯上声明为静态方法。如:Math、Arrays、Collections 

4、代码块

代码块的作用:用来初始化类、对象 

1、代码块根据是否使用static修饰,分为 静态代码块和非静态代码块

a、静态代码块

  • 静态代码块执行优先级高于非静态的初始化块,在类初始化的时候执行一次,执行完成便销毁,仅能初始化类变量

  • 内部可以有输出语句

  • 静态代码块(初始化块)随着类的加载而加载。而且只执行一次

  • 初始化类的信息

  • 一个类可以有多个静态代码块,按照声明的先后顺序执行

  • 静态代码块执行优先于非静态代码块

  • 静态代码块不能调用非静态的属性和方法

b、非静态代码块

  • 非静态代码块,执行的时候如果有静态初始化块,先执行静态初始化块再执行非静态初始化块,在每个对象生成时都会被执行一次,它可以初始化类的实例变量。非静态初始化块会在构造函数执行时,在构造函数主体代码执行之前被运行

  • 内部可以有输出语句

  • 随着对象的创建而执行,没创建一个对象执行一次

  • 创建对象时,对对象的属性等进行初始化

  • 一个类可以有多个非静态代码块,按照声明的先后顺序执行

  • 非静态代码块执行后于静态代码块

  • 非静态代码块可以调用静态属性和方法

2、静态代码块的执行顺序:

 静态代码块----->非静态代码块-------->构造函数 

5、内部类

1、内部类分类

Java允许将类A声明在类B中,类A就是内部类,类B为外部类 

成员内部类

①作为外部类的成员: 可以调用外部类的结构
                 可以用static修饰(外部类不能用static修饰)
                 可以被4种不同的权限修饰       
                 
②作为类:类内可以定义属性。方法、构造器、内部类等,可以继承;
        可以被final修饰,表示此类不能被继承/不被final修饰,就可以继承;
        可以被abstract修饰,表示类不能被实例化。 

成员内部类根据是否使用static修饰,分为:

  • 静态内部类

静态内部类,不能调用外部非静态的属性、方法

  • 非静态内部类

局部内部类

方法内、代码块内、构造器内 

2、内部类需要关注的问题:

①如何实例化成员内部类的对象
       静态内部类:new 外部类.内部类();
       非静态内部类:外部类  a=new 外部类();
                          a.new 内部类(); 
② 如何在成员内部类中区分调用外部类的结构
       形参:直接调用;
       内部类:this.调用
       外部类:外部类.this.调用 
③开发中局部内部类怎么使用  : 

方法一
方法二

④源码应用:Thread(枚举内部类表示状态的)、Integer(用来缓存的内部类IntegerCache) 
⑤局部内部类注意点:
    局部内部类的方法中,如果调用局部内部类声明的方法中的局部变量时,要求此变量必须是fianl的。
    JDK1.7之前此局部变量必须声明为final的;JDK8之后可以省略。 

以上内容仅为自己学习整理,帮助自己学习的同时,希望帮助到有需要的人。

本文地址:https://blog.csdn.net/weixin_41309817/article/details/108256425

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网