第二章 一切都是对象
2010-10-04 16:38
661 查看
第二章 一切都是对象
1、用引用操作对象
就如遥控器和电视机的关系,引用可以操作对象,又可以脱离电视机存在
String s;这里创建的就是一个引用,而不是对象
如果你需要向引用发送消息,那么你必须要使s与某个事物相关联,所以一种安全的方法是创建一个引用的同时便对引用进行初始化。
String s = “abc”;
2、通常为引用与一个新的对象相关联,通常用new关键字来实现这一目的。
3、对象存储到什么地方
(1)寄存器:这是最快的存储区,它位于处理器内部,我们不能直接控制,也不能感觉到它的存在
(2)堆栈:位于ram中,但是可以通过堆栈指针可以从处理器那获得直接支持。堆栈指针向下移动则分配新的空间,向上移动则释放内存。创建程序时,java系统必须知道存储在堆栈空间中所有项的确切生命周期,以便上下移动堆栈指针,限制了灵活性,java对象不存在此中,仅仅某些数据存储在这里。
(3)堆:一种通用内存池,也位于ram中,用于存放java对象,编译器不需要知道存储在其中的数据的生命周期,因此灵活性高,当你需要一个对象的时候,只需要写入new一行简单的代码。但是我们必须要对这种灵活性付出代价(因为比在堆栈中耗费的时间要长)
(4)常量存储:常量值位于程序代码内部,它们永远不被改变,存放在rom(只读存储器中)
(5)非ram存储:例如、流对象和持久化对象。可以把对象转化成为可以存放在其他媒介中的事物。
(6)特例、基本数据类型:这些基本数据对象不采用new关键字创建变量,而是创建一个并非是引用的“自动”变量,这个变量直接存储值,并置于堆栈中。
这些数据所占的存储空间是不变的
4、java确保数组会被初始化,而且不能在它的范围之外被访问。
这是因为当创建一个数组的时候,实际上是创建了一个引用数组,并且每个引用都会自动被初始化为一个特定值,该值拥有自己的关键字null,一旦java看到了null,就知道这个引用还没有指向某个对象。在使用任何引用前,必须为其指定一个对象,如果试图使用一个还是null的引用,那么就会报错。
5、作用域问题:
①变量中的作用域(c/c++与java的区别)
②对象的作用域(在c++中,当你使用完对象之后必须将其销毁,而在java中,当用new创建的对象,只要你需要,它就一直存在,为了防止对象填满内存空间,java采用垃圾回收器来监听new创建的所有对象,并辨别哪些不会再被引用的对象,然后释放这些对象的内存空间)
6、基本成员变量的默认值
但是上述初始化的方法并不适用于“局部”变量,如果用于局部变量,则java将会报错
Eg1(正确的例子)
public class Demo1 {
//定义类成员变量,java默认值为0
int i;
public static void main(String[] args) {
Demo1 d1 = new Demo1();
System.out.println (d1.i);
}
}
Eg2(错误的例子)
public class Demo1 {
//定义类成员变量
int i;
public static void main(String[] args) {
//出现The local variable j may not have been initialized错误
int j; //main方法内的局部变量,系统不会分配默认值
Demo1 d1 = new Demo1();
System.out.println (d1.i);
System.out.println (j);
}
}
7、方法是只被对象调用的,而static方法是给类调用的
8、java的字符集编码是:Unicode
9、static关键字:
①static方法不能访问非static成员变量
②static方法可以访问其他的static方法
public class Demo2 {
static String name ; //必须为static变量
public static void main(String[] args) {
getName ();可以访问static getName函数
}
public static String getName (){
return name ;
}
}
10、第一个java程序
//HelloDate.java
package chapter2;
import java.util.*;
public class HelloDate {
public static void main (String[] args){
System.out.println ("Hello it's:");
System.out.println (new Date ());
}
}
系统自动导入java.lang包,而Date这个类是存在于java.util包中的,所以我们需要导入这个包中的Date类
然后System类中有一个out静态变量,它的类型是PrintStream对象
11、javadoc命令的使用
1、用引用操作对象
就如遥控器和电视机的关系,引用可以操作对象,又可以脱离电视机存在
String s;这里创建的就是一个引用,而不是对象
如果你需要向引用发送消息,那么你必须要使s与某个事物相关联,所以一种安全的方法是创建一个引用的同时便对引用进行初始化。
String s = “abc”;
2、通常为引用与一个新的对象相关联,通常用new关键字来实现这一目的。
3、对象存储到什么地方
(1)寄存器:这是最快的存储区,它位于处理器内部,我们不能直接控制,也不能感觉到它的存在
(2)堆栈:位于ram中,但是可以通过堆栈指针可以从处理器那获得直接支持。堆栈指针向下移动则分配新的空间,向上移动则释放内存。创建程序时,java系统必须知道存储在堆栈空间中所有项的确切生命周期,以便上下移动堆栈指针,限制了灵活性,java对象不存在此中,仅仅某些数据存储在这里。
(3)堆:一种通用内存池,也位于ram中,用于存放java对象,编译器不需要知道存储在其中的数据的生命周期,因此灵活性高,当你需要一个对象的时候,只需要写入new一行简单的代码。但是我们必须要对这种灵活性付出代价(因为比在堆栈中耗费的时间要长)
(4)常量存储:常量值位于程序代码内部,它们永远不被改变,存放在rom(只读存储器中)
(5)非ram存储:例如、流对象和持久化对象。可以把对象转化成为可以存放在其他媒介中的事物。
(6)特例、基本数据类型:这些基本数据对象不采用new关键字创建变量,而是创建一个并非是引用的“自动”变量,这个变量直接存储值,并置于堆栈中。
这些数据所占的存储空间是不变的
基本类型 | 大小 | 包装器类型 |
boolean | - | Boolean |
char | 16 bits | Character |
byte | 8 bits | Byte |
short | 16 bits | Short |
int | 32 bits | Integer |
long | 64 bits | Long |
float | 32 bits | Float |
double | 64 bits | Double |
void | - | Void |
4、java确保数组会被初始化,而且不能在它的范围之外被访问。
这是因为当创建一个数组的时候,实际上是创建了一个引用数组,并且每个引用都会自动被初始化为一个特定值,该值拥有自己的关键字null,一旦java看到了null,就知道这个引用还没有指向某个对象。在使用任何引用前,必须为其指定一个对象,如果试图使用一个还是null的引用,那么就会报错。
5、作用域问题:
①变量中的作用域(c/c++与java的区别)
②对象的作用域(在c++中,当你使用完对象之后必须将其销毁,而在java中,当用new创建的对象,只要你需要,它就一直存在,为了防止对象填满内存空间,java采用垃圾回收器来监听new创建的所有对象,并辨别哪些不会再被引用的对象,然后释放这些对象的内存空间)
6、基本成员变量的默认值
基本类型 | 默认值 |
boolean | FALSE |
char | ‘/u0000’(null) |
byte | (byte)0 |
short | (short)0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
Eg1(正确的例子)
public class Demo1 {
//定义类成员变量,java默认值为0
int i;
public static void main(String[] args) {
Demo1 d1 = new Demo1();
System.out.println (d1.i);
}
}
Eg2(错误的例子)
public class Demo1 {
//定义类成员变量
int i;
public static void main(String[] args) {
//出现The local variable j may not have been initialized错误
int j; //main方法内的局部变量,系统不会分配默认值
Demo1 d1 = new Demo1();
System.out.println (d1.i);
System.out.println (j);
}
}
7、方法是只被对象调用的,而static方法是给类调用的
8、java的字符集编码是:Unicode
9、static关键字:
①static方法不能访问非static成员变量
②static方法可以访问其他的static方法
public class Demo2 {
static String name ; //必须为static变量
public static void main(String[] args) {
getName ();可以访问static getName函数
}
public static String getName (){
return name ;
}
}
10、第一个java程序
//HelloDate.java
package chapter2;
import java.util.*;
public class HelloDate {
public static void main (String[] args){
System.out.println ("Hello it's:");
System.out.println (new Date ());
}
}
系统自动导入java.lang包,而Date这个类是存在于java.util包中的,所以我们需要导入这个包中的Date类
然后System类中有一个out静态变量,它的类型是PrintStream对象
11、javadoc命令的使用
相关文章推荐
- thinking in java 阅读笔记 第二章 一切都是对象
- thinking in java 阅读笔记 第二章 一切都是对象
- thinking in java 笔记 思维导图 第二章一切都是对象
- 第二章 一切都是对象
- java 编程思想的学习笔记 - 第二章 一切都是对象
- 『Java编程思想-第四版』第二章:一切都是对象
- thinking in java 阅读笔记 第二章 一切都是对象
- thinking in java 阅读笔记 第二章 一切都是对象
- 第二章 一切都是对象
- 第二章 一切都是对象
- Think in Java反刍笔记(4)---一切都是对象(第二章)
- thinking in java 阅读笔记 第二章 一切都是对象
- thinking in java 阅读笔记 第二章 一切都是对象
- think In Java 第二章 一切都是对象
- 第二章 一切都是对象
- #Thinking in Java阅读笔记# 第二章 一切都是对象
- Java学习之第二章 一切都是对象
- 第二章:一切都是对象
- 一切都是对象 Thinking in Java 第二章
- 《Java编程思想》学习记录仪一 -- java中参数传递方式(第二章一切都是对象)