Java - 初始化与清理

阅读数:72 评论数:0

跳转到新版页面

分类

python/Java

正文

Java完全采用动态内存分配方式。每当想创建新对象时,就需要使用new关键字来构建此对象实例。

1、this

在构造器中,如果为this添加了参数列表,那么就有了不同的含义。这将产生对符合此参数列表的某个构造器的明确调用。

(1)尽管可以用this调用一个构造器,但却不能调用两个,而且必须将构造器调用置于最起始处。

(2)除构造器外,编译器禁止在其他任何方法中调用构造器。

(3)this使用时,必须在构造函数的第一行。

public class Person{
	int age = 0;
	String name = "";
	Person(int a){
		age = a;
		System.out.println("age:"+age);
	}
	Person(String n){
		name = n;
		System.out.println("name:"+name);
	}
	Person(int a,String n){
		this(a);
		this.name = n;
		System.out.println("both!");
	}
}

2、finalize方法

一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存。

public class FinalizeDemo{
	public static void main(){
		Cake c1 = new Cake(1);
		Cake c2 = new Cake(2);
		Cake c3 = new Cake(3);
		c2 = c3 = null;
		System.gc();//Invoke the Java garbage collector	
	}
}
class Cake extends Object{
	private int id;
	public Cake(int id){
		this.id = id;
		System.out.println("Cake Object "+id+" is created");
	}
	protected void finalize()throws java.lang.Throwable{
		super.finalize();
		System.out.println("Cake Object "+id+"is disposed");
	}
}
/**
执行结果 :
Cake Object 1 is  created
Cake Object 2 is created
Cake Object 3 is created
Cake Object 3 is disposed
Cake Object 2 is disposed
*/

在定义类成员变量的地方可以为其赋值,在C++中是不能这么做的。在类的内部,变量定义的先后顺序决定了初始化的顺序。

3、访问权限

(1)package必须是文件中除注释以外的第一句程序代码。

(2)每个文件只能有一个public类,但是也可以完全不带public类,在这种情况下,可以随意对文件命名。

(3)类的名字必须与文件名相同

(4)除了public、private、protected之外,Java有一种默认的访问权限,当没有使用前面的访问指字词时,它将发挥作用。这种权限通常称为包访问权限。在这种权限下,同一个包中的类可以访问这个成员,而包之外的类,是不能访问这个成员的。

package testcontrol;
public class MyTest{
	public int mIntPublic = 22;
	protected int mIntProtected = 33;
	private int mIntPrivate = 44;
	int mInt = 55;
	void printForAll()
	{
		System.out.println(mIntPublic);
		System.out.println(mIntProtected);
		System.out.println(mInt);
		System.out.println(mIntPrivate);
	}
}
package testcontrol;
//同一个包下的子类
class MyTestDerived extends MyTest
{
	void printForAll()
	{
		System.out.println(mIntPublic);
		System.out.println(mIntProtected);
		System.out.println(mInt);
		//Syste.out.println(mIntPrivate);
	}
}
//同一个包下的非子类
public class MyTestNotDerived
{
	public static main(String[] args){
		MyTest objMyTest = new MyTest();
		System.out.println("Access Permission Test in same package:1");
		System.out.println(objMyTest.mIntPublic);
		System.out.println(objMyTest.mIntProtected);
		System.out.println(objMyTest.mInt);
		//System.out.println(objMyTest.mIntPrivate);
		System.out.println("Access Permission Test:2");
		objMyTest.printForAll();
		System.out.println("Access Permission Test in Derived:3");
		objDerived.printForAll();
	}
}



相关推荐

1、基本类型 在程序设计中经常用到一系列类型(基本类型),它们需要特殊对待。对于这些类型,Java采取与C和C++相同的方法,也就是说,不用new来创建变量,于是创建一个并非引

1、直接常量 为了编译器可以准确的知道要生成什么样的类型,可以给直接常量后面添加后缀字符标志它的类型,若为L表示long,F表示float,D表示double。也可以利用前缀表示进制,0x表示十六进制

一、类的继承 1、说明 (1)extends关键字用于类的继承。 (2)在C++中,方法的动态绑定是使用virtual关键字来实现的,而在Java中,动态绑定是默认的形为,不需要添加额外的关键字。 (

1、类型信息 指程序能够在运行时发现和使用类型信息,我们一般使用两种方式来实现运行时对象和类的信息:传统的RTTI和反射机制。 (1)class对象 <p

用于描述Java源代码,使得我们能够以将由编译器来测试和验证的格式,存储有关程序的额外信息。使用时在@后面跟注解的名字。 1、预定义的三个注解<

一、创建线程 创建线程有四种方式:继承Thread类、实现Runnable接口、实现Callable接口、通过线程池创建。 1、继承Thread 重写run方法。 class A extends Th

一、Collection接口 Collection接口的iterator和toArray方法都用于获得集合中的“所有元素”。前者返回一个“iterator”对象,后者返回一个包含集合中所有元素的数组。

1.hashCode的存在主要用于查找的快捷性,如hashtable,hastmap等,hashcode是用来在散列存储结构中确定对象的存储地址的。 2.如果两个对象相同,就是适用

Java中的数据类型,可分为两类: 1.基本数据类型,它们之间的比较,应用双等号,比较的是它们的值。 2.复合数据类型(类) 当他们用双等号进行比较的时

label154: while (true) { int i = in.read(tmp, 0, 1024); i