final:修饰符的一种
1、意思:最终的
2、final可以修饰:类(外部类、内部类)、变量(成员变量(类变量、实例变量)、局部变量)、
方法(静态方法、非静态方法)
3、修饰后有什么不同?
- 修饰类:表示这个类不能被继承了,我们可以称它为"太监类
例如:String、System、Math
2.修饰方法:表示这个方法不能被重写
3.修饰变量:表示这个变量的值不能被修改,即我们称为的"常量"
常量有两种:
一种是字面常量:例如:"hello“,12,‘a'
一种是final声明的变量
native:也是一个修饰符
- 意思:原生的、本地的
- 可以修饰什么?
可以修饰方法
3.它修饰的方法有什么不同
语法格式:
【修饰符】 class 类 {
【其它修饰符】native 返回值类型 方法名(【形参列表】);
}
native修饰的方法,看不见方法体。
native修饰的方法,不是用Java语言实现的,而是调用了底层C/C++的代码,这些代码
被编译为.dll文件,让java来执行的
4.特殊
(1)native方法,对于Java程序员来说,该怎么调用还怎么调用
(2)子类还可以选择对它进行重写
static:也是一种修饰符
1、意思:静态的
2、可以修饰什么?
(1)方法
(2)成员变量
(3)内部类
(4)代码块
3、修饰后有什么不同?
(1)方法:我们称为“静态方法”或“类方法”
①这个方法,对于其他类来说可以用"类名.方法"进行调用,当然也可以使用"对象名.方法"进行调用,我们推荐用"类名.方法"
②静态方法中,是不允许出现:this,super,对本类的非静态属性、非静态的方法的直接使用代码的
(2)成员变量:称为“类变量、静态变量”
①用static修饰的成员变量的值,表示是这个类型的所有对象“共享的”
②static修饰的成员变量的值,存储在方法区
③static修饰的成员变量的get/set也是静态的,
④如果在方法中有局部变量与static修饰的成员变量同名时,在静态变量前面加"类名."进行区别
结论:非静态的"对象名.",静态的用"类名."
非静态代码块:
【修饰符】 class 类{
{
非静态代码块
}
}
静态代码块:
【修饰符】 class 类{
static{
静态代码块
}
}
特点:
(1)每一个类的静态代码块只会执行一次
(2)静态代码块在第一次使用这个类之前执行,即在类初始化时执行。
4、类初始化即执行类初始化方法:<clinit>()
类初始化方法,一个类只有一个。它也是有编译器编译生成的,由两部分代码组成:
(1)静态变量的显式赋值代码
(2)静态代码块的代码
其中(1)和(2)是按照顺序执行
回忆:实例初始化方法<init>()或<init>(形参列表)
一个类可能有好几个实例初始化方法,有几个构造器就有几个实例初始化方法,它们由编译器根据:
①成员变量的显式赋值代码
②非静态代码块代码
③构造器的代码
initialize:初始化
class initialize:类初始化

/*
* 一个类初始化时会先检查它的父类是否初始化,如果父类没有初始化,那么会先初始化父类。因为一个类只要初始化一次。
*
* (1)父类的初始化<clinit>()
* ①父类的静态变量的显式赋值
* ②父类的静态代码块
* (2)子类的初始化<clinit>()
* ①父类的静态变量的显式赋值
* ②父类的静态代码块
*
* 特殊:
* 静态方法是不能被重写的
*/
public class TestClassInit {
public static void main(String[] args) {
/*Father f = new Father();
System.out.println("-------------------");
Son s = new Son();*/
Son s = new Son();
/*Father f = new Son();//多态引用
System.out.println("----------------");
f.assign();//静态方法在编译期间就确定了,不需要在运行时动态绑定
*/ }
}
class Father{
private static String info = assign();
static{
System.out.println("(1)父类的静态代码块");
}
public static String assign(){
System.out.println("(3)assign()方法");
return "Father";
}
}
class Son extends Father{
private static String info = assign();
static{
System.out.println("(2)子类的静态代码块");
}
public static String assign(){
System.out.println("(4)assign()方法");
return "Son";
}
}
运行截图:

本文深入解析Java中的final、native和static修饰符的含义、用法及特性,包括它们如何影响类、方法和变量的行为,以及在类初始化过程中的作用。

824

被折叠的 条评论
为什么被折叠?



