欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java开发中static关键字使用

程序员文章站 2024-01-15 19:39:58
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.调用 
③开发中局部内部类怎么使用  : 

Java开发中static关键字使用
Java开发中static关键字使用

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

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

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

相关标签: Java开发 static