zoukankan      html  css  js  c++  java
  • java知识散点

    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修饰符
    1. final成员
      成员初始化后值不能再改变。
    2. final方法
      方法可被继承但不可重写。编译时将主体插入而不是调用。
    3. 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"
    }
    

    因此可以说都是传值,所谓传递引用,只是传递的引用的值可以被用来操作对应的对象

    所有文章未特殊说明均属原创,有误之处欢迎提出,转载随意,您喜欢就好,但请注明,谢谢!
  • 相关阅读:
    [翻译].NET Shell Extensions
    设计模式复习小结一(Strategy Pattern/Observer Pattern/Decorator Patter/Factory Pattern)
    学习定制自己的博文1
    SQLServer复习文档1(with C#)
    C#学习笔记-基础知识篇(不定期更新)
    C#学习笔记-迭代器模式
    C#学习笔记-组合模式
    C#学习笔记-备忘录模式
    C#学习笔记-适配器模式
    C#学习笔记-状态模式
  • 原文地址:https://www.cnblogs.com/nonefly/p/4688853.html
Copyright © 2011-2022 走看看