第 1 章 对象入门 <o:p></o:p>
Smalltalk 的五大基本特征 <o:p></o:p>
(1) 所有东西都是对象 <o:p></o:p>
(2) 每个程序都是一大堆对象的组合;通过消息的传递一个对象可告诉另一个对象该做什么 <o:p></o:p>
(3) 每个对象都有自己的存储空间可容纳其他对象,换句话说,通过封装一个现有的对象还可生成一个新对象 <o:p></o:p>
(4) 每个对象都有一种类型 <o:p></o:p>
(5) 同一类所有对象都能接收相同的消息 <o:p></o:p>
第 2 章 万事万物皆对象 <o:p></o:p>
一.所有对象都必须由你建立
1 . 存储在哪里
1) 寄存器:我们在程序中无法控制; 速度最快 , 数据位于处理器的内部
2) stack :存放基本类型的数据和对象的 reference ,但对象本身不存放在 stack 中,而是存放在 Heap 中;位于 RAM 中;处理器通过 堆栈指针访问,下移创建新内存,上移释放内存
3) Heap :存放用 new 产生的数据
4) Static storage :存放在对象中用 static 定义的静态成员
5) Constant storage :存放常量;需严格保护的常量,可考虑放入 ROM 中
6) NON-RAM :硬盘等永久存储空间
2 . 特例:基本型别
基本类型数据存放在 Stack 中,存放的是数据。而产生对象时,只把对象的 reference 存放在 stack 中,用于指向某个对象,对象本身存放在 Heap 中。
Java 提供了两个类,专门用于进行高精度运算 BigInteger 和 BigDecimal
3 . Java 中的数组
当你产生某个存储对象的数组时,真正产生的其实是存储 reference 的数组。引数组建立后,其中的每一个 reference 都会被自动设为 null ,表示“不指向任何对象”。
4 . 作用域 Scope <o:p></o:p>
作用域是由花括号的位置决定的。需要说明的是,在java中,如下代码是不允许的。 <o:p></o:p>
{<o:p></o:p>
int x = 12;<o:p></o:p>
{<o:p></o:p>
int x = 96; /* illegal */<o:p></o:p>
}<o:p></o:p>
}<o:p></o:p>
二.建立新的数据型别: Class
1 . 数据成员和函数
1.1 基本成员的缺省值
1 ) 当 class 的某个成员属于基本型别时,即使你没有为它提供初值, Java 仍保证它有一个缺省值。
2 ) 只有当变量身份是 class 内的成员时, Java 才保证为该变量提供初值。
*:浮点型数默认的是 double 型 <o:p></o:p>
三.函数( Mehtods ),引数( arguments ),返回值( return values )
1 . 引数列
当引数传递的是对象时,传递的是对象的 reference 。
*: packcage 的命名 以小写字母为标准; Java 的设计者鼓励程序员反转使用自己的 Internet 域名,因为它们肯定是独一无二的。 <o:p></o:p>
四.开始构建Java 程序<o:p></o:p>
import java.util.*;注意*只能包含当前目录下的所有类不能包含子目录中的类。<o:p></o:p>
五.注解用内嵌式文档
Java 提供两种注解风格: /*XXXX*/ 、 //XXXX
javadoc : /** */ ; 两种方式来使用 javadoc : 嵌入的 HTML 或 使用文档标记 <o:p></o:p>
文档标记 Doc tags 是一些以 @ 开头的命令,置于注释行的起始处,但最前头的 * 会被忽略。
@see 采用超链接的形式指向其他文档。后面跟上:类名、完整类名或者完整类名 # 方法名;
@version 版本信息
@author 作者信息
@since 是从该代码的哪个版本开始启用
@param 参数名 说明
@return 说明
@throws 完整类名 说明
@deprecated
第 3 章 控制程序流程 <o:p></o:p>
一. 使用 Java 运算符
1. 函数引数如果为对象类型,是传递引用的
2. 关系运算符
1. ) 当对两个对象运用关系运算符进行比较时,比较的是 object reference ,如:
Integer n1 = new Integer(3);
Integer n2 = new Integer(3);
System.out.println(n1==n2);
结果为 false ,因为两个 object reference ( n1 和 n2 )值是不同的
2 ) quals() 的缺省行为也是拿 reference 来比较。不过 Java 中的 class 大多覆写了 equals 方法,如:
Integer n1 = new Integer(3);
Integer n2 = new Integer(3);
System.out.println(n1.quals(n2));// 值为 true
2 . 逻辑运算符
1 ) 只能将 and 、 or 、 not 施用于 boolean 值身上。如果逻辑运算符两边的值存在 non-boolean 值,将会出错,如:
int test1 = 1;
System.out.println((test && 1<2);// 编辑出错, test 是 non-boolean 值
*: 操作逻辑运算符时,可能会遇到一种名为短路的情况。 <o:p></o:p>
3 . 位运算符
按位运算符可与等号 = 联合使用,以便同时进行运算和赋值, &= , |= 和 ^= 都是合法的,由于 ~ 是一元运算符,所以不可与 = 联合使用。
4 .位移运算符
如果所操作的位移对象是 char 、 byte 、 short ,位移动作发生之前,其值会先被晋升为 int ,运算结果会是 int 。
二.流程控制
1 . 迭代( iteration )
1.1 逗号运算符
逗号运算符只能用于 for 循环的控制表达式中的 initialization 和 step 两部分中,如: for(int i=0, j=I+1; I<5; i++, j=I*2)
1.2 break 和 continue
break 表示退出循环; continue 表示退出本次循环,回来循环起始位置。
1.3 label
label 只有放在迭代语句之前才起作用,在 label 和迭代语句之间插入任何语句都不会起作用。
2 . Switch
switch 中的选择器必须是 int 或 char 型,如:
float i = 2;
switch ( i )// 将出错,因为 i 不是 int 或 char 之一
3 . 计算细节
1 ) 从 float 或 double 转为整数值,总是以完全舍弃小数的方式进行。
4 . Math.random() 的输出范围是 [0, 1) 。
第 4 章 初始化和清理 <o:p></o:p>
一.以构造函数( constructor )确保初始化的进行
如果某个 class 具备构造函数, Java 便会在对象生成之际,使用者有能力加以操作之前,自动调用其构造函数,于是便能名确保初始化动作一定被执行。
二.函数重载( Method overloading )
1 . 区分重载函数
由于只能从函数名和函数的引数列来区分两个函数,而重载函数具有相同的函数名称,所以每个重载函数都必须具备独一无二的引数列。
2 . default 构造函数
1 ) default 构造函数是一种不带任何引数的构造函数。如果你所开发的 class 不具任何构造函数,编译器会自动为你生成一个 default 构造函数。
2 ) 如果你自行定义了任何一个构造函数(不论有无引数),编译器就不会为你生成 default 构造函数。
3 ) 如果定义了一个 class ,如
class Bush{
Bush(int I){}
}
当想用 new Bush(); 来产生 class 的实例时,会产生错误。因为在定义 class 时已定义了构造函数,所以编译器就不会为 class 生成 default 构造函数。当我们用 new Bush() 来产生实例时,会尝试调用 default 构造函数,但在 class 中没有 default 构造函数,所以会出错。如:
class Sundae
{
Sundae(int i) {}
}
public class IceCream
{
public static void main(String[] args)
{
//Sundae x = new Sundae(); 会编译出错,无构造函数 Sundae()
Sundae y = new Sundae(1);
}
}
*:在定义一个 class 时,如果定义了自己的构造函数,最好同时定义一个 default 构造函数
3 . 关键字 this
1 ) this 仅用于函数之内,能取得“唤起此一函数“的那个 object reference 。
2 ) 在构造函数中,通过 this 可以调用同一 class 中别的构造函数,如
public class Flower{
Flower (int petals){}
Flower(String ss){}
Flower(int petals, Sting ss){
//petals++; 调用另一个构造函数的语句必须在最起始的位置
this(petals);
//this(ss); 会产生错误,因为在一个构造函数中只能调用一个构造函数
}
}
**: 1 )在构造调用另一个构造函数,调用动作必须置于最起始的位置
2 )不能在构造函数以外的任何函数内调用构造函数
3 )在一个构造函数内只能调用一个构造函数
4 . Static 的意义
无法在 static 函数中调用 non-static 函数(反向可行)。为什么不能呢,我们看下面的例子。
假设能在 static 函数中调用 non-static 函数,那么( a )处就将出错。因为在没有产生 Movie class 实例之前,在就不存在 Movie class 内的 name 实例,而在 getName() 中却要使用 name 实例,显然的错误的。
class Movie{
String name = “”;
Movie(){}
public Movie(String name) { this.name = name; }
public static String getName() { return name; }
}
public class Test{
public static void main(String[] args){
// 下面两名先产生实例后再调用 getName() 没有问题
//Movie movie1 = new Movie(“movie1”);
//String name1 = movie1.getName();
// 下面一行将出错
//String name2 = Movie.getname(); ( a <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Time
分享到:
相关推荐
### Java编程思想读书笔记 #### 一、Java与C++的区别及内存管理 在学习Java的过程中,我们常常会拿它与C++进行比较。这两门语言虽然有着相似之处,但也有许多不同点。 1. **内存管理:** - C++提供了更为底层的...
java编程思想笔记,建议与书本结合使用。。。。。。。。。。。
Java编程思想读书笔记.pdf
### Java编程思想读书笔记知识点梳理 #### 第1、2章:万事万物皆对象 ##### 一、所有对象都必须由你建立 - **存储位置**: - **寄存器**:程序中不可控。 - **栈 (Stack)**:存放基本类型数据和对象引用,对象...
### Java编程思想重点知识点解析 #### 一、Java中的多态性理解 多态性是面向对象编程的一个核心特性,允许子类对象替代父类对象。在Java中,多态性的实现主要通过以下几种方式: 1. **动态绑定**:在Java中,除了...
Java编程思想笔记 本笔记涵盖了Java编程思想的多个方面,包括访问权限控制、封装、继承、多态、接口、内部类、持有对象等。 访问权限控制 访问权限控制是为了把变动的事物与保持不变的事物区分开来。Java中有四种...
《Java编程思想读书笔记》 Java是一门面向对象的编程语言,它的核心理念是“万事万物皆对象”。在Java中,所有的对象都是通过类(Class)来定义的,并且必须由程序员显式创建。理解对象的存储位置是理解Java内存...
Java 编程思想是每一位Java开发者都需要深入了解的重要领域。这篇笔记涵盖了多个关键知识点,包括多态性、final方法、静态方法、构造函数以及构造过程中的多态行为。 首先,Java中的多态性是面向对象编程的核心特性...
在讨论Java编程思想学习笔记时,首先需要了解的是Java语言的平台无关性,而这一特性正是通过Java虚拟机(JVM)得以实现的。JVM作为Java程序设计的关键组成部分,对于Java开发人员来说是必须掌握的基础知识。在该学习...
2) 只有当变量身份是“class内的成员时,Java才保证为该变量提供初值。 三.函数(Mehtods),引数(arguments),返回值(return values) 1. 引数列 当引数传递的是对象时,传递的是对象的reference。 四....
JAVA编程思想笔记.pdf
《Java编程思想》是 Bruce Eckel 的经典之作,这本书深入浅出地介绍了Java语言的核心概念和技术,对于初学者和有经验的程序员来说都是极好的学习资源。以下是对书中的主要知识点进行的详细解读: 1. **Java语言基础...