(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(); //1
public 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。。。
*