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

java知识散点

2015-07-30 11:47 453 查看

1. 三目运算符右结合


true?false:true == true?false:true;这个表达式等于true?false:(true == (true?false:true)); => true?false:(true == false); => true?false:false;最终应该得到false。


2. &,|,~ 为位运算符,也是Boolean类型的逻辑运算符


此时与&&,|| 区别:&&或|| 做了优化,&& 前为false或者 || 前为true,则不继续运算,而& | 则做完。


3. final,finally,finalize

finally


异常处理补充,总会执行的代码(无论是否异常),try中return时,会在return前执行

finalize


方法名,Object中定义,释放资源。

final
修饰符

final成员

成员初始化后值不能再改变。

final方法

方法可被继承但不可重写。编译时将主体插入而不是调用。

final类

类不可被继承

4. 传值OR传引用?


都是传一个副本(拷贝),都是传值

基本类型或者引用类型,都会传一个拷贝,基本类型传的是另一个一样值的变量,因此传参数过去后改变不会影响。



引用类型事实上传的也是另一个一样值的引用,改变传的值也不会影响。这句可能会不被赞同,如下代码(Pig是一个简单的包含一个name成员的类,便不列出代码),将pig这个引用传入后,为pig重新引用一个类(名pig1),输出pig的name属性:


public class Test {
public static void main(String[] args) {
Pig pig = new Pig("pig");
changeName(pig);
System.out.println(pig.getName());//"pig"而不是"pig1"
}
static void changeName(Pig pig){
pig = new Pig("pig1");
}
}


那如果要改值呢?传递的pig虽是另一个pig,但是他的值(即对象堆中的地址两个一样的,因此可以通过传入的pig这个引用操作传入之前指向的对象),如下代码便可以改变name


static void changeName(Pig pig){
pig.setName("pig1"); //main()方法则输出"pig1"
}

因此可以说都是传值,所谓传递引用,只是传递的引用的值可以被用来操作对应的对象
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: