1.用句柄操作对象
/** * 用句柄操纵对象 */ private void twoOne(){ //这只是一句柄,并不是一个对象 String s; //这才是一个对象 String s1 = "对象"; }
2.所有的对象必须创建
/** * 所有的对象都必须创建 */ private void twoTwo(){ //一个正式的创建对象的过程 String s = new String("对象"); }
3.对象保存在什么地方
/** * 对象保存在什么地方 */ private void twoTwoOne(){ //1.寄存器 (根据需要编译器分配,对于它没有直接的控制权) //2.堆栈 ram (通过堆栈指针的移动,控制内存的创建与释放,对象句柄放到里面) //3.堆 ram 保存java对象 //4.静态数据 ram 位于固定位置, //5.常数存储 直接放置于程序代码内部 //6.非ram存储 流对象,硬盘对象 }
4.特殊情况 主要类型
/** * 特殊情况 主要类型 */ private void twoTwoTwo(){ //名 长度(bit) 对象 //boolean 1 Boolean //char 16 Character //byte 8 Byte //short 16 Short //int 32 Integer //long 64 Long //float 32 Float //double 64 Double //void Void //使用 char c = '2'; Character c1 = new Character('2'); //任意精度 整数 BigInteger bigInteger = new BigInteger("213213123213213213213"); //任意精度 定点数字 BigDecimal bigDecimal = new BigDecimal("23729328938293.2328932893829382"); System.out.println(bigInteger); System.out.println(bigDecimal); }
5.数组
/** * 数组 */ private void twoTwoThree(){ //全部初始化为0 int[] ints = null; //未初始化报错 try { System.out.println(ints[0]); }catch (Exception e){ System.out.println("出错了, 现在没有0号元素"); } //初始化为0 ints = new int[10]; for (int temp : ints){ System.out.print(temp + " "); } System.out.println(); //访问数组之外 报错 try { System.out.println(ints[11]); }catch (Exception e){ System.out.println("出错了, 现在没有11号元素"); } }
6.清除对象与作用区域
/** * 绝对不要清除对象 */ private void twoThree(){ //一般而言,只要被判断为将不被使用了的内存 都会被回收 //比如这个s 经历了函数之后,就可以被回收了,在下一次回收的时候,就会被回收 String s = new String("wewe"); } /** * 作用域 */ private void twoThreeOne(){ { int x = 0; { System.out.println("x = " + x); x = 5; int y = 0; } System.out.println("x = " + x); } } /** * 对象的作用域 */ private void twoThreeTwo(){ //执行之后,没有办法访问,但是对象占据着内存,但是java会回收它 String s = new String("对象"); }
7.新建数据类型 类
/** * 新建数据类型 */ private void twoFour(){ //int double... 都会有默认值 class Temp{ int i; double f; int ceshi(int a){ return a + 3; } } Temp temp = new Temp(); System.out.println(temp.i = 100);//赋值 使用 System.out.println(temp.f); System.out.println(temp.ceshi(5)); }
8.static关键字
/** * static 关键字 */ private void twoSix(){ //1.想用一个存储区域来保持特定的数据(无论创建多少个对象,还是根本不创建对象) //2.即使没用创建对象,也需要一个能调用的方法 System.out.println(staticInt); System.out.println(staticFunc(5)); System.out.println(staticClass.getA()); } private static int staticInt = 100; private static int staticFunc(int a){ return a + 3; } //注意1.a, getA 可以访问 但是 b 不能被访问 //注意2.静态内部类可以包含静态变量 private static class staticClass{ public static int a = 100; int b = 1000; public static int getA() { return a; } }