this表示当前对象
(1)在方法内部使用,即表示调用该方法的对象
(2)在构造方法中使用,即表示正在初始化的对象
用法:
1. this.属性
(1)当构造器或方法中有局部变量与实例变量同名时,用于区分局部变量和实例变量。
格式:this.属性
(2)当构造器或方法中没有局部变量与实例变量同名时,可以不加this.
2. this.方法
表示调用当前对象的其他方法,通常情况下,省略this.
3. this()或this(实参列表)
用于调用本类的其他构造方法,必须写在构造器的首行,要避免递归调用
格式:this(); 或 this(实参列表);
补充:使用this访问属性和方法时,如果在本类中未找到,会从父类中查找(从父类继承的当做自己的一样使用)。
当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通过new关键字才会产生出对象,这时系统才会分配内存空间给对象,其方法才可以供外部调用。我们有时候希望无论是否产生了对象或无论产生了多少对象的情况下,某些特定的数据在内存空间里只有一份,例如所有的中国人都有个国家名称,每一个中国人都共享这个国家名称,不必在每一个中国人的实例对象中都单独分配一个用于代表国家名称的变量。
类属性(类变量)作为该类各个对象之间共享的变量。在设计类时,分析哪些类属性不因对象的不同而改变,将这些属性设置为类属性。相应的方法设置为类方法。
如果方法与调用者无关,则这样的方法通常被声明为类方法,由于不需要创建对象就可以调用类方法,从而简化了方法的调用。
修饰类的内部成员:
可用static修饰属性、方法、代码块、内部类
当某个属性的值是所有对象共享的,那么这样的属性应该声明为静态的,这样的属性我们称为类变量。
类变量具备以下特点:
1.随着类的初始化而初始化,优先于实例对象的创建
2.修饰的成员,被所有对象所共享
3.访问权限允许时,可不创建对象,直接“类名.xx”调用
4.类变量的值存储在方法区
5.类变量的get/set方法也是静态的
当方法的功能实现、调用和该类的对象无关时,我们可以把这样的方法声明为static,我们称为静态方法。
如果在静态方法中有局部变量与类变量重名,可以使用“本类名.xxx” 如果在静态方法中想要访问父类的静态成员,可以使用“父类名.xxx”
因为静态方法是类方法,是属于类的,和对象无关
(1)同一个类中:
静态成员中不能访问非静态的成员
非静态成员中可以访问静态成员
(2)不同类中:
访问其他类的非静态成员必须使用“对象.非静态成员”的格式
访问其他类的静态成员建议使用“类名.静态成员”的格式,也可以使用“对象.静态成员”
在Java中声明类、属性和方法时,可使用关键字final来修饰,表示“最终”。
package _06_Object; public class _final { final int i = 0; final int b; { b = 1; } final int c; public _final(int c){ this.c = c; } }
使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++等非Java语言实现的,并且被编译成了DLL,由java去调用。
(1)为什么要用native方法
java使用起来非常方便,然而有些层次的任务用java实现起来不容易,或者我们对程序的效率很在意时,问题就来了。例如:有时java应用需要与java外面的环境交互。这是本地方法存在的主要原因,你可以想想java需要与一些底层系统如操作系统或某些硬件交换信息时的情况。本地方法正是这样一种交流机制:它为我们提供了一个非常简洁的接口,而且我们无需去了解java应用之外的繁琐的细节。
(2)native声明的方法,对于调用者,可以当做和其他Java方法一样使用
1、构造器只能有访问控制修饰符
2、外部类不能使用static修饰,可以使用final修饰
3、属性可以同时使用static和final修饰,叫做全局常量
4、方法可以同时使用static和final修饰,都不能被重写
5、局部变量只能使用final修饰
6、代码块只能使用static修饰