Java 学习 13:static 关键字,this 关键字
static 关键字
static 翻译为“静态的”。所有 static 关键字修饰的都是类相关的,类级别的。所有 static 修饰的,都是采用“类名.”的方式访问。static 修饰的变量:静态变量 static 修饰的方法:静态方法变量根据声明的位置进行划分:在方法体当中声明的变量叫做:局部变量。在方法体外声明的变量叫做:成员变量。成员变量又可以分为:实例变量和静态变量静态的都是类相关的,访问时采用“类名.”的方式访问。不需要 new 对象。不需要对象的残血即可访问,没有空指针异常的发生。实例相关的,必须先有对象,才能访问,可能会出现空指针异常。静态变量在类加载时初始化,不需要 new 对象,静态变量的空间开出来了。静态变量存储在方法区。
什么时候变量声明为实例的,什么时候声明为静态的?如果这个类型的所有对象的某个属性值都是一样的,不建议定义为实例变量,浪费内存空间。建议定义为类级别特征,定义为静态变量,在方法区中只保留一份,节省内存开销。一个对象一份的是实例变量。所有对象一份的是静态变量。实例的:一定需要使用“引用.”来访问。静态的:建议使用“类名.”来访问,但使用“引用.”也行(不建议使用“引用.”)。静态的如果使用“引用.”来访问会让程序员产生困惑:程序员以为是实例的呢。空指针异常只有在“空引用”访问“实例”相关的,都会出现空指针异常。关于方法来说,什么时候定义为实例方法,什么时候定义为静态方法?此方法一般都是描述了一个行为,如果说该行为必须由对象去触发。那么该方法定义为实例方法。参考标准:当这个方法体当中,直接访问了实例变量,这个方法一定是实例方法。我们以后开发中,大部分情况下,如果是工具类的话,工具类当中的方法一般都是静态的。(静态方法有一个优点,是不需要 new 对象,直接采用类名调用,极其方便,工具类就是为了方便,所以工具类中的方法一般都是 static 的。)工具类就是为了方便编程开发的一些类。静态代码块使用 static 关键字可以定义:静态代码块静态代码块,语法:static {java 语句;java 语句;}static 静态代码块在类加载时执行,并且只执行一次,静态代码块有这样的特征/特点。注意:静态代码块在类加载时执行,并且在 main 方法之前执行。静态代码块一般是按照自上而下的顺序。静态代码块有什么用?第一:静态代码块不是那么常用 。(不是每一个类当中都要写的东西。)第二:静态代码块这种语法机制实际上时 SUN 公司给我们 java 程序员的一个特殊的事课/时机。这个时机叫做:类加载时机。静态代码块和静态变量都是在类加载的时候执行的,时间相同,执行的顺序还是要看代码的先后顺序来决定谁先谁后。到目前为止,遇到的所有的 java 程序,有哪些是有顺序要求的?第一:对于一个方法来说,方法体中的代码是有顺序的,遵循自上而下的顺序执行。第二:静态代码块 1 和静态代码块 2 是由先后顺序的。第三:静态代码块和静态变量是有先后顺序的。
实例代码块除了静态代码块之外,还有实例语句块。实例语句块在类加载时并没有执行。实例语句块语法:{java 语句;java 语句;}只要是构造方法执行没必然在构造方法执行之前,自动执行“实例语句块”中的代码。实际上这也是 SUN 公司为 Java 程序员准备一个特殊的时机,叫做对象构建时机。
this 关键字 this 是一个关键字,全部小写。是一个引用,保存内存地址指向自身。一个对象一个 this。this 是一个变量,是一个引用。this 保存当前对象的内存地址,指向自身。所以,严格意义上来说,this 代表的就是“当前对象”this 存储在堆内存当中对象的内部。
从内存图上来看 this.png
this 只能使用在实例方法中。谁调用这个实例方法,this 就是谁。所以 this 代表 的是当前对象。“this.”在大部分情况下是可以省略的。this 可以使用在实例方法中,不能使用在静态方法中,因为,this 代表当前对象,静态方法中不存在当前对象。在实例方法中,或者构造方法中,为了区分局部变量和实例变量,这种情况下:this. 是不能省略的。this 除了可以使用在实例方法中,也可以使用在构造方法中。新语法:通过当前的构造方法去调用零一个本类的构造方法,可以使用以下格式:this(实际参数列表);this();的作用是,代码复用通过一个构造方法 1 去调用构造方法 2,可以做到代码复用。但需要注意的是:“构造方法 1”和“构造方法 2”都是在同一个类中 。对于 this()的调用只能出现在构造方法的第一行。
以后的代码都是封装,所有的类都是属性私有化,对外提供 setter 和 getter 方法。构造方法无参数构造方法和有参数构造方法都定义。
对面向对象这的内容做一下总结:/*到目前为止一个类当中可以出现的:类体{实例变量;实例方法;
*/public class ZongJie{//类加载机制中,是这样的:在程序执行之前,凡是需要加载的类全部加载到 JVM 当中。//先完成加载才会执行 main 方法。static{System.out.println("ZongJie 类加载时执行!");}//入口//静态方法 public static void main(String[] args){//局部变量 int i = 100;
}
//学生类 class Student{//静态代码块 static{System.out.printlc("Student 类加载时执行!");}
}程序再怎么变化,万变不离其宗,有一个固定的规律:所有的实力相关的都是先创建对象,通过“引用.”来访问。所有的静态相关的都是直接采用“类名.”来访问。
只要负责调用的方法 a 和被调用的方法 b 在同一个类当中:this. 可以省略类名. 可以省略
评论