值传递和引用传递

来源:互联网 发布:sql双机热备 编辑:程序博客网 时间:2024/05/15 11:09

(1)
class Value{

public int i = 15;

}
public class Test1 {

public static void main(String[] args) {    Test1 test1 = new Test1();    test1.first(); }void first(){    int i = 5;    Value v = new Value();    v.i = 25;    second(v ,i);    System.out.println(v.i);}void second(Value v, int i) //注意理解此处的v 是另一个引用,和first 函数中的,v,不一样,他们都在栈上存放,只是指向同一个在堆上内存的内存块。{    i = 0;    v.i = 20;  //注意:此处的v 是改变了first中的v的值    Value value = new Value();  //此处是重新申请的一块内存。    v = value;    System.out.print(v.i + " "+ i + " ");}

}
/*
* 主要考察的是值传递和引用传递
* java 中的原始数据类型都是值传递,传递的是原始值的一个副本, 形参的改变不会影响实参的值,引用传递传递的是引用的对象的数据, 一般包括String, … 形参与实参指向的是同一块内存的地址,因而形参的变化,会影响实参是值.
(2)
public class Test2 {

public static void main(String[] args) {    boolean a = true == true? false:true;    System.out.println(a);  boolean b = true ? false: true == true ? false:true;  System.out.println(b);}

}
*注: 此处的考点: b = (true ? false: true == true ? false : true);
// == 的优先级强于 三目运算符,此时先判断: true == true 此时返回 false
// b = (true ? false : true? false: true)
// b = (true ? false :false)
// b = false ;
//也可理解为直接执行了前面的 b = false; 因为第一个问号前面是true 所以直接 b = false;

(3)
package fouthDay;

public class Test3 {

public static Test3  t1 = new Test3(); //1public static Test3  t2 = new Test3();{    System.out.println("构造块");}static {    System.out.println("静态代码块");}public Test3() {    System.out.println("构造方法");}public static void main(String[] args) {    Test3 test3 = new Test3();}

}
/**
* 执行顺序的优先级:静态 –> main() –> 构造块 –> 构造方法
* 静态块: 用static 声明 , JVM加载时,只执行一次;
* 构造块: 类中用{} 定义,每次创建你对象的时候,都会执行;
*
* 执行:
* 1 静态块按照声明顺序执行,所以执行的时候,先执行1 ,该语句创建对象,会调用构造块。
* 2 然后再执行第二个static 的声明, 此时又创建对象,又会调用构造块。
* 3 然后执行第三个 static 静态代码块;
* 4 然后再执行main()函数的代码块:Test3 test3 = new Test3();执行构造块,再执行默认的构造函数;
* 此处没有效果;


结果: 构造块      构造块       静态代码块       构造块

如果加上构造方法,此时的结果是:


构造块构造方法构造块构造方法静态代码块构造块构造方法

(4)
/*

  • 1 Java.Thread 的方法resume() 负责重新开始被以下哪个方法中断的线程的执行(D)
  • A stop
  • B sleep
  • C wait
  • D suspend

    • 注解: suspend() 和 resume()方法:两个方法配套使用, suspend()使线程进入阻塞状态, 并且不会自动回复, 必须使用对应的resume()被调用,才能使线程重新进入可执行状态;
  • wait()与notify() 一起使用;

    • 2 下列描述错误的是(BD)
  • A 类只能继承一个父类,但是可以实现多个接口;
  • B 抽象类自身可以定义成员 而接口不可以;
  • C 抽象类和接口都不能被实例化;
  • D 一个类以有多个基类和多个接口;

    • 注解: A Java 为单继承 ,多实现, 可以实现多个接口;
  • B 接口由全局常量和公共方法组成,即使不写public funal 和 public abstract 也会默认是全局常量和公共方法;
  • 抽象类: 和一般类没有什么区别,唯一的区别在于只要有出现抽象方法的类,就必须声明为抽象类;
  • C 抽象类和接口不能被直接实例化,(直接实例化的含义是:使用关键字:new 操作),可以对实现接口的类,进行实例化接口,也可以 对继承了抽象类的子类进行实例化抽象类。
  • D 同A。。。
    *
0 0
原创粉丝点击