2022-7-27 第七组 代码块 与 static

image

1.代码块

1.1局部代码块

1.2构造代码块

构造代码块是定义在类中成员位置的代码块

1.3静态代码块

静态代码块是定义在成员位置,使用static修饰得代码块

1.4区分每种代码块的特点

1.4.1局部代码块

	以”{}”划定的代码区域,此时只需要关注作用域的不同即可
	方法和类都是以代码块的方式划定边界的

1.4.2构造代码块

	优先于构造方法执行,构造代码块用于执行所有对象均需要的初始化动作
	每创建一个对象均会执行一次构造代码块。

1.4.3静态代码块:

	它优先于主方法执行、优先于构造代码块执行,当以任意形式第一次使用到该类时执行。
	该类不管创建多少对象,静态代码块只执行一次。
	可用于给静态变量赋值,用来给类进行初始化

2.static

当在定义类的时候,类中都会有相应的属性和方法。而属性和方法都是通过创建本类对象调用的。		我们可以通过static关键字来实现调用方法,static它是静态修饰符,一般用来修饰类中的成员。

2.1静态的特点

被static修饰的成员变量属于类,不属于这个类的某个对象。(也就是说,多个对象在访问或修改static修饰的成员变量时,其中一个对象将static成员变量值进行了修改,其他对象中的static成员变量值跟着改变,即多个对象共享同一个static成员变量)

被static修饰的成员可以并且建议通过类名直接访问   访问静态成员的格式:
			  类名.静态成员变量名
			  类名.静态成员方法名(参数)

静态的加载优先于对象,随着类的加载而加载

2.1.1静态变量:

	静态变量又称为类变量,也就是说这个变量属于类的,类所有的实例都共享静态变量,可以直接通过类名来访问它;静态变量在内存中只存在一份。 
	实例变量: 每创建一个实例就会产生一个实例变量,它与该实例同生共死。

2.1.2静态方法

	静态方法在类加载的时候就存在了,它不依赖于任何实例。所以静态方法必须有实现,也就是		说它不能是抽象方法(abstract)   

2.2静态优点:

对对象的共享数据提供单独空间的存储,节省空间,没有必要每一个对象都存储一份
可以直接被类名调用,不用在堆内存创建对象
静态成员可以通过类名直接访问,相对创建对象访问成员方便

2.3静态的缺点:

 访问出现局限性。(静态虽好,但只能访问静态)

2.4初始化顺序

静态变量和静态语句块优先于实例变量和普通语句块,静态变量和静态语句块的初始化顺序取决于它们在代码中的顺序。

存在继承的情况下,初始化顺序为:

父类(静态变量、静态语句块)
子类(静态变量、静态语句块)
父类(实例变量、普通语句块)
父类(构造函数)
子类(实例变量、普通语句块)
子类(构造函数)

2.5箭头函数:JDK8的新特性

 函数式接口:如果一个接口只有一个抽象方法,这个接口就称为函数式接口。

 可以用注解@FunctionalInterface标识。

1、有参数,有返回值。
   (i,j) -> {
	   return i + j;
   }
   如果方法体只是一句返回值(i,j) -> i+j
2、有参数,无返回值
   (i,j) -> {
	   // 方法体
   }
   如果方法体只有一句话(i,j) -> 方法体的一句话
3、无参数
   ()->{
	  方法体
   }

3.总结:

 static:是一个关键字,用于修饰成员变量和成员方法
 static的特点:
	     被所有的对象所共享
	     可以使用类名调用
	     静态的加载优先于对象
	     随着类的加载而加载
		 
	 静态方法:
		可以调用静态的成员变量
		可以调用静态的成员方法
		不可以调用非静态成员变量
		不可以调用非静态成员方法
		静态方法只能调用静态的成员
		
	非静态方法:
		可以调用静态的成员变量
		可以调用静态的成员方法
		可以调用非静态的成员变量
		可以调用非静态的成员方法
posted @ 2022-07-27 18:53  阿萨德菩提子  阅读(19)  评论(0编辑  收藏  举报