Think in Java
2.一切都是对象
2.1 引用操作对象
- Java 中一切都是对象,因此可以采用单一固定得语法。
- 操作对象得标识符实际上是对对象得一个 “引用”reference“。例如 遥控器 (引用)来 操纵电视(对象)
- 即使没有电视剧 , 遥控器 也可独立存在
- 创建引用的同时便进行初始化 String s = "abcd"
- 创建了引用 让它与一个新的对象相关联。 new "给我一个对象" String s = new String("abcd");
2.2.存储到什么地方
- 5 个地方可以存储数据
- 寄存器:最快的存储区, 处理器内部 不能直接控制,根据需求分配
- 堆栈:RAM中 (随机访问存储器)中,堆栈指针 可以从处理器哪里获得直接指出,向下移动分配新内存,向上移动,释放内存。仅次于寄存器 。Java系统必须知道存储再堆栈内所有项的确切生命周期,以便上下移动堆栈指针。这一约束限制了程序的灵活性,所以虽然某些 Java 数据存储再堆栈中,特别是 对象的引用 ,Java对象不存储其中
- 堆: 通用的内存地址 RAM区中 编译器不需要知道存储的数据再堆里存活了多长时间。 new一个对象 的时候,会自动再堆里进行存储分配。但是:用堆进行存储分配和清理可能比用堆栈需要更长的时间
- 常量存储: ROM只读存储器 常量值通常直接存放在程序代码内部,这样做是安全的,永远不会改变。
- 非RAM存储:如果数据完全存活于程序之外,那么它可以不受程序控制,在程序没有运行时也可以存在。流对象和持久化对象
2.3 基本类型
基本类型占存储空间的不变性,比大多数语言编写程序更具有移植性的原因
数组:
当创建了一个数组对象时,实际上是创建了一个 引用数组,并且每个引用都会被自动被初始化为一个特定的值, Null,当Java看到Null ,就知道这个引用还没有指向某个对象。在使用任何引用前 ,需要为其指定对象。如果使用是 还是 Null,Java会报错。 存放基本类型的数组,初始化为 0.
2.4 永远不要销毁对象
变量生命周期的概念,占据了程序设计工作中非常重要的部分。变量存活多久?如何销毁?什么时候销毁?什么周期混乱 会引起大量的程序Bug。Java 替我们完成了所有的清理工作。
2.4.1 作用域
- 大多数过程型语言都有作用域(scope)的概念。
- Java 由new创建的对象 ,只要你需要 就 一直存在
- Java有垃圾回收机制,监视 new 创建的所有对象,并辨别那些不会再被引用的对象。随后,释放这些对象的内存空间。(不必担心内存回收问题,你只要创建对象,一旦你不需要,自行消失 )
2.4.2 类
Java 中你所做的全部工作就是定义类,产生哪些类的对象,以及发送消息给这些对象
- class 创建 一个 类
- new 一个对象
- 类中的元素
- 字段 (数据成员)
- 方法 (成员函数)
- Java中方法只能作为类的一部分来创建。方法只有通过对象才能调用,且这个对象必须能执行这个方法调用。
- 你想使用 程序里面预先定义好的类 Import
2.4.3 static 关键字
static 字段对每个类来说都只有一份存储空间,非static字段则是对每个对象有一个存储空间,这一点对main 方法很重要 ,程序的入口
重要用法:
-
声明一个事物是static就意味这这个域或者方法不会包含它的那个类的任何对象实例管理在一起
-
未创建某个类的任何对象,也可以调用static方法,访问其static域
class StaticTest{ static int i = 47; } StaticTest st1 = new StaticTest();
调用方法:
- st1.i
- StaticTest.i ++
调用静态方法和调用静态变量相似
2.4.4 第一个 Java程序
Java最强大的优势就是,他又庞大的标准类库
// 打印日期
System.out.println(new Data());
传递的参数 是一个 Data对象,一旦创建它之后,就可以直接将它的值(自动转换为String类型)发送给println().当这条语句被执行完毕之后,Data对象就不再被使用,而垃圾回收器会发现这一情况,并再任意时候将其回收。
2.4.5 Javadoc
提取注释工具 /** */ 只能为 public 和 protected 成员进行文档注释。因为 public 和 protected 能再文件之外被使用。 private 可以用 -privateb标记
标签
- @see 引用其他类文档
- @link 超连接文本
- @docRoot 文件树页面的显示超链接
- @inheritDoc 从基类中继承相关的文档到当前类中
- @version 格式如下 @version version-information 提取版本信息
- @author author - information 提取作者信息
- @since 此类支持的JDK版本
- @param 方法文档中
- @return 方法文档中
2.5 编码风格
类名 驼峰原则
课后题
public class 练习1 {
static int i;
static char c;
public static void main(String[] args) {
System.out.println("int = " +i);
System.out.println("char = " + c);
}
}
===============================
int = 0
char =
class StaticTest{
static int i = 47;
}
class Incrementable{
static void increment(){
StaticTest.i++;
}
}
public class 练习8 {
public static void main(String[] args) {
System.out.println("StaticTest.i = "+StaticTest.i);
StaticTest st1 = new StaticTest();
StaticTest st2 = new StaticTest();
System.out.println("st1.i="+st1.i);
System.out.println("st1.i="+st2.i);
// i+1
Incrementable.increment();
System.out.println("StaticTest.i = "+StaticTest.i);
System.out.println("st1.i="+st1.i);
System.out.println("st1.i="+st2.i);
//st1.i = 3
st1.i = 3;
System.out.println("StaticTest.i = "+StaticTest.i);
System.out.println("st1.i="+st1.i);
System.out.println("st1.i="+st2.i);
StaticTest st3 = new StaticTest();
System.out.println("st3.i="+st3.i);
}
}
============================
StaticTest.i = 47
st1.i=47
st1.i=47
StaticTest.i = 48
st1.i=48
st1.i=48
StaticTest.i = 3
st1.i=3
st1.i=3
st3.i=3
Process finished with exit code 0
第九题
在java语言中,有一种自动包装机制,它的主要作用是用于将基本类自动转换成与基本类对应的包装类,以便将基本类可以应用于容器中,而不用程序手动建立包装类,使编程过程更加简单,还可以减少错误。
基本类型和包装器类型对应表:
基本类型 包装类型
boolean Boolean
char Character
byte Byte
short Short
int Integer
long Long
float Float
double Double
void Void
public class 练习9 {
public static void main(String[] args) {
boolean a = false;
Boolean A = a;
System.out.println(a);
System.out.println(A);
int b = 1;
Integer B = b;
System.out.println(b);
System.out.println(B);
}
}
========================================
false
false
1
1
public class 练习10 {
public static void main(String[] args) {
System.out.println("args[0] = " + args[0]);
System.out.println("args[1] = " + args[1]);
System.out.println("args[2] = " + args[2]);
}
}