On Java 8(Java编程思想)笔记 -- 第六章 初始化和清理

On Java 8(Java编程思想)笔记 – 第六章 初始化和清理

  1. 从概念上看,initialize()方法应该与对象的创建分离
    在Java中对象的创建和初始化是统一的概念

  2. new 表达式虽然返回了刚创建的对象的引用,但构造器本身无返回值

  3. 方法重载:
    允许方法具有相同的方法名,但接收的参数不同
    构造器是典型的重载

  4. 区分重载的方法:根据参数列表、参数的顺序

  5. 根据返回值类型区分方法的重载,Java编译器区分不出来
    下面展示一些 内联代码片

//无返回类型
void f(){}
//有返回类型
int f(){
return 1;
}
//调用方法
public static main(String[] args){
	f();//编译器不知道调用那个方法  报错
}

  1. 无参构造器 是默认创建的,一旦显示的定义了构造器则不会自动创建无参构造器
  2. this关键字只能在非静态方法内部使用
  3. 构造器调用构造器,只能this调用一次构造器,且必须先调用构造器
    不能再构造器之外的方法里面调用构造器
  4. static关键字:
    静态方法中不能调用非静态方法(反之可以),静态方法是为类创建的,不需要任何对象,一个类中的静态方法可以被其他的静态方法和静态属性调用
  5. Java的堆指针只是简单的移动 到尚未分配的区域,所以存储空间的分配速度特别快,(没分配一个新对象,向前移动一个,垃圾回收器一边回收内存,一边是堆中的对象紧凑排列
  6. 显示的静态初始化:静态初始化只有在必要的时刻进行,只会初始化一次
  7. 非静态实例初始化:非静态代码快在构造器之前执行的
  8. 基本类型的自动转换
    char,byte,short,int,long,float,double
    左——>右 向上转型自动转换
    右——>左 向下转型强制转换
    char 不会转byte和short 而是直接转int
  9. 初始化的顺序:
    在类中变量的定义顺序决定了他们初始化的顺序,即使变量定义子啊散布在方法定义之间,它们仍会在任何方法(包括构造器)被调用之前的到初始化
  10. 静态数据的初始化:
    初始化的顺序是静态对象(如果它们之间没有被初始化的话)然后是非静态变量
    顺序:
    1.静态初始化
    2.对象中的所有基本类型数据设置为默认值,数字会被设置为0,布尔型和字符型相同,引用被置为null
    3.字段定义处的初始化动作
    4.构造器初始化
  11. 数组的初始化
//数组的初始化方式
int[] a = {1,2,3,4,5};
int[] a = new int[rand.nextInt(20)];
int[] a = new int{1,2,3,4,5};
//对于数组初始化动作,可以出现在代码的任何地方,但是第一种使用一种特殊的初始化方式表达式,必须在创建数组的地方出现
  1. 可变参数列表:
// definition
void printArray(Object... args){
	for(Object obj : args){
		System.out.print(obj+" ");
	}
	System.out.println();
}
//调用
printArray(47,(float)3.14,11.11);
printArray((Object[]) new Integer[]{1,2,3,4});
printArray();//empty list is ok 
//可变参数实质上是一个数组
//如果有一组事物可以把他们当作列表传递
//如果有一个数组,该方法会把它们当作可变参数来接受
//可变参数的个数可以为0

可变参数列表使得方法重载更为复杂

static void f(float i,character... args){
	System.out.println("first");
}

static void f(character... args){
	System.out.println("second");
}

public static main(String[] args){
	f(1,'a');
	f('1','a');//报错
}

需要对某一方法增加一个非可变的参数解决这个问题

static void f(float i,character... args){
	System.out.println("first");
}

static void f(char c,character... args){
	System.out.println("second");
}

public static main(String[] args){
	f(1,'a');
	f('a','a');
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值