Java -4 指向对象自身的引用(this)、静态修饰符(static)、包机制(package、import)
指向对象自身的引用:this
- this是一个引用类型变量,this变量中存放的值是对象自身在内存中的地址值。或者说,this是一个指向对象自身的指针。
- 为了区分同名的成员变量“age”和形参变量“age”,可以使用关键字:this。
- this这个引用实际上并不存放在对象数据中,而是所有实例方法都默认拥有的一个方法形参。
- 当通过一个对象的引用调用某个实例方法时,会默认将这个引用的值传递给实例方法的隐含形参this。
- this引用的另外一个作用:当一个类重载了多个构造方法时,如果在某个构造方法的内部要调用另一个构造方法,此时不能直接写另一个构造方法的名字,而要写出this()。
静态修饰符:static
- 用static修饰的成员变量称为静态成员变量。一个类的静态成员变量是存放在方法区中的类型信息里的,这个类所有对象都共享这个唯一的静态成员变量。静态成员变量是这个类的公用变量,在内存中只有一份。所以,静态成员变量又称为类变量(class variable)。
- 没有用static 修饰的成员变量称为非静态成员变量。一个类的非静态成员变量是存放在堆中的对象数据里的,这个类的每个对象实例都有自己单独的非静态成员变量。所以,非静态成员变量又称实例变量。
- 调用静态成员方法的语法:类名.静态成员方法名()
- 调用非静态成员方法的语法:对象引用名.非静态成员方法名()
注意:
- 在一个静态成员方法中,不能访问非静态成员变量,不能调用非静态成员方法(构造方法除外)。也就是说,在一个静态成员方法中,只能访问静态成员,包括静态成员变量和静态成员方法。
- 静态方法中不能访问静态变量和非静态方法,但是非静态方法中既可以访问非静态变量和非静态方法,也可以访问静态变量和静态方法。
静态代码块
用static修饰的代码块是静态代码块。一个类的静态代码块是定义在类的内部,方法的外部的,语法如下:
- 静态代码块不是方法,没有方法名、返回值和参数。
- 静态代码块的作用是对类自身进行初始化,主要是对类的静态成员变量进行初始化。
- 当JVM装载一个类时,会执行这个类的静态代码块。由于JVM装载某个类的操作只会执行一次,所以这个类的静态代码块也只会执行一次。
包机制:package和import
- 为了解决类名冲突的问题,Java语言引入“包机制”,就是通过不同的包名为类提供了多重的命名空间,也就是说把 包名+类名 作为一个类的完成名字,或者说是类的全称。
- 在定义一个类时,为了将这个类定义到某个包里,需要在源代码的开头部分指明该文件定义的类所属的包名,语法规则如下:
- 一个包中类可以直接访问本包中其他类。但是如果一个包中的类要访问另一个包中的类,那么在访问之前,需要先导入(import)另一个包中的类。
- 比如:包p1中的类A 要访问包p2中的类B,语法规则如下:
在Java语言的所有包中,Java语言核心包:java.lang是很特殊的。任何Java类都默认以及导入了java.lang包中的所有类,换句话说就是可以直接访问java.lang包中类。
rt.jar下的核心包:
- java.lang:包含一些Java语言的核心类,如String、Math、System
- java.util:包含一些实用工具类,如Data、Random、Collection框架
- javax.sql: 包含数据库访问和处理的相关类
- java.net: 包含执行与网络相关的操作的类
- java.awt: 包含用于创建GUI程序的相关类
- javax.swing: 包含轻量级的GUI组件类