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

Java编程思想学习笔记

2014-11-16 14:02 85 查看
1、类型默认值

对象的默认值是null。boolean 的默认值是false。char的默认值是'\u0000'(null)。

byte的默认值(byte) 0。short 默认值 (short)0。int 默认值 0。long 默认值 0L。float 默认值 0.0f。double 默认值0,0d。

所以对于成员字段都会有默认的初始化,但是对于局部变量若没有初始化就是内存的随机值。

2、java 的数据是有符号数。

3、static修饰的字段和方法是属于类的,不是对象!非static 字段和方法是和特定的对象关联在一起的。static在类加载就初始化获得空间,所以静态方法只能访问静态字段!!!(没有对象就没有与对象对应的字段)但是非静态方法可以访问静态字段。(静态字段先于非静态字段创建)。一个类的静态字段被该类的所有对象共享!

测试用例:

public class Test {

private static class MyTest{

private int i=10;

private static final int j=1000;

public void getOne(){

System.out.println("非静态方法访问非静态字段"+i);

System.out.println("非静态方法访问静态字段"+j);

}

public static void getTwo(){

//System.out.println("非静态方法访问非静态字段"+i);

System.out.println("静态方法访问静态字段"+j);

}

}

public static void main(String[] args) {

MyTest.getTwo();

new MyTest().getOne();

MyTest t1= new MyTest();

MyTest t2= new MyTest();

MyTest t3= new MyTest();

System.out.println("对象调用静态方法");

t1.getTwo();//对象调用静态方法

t2.getTwo();//对象调用静态方法

t3.getTwo();//对象调用静态方法

}

}

结果:

静态方法访问静态字段1000

非静态方法访问非静态字段10

非静态方法访问静态字段1000

对象调用静态方法

静态方法访问静态字段1000

静态方法访问静态字段1000

静态方法访问静态字段1000

4、==比较的是地址,eques方法比较的是地址里的值。

测试用例:

public static void main(String[] args) {

Integer n1 = new Integer(47);

Integer n2 = new Integer(47);

System.out.println(n1 == n2);

System.out.println(n1 != n2);

System.out.println(n1.equals(n2));

}

结果:

false

true

true

5、左移位运算符(<<)能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补 0)。“有符号”右移位运算符(>>)则将运算符左边的运算对象向右移动运算符右侧指定的位数。“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入 0;若值为负,则在高位插入 1。Java 也添加了一种“无符号”右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位插入 0。

若对 char ,byte 或者 short 进行移位处理,那么在移位进行之前,它们会自动转换成一个 int。

6、字串运算符+

7、注意算术运算中的自动类型转换。利用强制类型确保结果准确。

8、(1) 简单的一个 continue 会退回最内层循环的开头(顶部),并继续执行。

(2) 带有标签的 continue 会到达标签的位置,并重新进入紧接在那个标签后面的循环。

(3) break 会中断当前循环,并移离当前标签的末尾。

(4) 带标签的 break 会中断当前循环,并移离由那个标签指示的循环的末尾。

测试用例:

public static void main(String[] args) {

int i = 0;

outer: while (true) {

prt("Outer while loop");

while (true) {

i++;

prt("i = " + i);

if (i == 1) {

prt("continue");

continue;

}

if (i == 3) {

prt("continue outer");

continue outer;

}

if (i == 5) {

prt("break");

break;

}

if (i == 7) {

prt("break outer");

break outer;

}

}

}

}

static void prt(String s) {

System.out.println(s);

}

测试结果:

Outer while loop

i = 1

continue

i = 2

i = 3

continue outer

Outer while loop

i = 4

i = 5

break

Outer while loop

i = 6

i = 7

break outer

9、垃圾收集器只知道释放那些由 new 分配的内存,所以不知道如何释放对象的“特殊”内存。为解决这个问题,Java 提供了一个名为 finalize()的方法,可为我们的类定义它。在理想情况下,它的工作原理应该是这样的:一旦垃圾收集器准备好释放对象占用的存储空间,它首先调用 finalize(),而且只有在下一次垃圾收集过程中,才会真正回收对象的内存。所以如果使用
finalize(),就可以在垃圾收集期间进行一些重要的清除或清扫工作。

10、final关键字

修饰类:该类是不能被继承的。

修饰字段或变量:说明该变量不能被修改类似const,内部类访问局部变量,局部变量要申明为final且该变量存储在堆上。

修饰方法:该方法是不能被复写的。同时若该方法没有循环,开关语句,则向编译器申请内联。

11、static 内部类

为正确理解 static 在应用于内部类时的含义,必须记住内部类的对象默认持有创建它的那个封装类的一个对

象的句柄。然而,假如我们说一个内部类是 static 的,这种说法却是不成立的。static 内部类意味着:

(1) 为创建一个 static 内部类的对象,我们不需要一个外部类对象。

(2) 不能从 static 内部类的一个对象中访问一个外部类对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: