java笔记-做题点VIII

java专项练习记录点第八弹。关于表示路径的方法、代码初始化过程、构造方法等。


1.内部类可以是静态static的,也可用public,default,protected和private修饰;
外部类的修饰符只能是public,abstract,final。

2.Java一个源程序只能有一个public类存在,且类名与文件名相同。
Java程序是从main方法开始执行的,public为类加载器提供入口,然后找到public类中的main方法开始执行。如果存在多个public类,程序将不知道该从哪里执行。

3.一个题,很绕的题:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public class Test {
public static void main(String [] args){
System.out.println(new B().getValue());
}
static class A{
protected int value;
public A(int v) {
setValue(v);
}
public void setValue(int value){
this.value = value;
}
public int getValue(){
try{
value++;
return value;
} catch(Exception e){
System.out.println(e.toString());
} finally {
this.setValue(value);
System.out.println(value);
}
return value;
}
}
static class B extends A{
public B() {
super(5);
setValue(getValue() - 3);
}
public void setValue(int value){
super.setValue(2 * value);
}
}
}

答案是:22 34 17

详细的步骤见一个解释的很详细的博客:http://blog.csdn.net/zhumintao/article/details/53818972


2017-10-23

1.表示路径的方法:c:\\my\\1.txt = c:/my/1.txt

./表示当前项目的路径;
../表示当前目录的父目录路径;
盘符:\\name\\file 或者 盘符:/name/file表示物理路径。

2.来来来,一个关于整个代码初始化过程的栗子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class X{
Y y=new Y();
public X(){
System.out.print("X");
}
}
class Y{
public Y(){
System.out.print("Y");
}
}
public class Z extends X{
Y y=new Y();
public Z(){
System.out.print("Z");
}
public static void main(String[] args) {
new Z();
}
}

初始化过程:

  1. 初始化父类中的静态成员变量和静态代码块;
  2. 初始化子类中的静态成员变量和静态代码块;
  3. 初始化父类的普通成员变量和代码块,再执行父类的构造方法;
  4. 初始化子类的普通成员变量和代码块,再执行子类的构造方法;

(1)初始化父类的普通成员变量和代码块,执行 Y y=new Y(); 输出Y
(2)再执行父类的构造方法;输出X
(3) 初始化子类的普通成员变量和代码块,执行 Y y=new Y(); 输出Y
(4)再执行子类的构造方法;输出Z

所以输出YXYZ

3.关于构造方法:

构造方法的优先级一般比代码块低;
一般在创建新对象时,系统会自动调用构造方法;
构造方法的主要作用是完成对类的对象的初始化工作;
构造方法无返回类型。


2017-10-24

1.静态变量只能在类主体中定义,不能在方法中定义。


2017-10-27

1.HashMap可以插入null的key或value,插入的时候,检查是否已经存在相同的key,如果不存在,则直接插入,如果存在,则用新的value替换旧的value。

2.接口没有构造方法,所以不能实例化,抽象类有构造方法,但是不是用来实例化的,是用来初始化的。