您的位置:首页 > 编程语言 > Java开发

java学习-5.初始化与清理

2016-04-08 21:32 411 查看

初始化与清理

用构造器确保初始化

Java会在用户有能力操作对象之前自动调用相应的构造器,从而保证初始化的进行

构造器的名称必须与类名完全相同

1.不接受任何参数的构造器叫做默认构造器

class Rock {
Rock() {
System.out.print("Rock  ");
}
}
public class SimpleConstructor {
public static void main(String[] args) {
for(int i=0;i<5;i++)
new Rock();
}
}


2.构造器也可以带有形式参数,以便指定如何创建对象

class Rock2 {
Rock(int i) {
System.out.print("Rock"+i+" ");
}
}
public class SimpleConstructor2 {
public static void main(String[] args) {
for(int i=0;i<5;i++)
new Rock(i);
}
}


方法重载

为了让方法名相同而形式参数不同的构造器同时存在,必须用到方法重载;其他方法也可以用方法重载

class Tree {
int height;
Tree() {  //无参的构造方法
System.out.println("Planting a seedling");
height=0;
}
Tree(int initialHeight) {//有参数的构造函数
height=initialHeight;
System.out.println("Create new tree that is"+height+"feet tall");
}
void info() {
System.out.println("Tree is"+height+" feet tall");
}
void info(String s){
System.out.println(s+": Tree is "+height+"feet tall");

}
}
public class OverLoading {
public static void main(String[] args) {
for(int i=0;i<5;i++){
Tree t=new Tree(i);
t.info();
t.info("overloading method");
}
new Tree();
}
}


参数顺序不同也足以区分两个方法

涉及基本类型的重载

1.如果传入的数据类型(实际参数类型)小于方法中声明的形式参数类型,实际数据类型就会被提升。如果无法找到恰好接受char参数的方法,就会把char直接提升为int型

2.如果传入的数据类型(实际参数)大于方法中声明的形式参数类型,就得通过类型转换来执行窄化转换

默认构造器

默认构造器是没有形式参数的,是用于创建一个默认对象。如果你写的类中没有构造器,则编译器会自动帮你创建一个默认的构造器,但是如果已经定义了一个构造器(无论是有参数还是没有),编译器就不会帮你自动创建默认构造器

this关键字

this关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用

如果在方法内部调用同一个类的另一个方法,就不必使用this,直接调用即可。**只有当需要明确指出对当前对象的引用时,才需要使用this关键字。

成员初始化

1.类的数据成员是基本类型时,类的每个基本类型数据成员都会有一个初始值
2.在类里定义一个对象引用时,如果不将其初始化,此引用就会获得一个特殊值null


指定初始化

1.在定义类成员变量的地方为其赋值

public class InitialValues2 {

boolean bool=true;
char ch='x';
int i=0;


也可用此方法初始化非基本类型的对象

class Depth{}
public class Measurement {
Depth d=new Depth();
}


2.可以通过调用某个方法来提供初值

public class MethodInit{
int i=f();
int f(){return 11;}
}


构造器初始化

可以用构造器来进行初始化

无法阻止自动初始化的进行,它将在构造器被调用前发生

初始化顺序

在类的内部,变量定义的先后顺序决定了初始化的顺序。**即使变量散布于方法定义之间,它们仍然会在任何方法(包括构造器)被调用前得到初始化。

数组初始化

要定义一个数组,只需要在类型名后加上一对空方括号即可:

int[] a1;

或者 int a1[];


编译器不允许指定数组的大小

数组的初始化可以出现在代码的任何地方,但也可以使用一种特殊的初始化表达式,它必须出现在创建数组的地方,即是由一对花括号括起来的值组成的:

int[] a1 = {1,2,3,4,5};


Java中可以将一个数组的值赋值给另一个数组,其实真正做的只是复制了一个引用

public class OverLoading {
public static void main(String[] args) {
int[] a1 ={1,2,3,4,5};
int[] a2;
a2=a1;
for(int i=0;i<a2.length;i++)
a2[i]=a1[i]+1;
for(int i=0;i<a1.length;i++)
System.out.println(a1[i]);
}
}


在不确定在数组里需要多少个元素,可以直接用new在数组里创建元素

int[] a=new int[rand.nextInt(20)];//创建一个基本类型数组
Integer[] a=new Integer[rand.nextInt(20)];//创建一个引用数组


枚举类型

enum关键字,它使得我们在需要群组并使用枚举类型集时,可以很方便地处理

参考书《java编程思想》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java