注:本文首发于稀土掘金。该平台的作者 逐光而行 也是本人。
theme: channing-cyan
highlight: ally-light
开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第7天, 点击查看活动详情 这也是第9篇文章。
Java初始化的顺序
有以下原则:(序号越小优先级越高)
- static>non-static
- 父类>子类
- 按成员变量定义的顺序
- 对于同一个成员,在域中初始化和块中初始化平级,即按照从上到下的顺序,以最后一次初始化为最终的值。
public class test{
static {a=2;}
static int a=1;
static int b=3;
static {b=4;}
public static void main(String[] args) {
System.out.print(a+" ");
System.out.print(b);
}
}
以上输出的结果为:1 4
关于构造方法的一些注意事项
- 构造方法必须与类名相同
Q:那类中的普通方法也能用这个名字吗?A:可以的
- 构造方法不能被继承,也不能被override,但是可以被overload(即使用不同参数个数或参数类型来定义多个构造方法)
- 若没有定义构造方法,编译器会默认生成一个无参数的,且其修饰符与类的修饰符保持一致。
关于父类和子类的关系问题:
- 子类可以通过super()来显式调用父类的构造方法。当父类没有提供无参数的构造方法时,子类的构造方法必须显式地调用父类的构造方法(反之,如果父类提供了,子类就不用显示说明)
Java中的对象与引用
Java没有指针的 概念 ,但并不代表指针就完全不存在了。比如new返回的都是一个指针的引用。
- Java在处理基本数据类型时
回顾:基本数据类型有哪些?byte short int long float double char boolean
采取的是按值传递(输入参数的拷贝),而对其他类型都是按引用传递
- 对象在函数调用和用“=” 赋值时也是用的引用传递
Java中的clone妙用
- 目标:从对象A中创建一个具有相同状态的B,且后续对B的修改不再影响A
- 方案:使用clone
- 原理:返回一个Object对象的拷贝,函数返回的是一个新的对象而不是一个引用。
使用步骤:
- 继承Cloneable接口
- 重写clone()方法,在其中调用super.clone()
- 把浅拷贝的引用指向原型对象新的克隆体
- 示例代码如下:
public class test{
public static void main(String[] args) {
Obj a=new Obj();
Obj b=(Obj)a.clone();
b.changeInt();
System.out.println("a:"+a.getInt());
System.out.println("b:"+b.getInt());
}
}
class Obj implements Cloneable{
private int i=0;
public int getInt(){
return i;
}
public void setInt(int num){
i=num;
}
public void changeInt(){
this.i=1;
}
public Object clone(){
Object o=null;
try{
o=(Obj)super.clone();
}catch(CloneNotSupportedException e){
e.printStackTrace();
}
return o;
}
}
打印结果:
a:0
b:1