类的专题研究

类的专题研究

Java中有一个比较特殊的类,Object类,它是所有类的父类,所有的类默认继承Object类,Object类中的所有方法适用于所有的类。

Object中只有一个toString()方法,此方法是在打印对象时被调用的。

内部类
在类内部也可以定义另一个类叫做内部类,而外部的类叫做外部类。
内部类可声明public和private。对其访问的限制与成员变量和成员方法完全相同。

内部类的定义方法如下:
标识符 class 内部类的名称
{
//外部类的成员
标识符 class 内部类的名称
{
//内部类的成员
}
}

内部类可以直接调用外部类的成员属性,如果将内部类拿到外面单独声明,那么这个类要使用外部类的成员属性就得先对外部类进行实例化。
注:不建议使用内部类
外部类不能访问内部类所声明的属性,但是内部类可以访问外部类的属性。

用static声明内部类就将内部类变成了外部类,但是用static声明的内部类不能访问非static的外部类的属性成员。

内部类也可以通过创建外部类之外被调用,只要将内部类声明为public即可。
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
Inner.display();

内部类不仅可以在类中定义,还能再方法中定义。
在方法中定义的内部类只能访问方法中的final类型的局部变量,因为用final定义的局部变量相当于一个常量,它的生命周期超出方法运行的生命周期。

匿名内部类
内部类可以继承一个抽象类和实现一个接口.

interface A
{
	public void fun1();
	get(A a) 
	{
		a.fun1();
	});
}
get(new A() )
{
	public void fun1()
	{
		System.out.println(i);	//i是类变量,这里实现接口
	} 
}

程序实现了接口中的方法,并把整个的一个实现类传递到了方法get()中,这就是匿名内部类,它不用声明实质上的类就可以使用。

匿名对象
匿名对象就是没有明确声明的对象,可理解为只使用一次的对象,即没有一个具体的对象名称引用它。
例子:println( new Preson().talk() );
可以看出该声明并没有具体赋给任何一个Preson类对象的引用,所以此对象只使用了一次,之后会被java的垃圾收集器回收。

覆写Object 类中的equals方法
Object类中存在有个equals方法,比较对象是否相等,且必须被覆盖。对象存储的内容放在不同的内存空间中,指向了不同的内存地址,实际上调用的是Object类中的equals方法。所以在开发过程中往往需要在类中覆写equals方法。
if(object instanceof Person)
{
// 如果是Preson类的实例,则向下转型,如Preson p = new Student();
Person p = (Preson)object;
// 再进行字段的比较equals;

}

接口对象的实例化
接口是无法直接实例化的,因为接口没有构造方法,但是可以根据对象多态性的概念,通过接口的子类对其进行实例化。

interface Preson()
{
	public void fun1();
}
class Student implements Preson
{
	public void fun1()
	{
		printf(1);	//继承接口就得实现接口的方法
	}
}
class Test
{
	public static void main(String[] args)
	{
		Person p = new Student();	//实例化接口的子类,再赋给接口的变量,实例化接口
		p.fun1();
	}
} 

接口实际上定义了一个统一的标准。

this关键字的使用
this强调对象本身,是指调用类中方法或属性的那个对象。
可以使用this()来用某一个构造方法调用另一个构造方法。

static关键字的使用
static关键字声明静态变量和方法。
static声明的属性是所有对象共享的,即所有的对象共享内存空间。
用static类型的属性可以在构造方法中加入计数操作。

静态方法
也可以称为“类方法”。
静态方法的使用不需要实例化就可以直接使用,因为系统为静态方法分配了一块静态存储区域,直到程序结束才会释放。
static声明的属性可以在非static类型的方法中使用,而非static声明的属性不可以在static类型的方法中使用。

main()方法
由于Java虚拟机需要调用类的main()方法,所以main()方法必须是public。又因为Java虚拟机在执行main()方法时不必创建对象,所以该方法就必须是static的,该方法接收一个String类型的数组参数,该数组中保存执行Java命令时传递给所运行的类的参数。

静态代码块
一个类可以使用不包括在任何方法中的静态代码块,当类被载入时,静态代码块会首先被执行,且只执行一次。静态代码块经常用来进行类属性的初始化。

final关键字的使用
在Java中声明类、属性和方法时,可使用关键字final来修饰。
(1)final标记的类不能被继承。
(2)final标记的方法不能被子类覆写。
(3)final标记的变量(成员变量或局部变量)即为常量,只能赋值一次。
instanceof关键字的使用
可以用instanceof判断一个类是否实现了某个接口,也可以用它判断一个实例是否属于一个类。格式如下:
对象instanceof类(或接口),返回值为布尔型数值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章