Java编程思想——第二章.一切都是对象
来源:互联网 发布:软件测试风险级别 编辑:程序博客网 时间:2024/05/19 12:15
相比于其他语言面向对象程序设计语言, Java是一种更纯粹的面向对象程序设计语言
2.1 用引用操作对象
一切都被视为对象,可以采用单一固定的语法。类比于遥控器(引用)操纵电视机(对象);
拥有一个引用,并不一定需要一个对象与之关联。类比于即使没有电视机,遥控器也可以独立存在。
为了安全起见,创建一个引用的同时便进行初始化;可以这样:String s="asdf";但更通用的做法是:String s=new String("asdf");
2.2必须由你创建所有对象
通过new关键字创建所需对象:String s=new String("asdf");
2.2.1 存储在什么地方:程序运行时对象时怎样放置安排的?内存是怎样分配的?
1)寄存器:最快的存储区
2)堆栈:位于通用RAM(随机访问存储器)中,通过堆栈指针可以从处理器哪里获得支持,这是一种快速有效的分配存储方式,仅次于寄存器。创建程序时,Java系统必须知道存储在堆栈内的所有项的生命周期,以便上下移动堆栈指针,这一约束限制了程序的灵活性,所以虽然某些数据存储在堆栈中——特别是对象引用,但是对象并不存储其中。
3)堆:一种通用的内存池(也位于RAM中),存储所有对象。
4)常量存储:常量值通常直接存储在程序代码内部。
5)非RAM存储:存储完全存活于程序之外的数据。流对象和持久化对象。
2.2.2特例:基本类型——不用new来创建,直接向C++语言那样使用基本类型,Java SE 的自动包装功能将自动地将基本类型转化为包装器类型。
程序举例:(Java编程思想第二章练习9)编写一个程序,展示自动包装功能对所有的基本类型和包装器类型都起作用。、
public class AutoboxTest {public static void main(String[] args) { //自动包装功能对所有的基本类型都起作用boolean b = false;char c = 'x';byte t = 8;short s = 16;int i = 32;long l = 64;float f = 0.32f;double d = 0.64;//自动包装功能对所有的包装器类型都起作用Boolean B = b;Character C = c;Byte T = t;Short S = s;Integer I = i;Long L = l;Float F = f;Double D = d;System.out.println("boolean b = " + b); System.out.println("Boolean B = " + B); System.out.println("char c = " + c);System.out.println("Character C = " + C);System.out.println("byte t = " +t);System.out.println("Byte T = " +T);System.out.println("short s = " + s);System.out.println("Short S = " + S);System.out.println("int i = " + i);System.out.println("Integer I = " + I);System.out.println("long l = " + l);System.out.println("Long L = " + L);System.out.println("float f = " + f);System.out.println("Float F = " + F);System.out.println("double d = " + d);System.out.println("Double D = " + D);}}运行结果:
高精度数字:Java提供了两个用于高精度计算的类:BigInteger、BigDecimal
2 2.3 Java中的数组
Java确保数组会被初始化(null),而且不能在他的范围之外被访问。以安全和效率来换取少量数组下标检查和内存开销,是值得的。
2.3永远不需要销毁对象
2.3.1作用域:和c++中的作用域类似。
{ int x=12; { int x=36; } }这在Java中是不允许的。
2.3.2对象的作用域
Java对象不具备和基本类型一样的生命周期,当用new创建一个对象时,他可以存活于作用域之外。
Java有一个垃圾回收器,用来监视用new创建的所有对象,并辨别哪些不会再被引用的对象,随后释放这些内存空间,以便供其他对象使用。
2.4创建新的数据类型:类
创建类:class ATypeName {/* class body*/}
创建该类的对象: ATypeName a= new ATypeName();
2.4.1 字段和方法
字段:数据成员(可以是基本类型,也可以是其他类型的引用:必须初始化该引用,以便使其与一个基本对象相关联)。
方法:成员函数
基本成员默认值:
程序举例:(Java编程思想第二章练习1)创建一个类,检验java执行所有的基本类型的默认初始化。
public class DataOnlyTest {public static void main(String[] args) {class DataOnly {boolean b;char c ;byte t;short s;int i ;long l ;float f;double d;void show() {System.out.println(b);System.out.println(c);System.out.println(t);System.out.println(s);System.out.println(i);System.out.println(l);System.out.println(f);System.out.println(d);}}DataOnly data = new DataOnly();data.show();}}<strong></strong>运行结果:
2.5方法、参数和返回值:类似与c++.
2.6 构建一个java程序
2.6.1 名字可见性
2.6.2 运用其他构件:用关键字import来准确地表示你想要的类是什么;该关键字指示编译器导入一个包,也就是类库。
使用规则: import java.unti.ArrayList; 告诉编译器你想要Java的ArrayList类,该类包含在类库unti中,但是有时你需要用到unti中的好几个类,这样就显得麻烦好多,所以可以这样: import java.unti.*;
2.6.3 static关键字
通常来说,当创建类时,就是在描述那个类的对象的外观和行为,除非用new创建那个类的对象,否则,实际上并未获得任何对象。执行new来创建对象时,数据存储空间才被分配,其方法才供外接使用。
有两种情形上述方法无法解决:1)指向卫某特定域分配单一存储空间,而不去考虑究竟要创建多少个对象,甚至根本就不许创建任何对象。
2希望某个方法不会与包含他的类的任何对象关联在一起。也就是说,即使没有创建对象,也能使用该方法。
通过static关键字可以满足这两方面的要求。
引用static变量的两种方法:1)可以通过一个对象去定位他; 2)通过类名直接引用。类似逻辑可以应用与静态变量。
程序举例:(Java编程思想第二章练习8)编写一个程序,展示无论你创建了某个特定类的多少个对象,这个类中的某个特定的static域只有一个实例。
class StaticTest {static int i = 47; //静态字段
Incrementable {static void increment() { StaticTest.i++; } //静态方法
public class ITest {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("st2.i= " + st2.i);//通过对象调用increment();Incrementable sf = new Incrementable();sf.increment();System.out.println("After sf.increment() called: ");System.out.println("st1.i = " + st1.i);System.out.println("st2.i = " + st2.i);//因为increment()是一个静态方法,所以可以通过类直接调用Incrementable.increment();System.out.println("After Incrementable.increment called: ");System.out.println("st1.i = " + st1.i);System.out.println("st2.i = " + st2.i);}}运行结果:
2.7你的第一Java程序:该程序显示现在的时间。用到了Data类。
//: object/HelloDate.javaimport java.util.*;/** The first Thinking in Java example program. * Displays a string and today's date. * @author RobortZhao * @version 4.0*/public class HelloDate { /** Entry point to class & application. * @param args array of string arguments * @throws exceptions No exceptions thrown */ public static void main(String[] args) { System.out.println("Hello, it's: "); System.out.println(new Date()); }} /* Output: (55% match)Hello, it's:Wed Oct 05 14:39:36 MDT 2005*///:~
2.8 注释和嵌入式文档
2.8.1 注释文档 :javadoc用于提取注释,输出一个HTML文件,可以用web浏览器查看。
2.8.2 语法
2.8.3 嵌入式HTML
2.8.4 一些标签示例
2.8.5 文档示例:第一个java程序中已用到。
- Java编程思想——第二章.一切都是对象
- Java编程思想笔记——第二章 一切都是对象
- 《Java 编程思想》--第二章:一切都是对象
- Java编程思想,第二章:一切都是对象
- JAVA编程思想-第二章 一切都是对象
- 《java编程思想》-第二章,一切都是对象
- 《Java编程思想》第二章 一切都是对象
- 《java编程思想》第二章:一切都是对象
- Java编程思想--第二章 一切都是对象
- 【学习笔记】《Java编程思想》——第二章 一切都是对象
- Java编程思想第四版读书笔记——第二章 一切都是对象
- Java编程思想——一切都是对象
- 【笔记】Java编程思想—一切都是对象
- java编程思想 学习笔记---第二章 一切都是对象
- Java编程思想个人理解 第二章 一切都是对象
- Java编程思想学习-《第二章 一切都是对象》
- Java编程思想-第二章-一切都是对象-2.1-2.2笔记
- Java编程思想-第二章-一切都是对象-2.3-2.5笔记
- 照着MSDN用Bitmap,居然还是没用明白,原来问题在这里....
- Android 记录和恢复ListView滚动的位置的三种方法
- javascript上传预览图片(IE8支持)
- socket实现通讯a+b(包的完整性检测)
- 计算机网络之子网划分
- Java编程思想——第二章.一切都是对象
- Unity Shader Example 13 (边缘 Bloom )
- gluster分布式存储总结与实践
- ML基础教程:线性建模的非线性响应
- 2016多校联合训练第二场 1001 Acperience 公式推导
- Android-自定义TextView ,打破常规默认TextView
- 康托展开
- GPIO初始化及点亮LED
- Windbg查看函数的参数