Java编程思想1


《Java编程思想》前4章的粗略总结


一、对象导论

  1. 万物皆对象:
    Java是一种面向对象的编程语言,其中所有的数据和代码都被看作是对象。对象是类的实例,它们包含数据(属性)和行为(方法)。这种面向对象的思想使得编程更模块化、可维护和可扩展。

  2. 每个对象都有一个接口:
    对象之间的通信是通过调用方法来实现的。每个对象都有一个接口,即一组可以调用的方法。对象的接口定义了与外界的交互方式,其他对象通过调用这些方法来与对象进行通信。

  3. 程序是一组对象的集合,通过消息传递来告知彼此该做什么:
    程序是由多个对象组成的,这些对象通过相互发送消息来协同工作。消息传递是通过调用对象的方法实现的。这种方式使得程序结构清晰,易于理解和维护。

  4. 每个对象都有自己的存储空间,可以容纳其他对象:
    对象可以包含其他对象,形成复杂的数据结构。这种组合的方式允许创建更复杂、有层次结构的数据模型。对象的属性可以是其他对象的引用,从而构建起更大的系统。

  5. 每个对象都属于某个类的实例:
    类是对象的模板,描述了对象的属性和行为。通过类,可以创建多个相似的对象。类定义了对象的共同特征,对象是类的实例。

  6. 一个程序就是一组类的集合,这些类通过创建对象之间的联系,以执行某种任务:
    程序是由多个类组成的,这些类通过创建对象并协同工作来完成特定的任务。每个类负责一部分功能,通过对象之间的协作实现程序的目标。

二、一切都是对象

1. 使用引用操纵对象:

在Java中,基本数据类型和对象是有区别的。基本数据类型是直接存储值的,而对象则通过引用来操作。即使是基本数据类型,当它们被封装为对象时,也是通过引用进行操作。

2.必须由你创建所有对象:

在Java中,所有的对象都必须经过显式的创建过程,这与一些其他语言不同,其中一些对象可以由运行时系统自动创建。

3.对象的存储:

对象在内存中的存储通常分为两个部分:对象的方法区(存储代码)和堆区(存储对象的实例变量)。对象的引用存储在栈上。

栈(Stack)

每个线程都有自己的栈,栈中存储基本数据类型的变量和对象的引用。栈的大小是有限的,而且在方法调用时会动态地分配和释放栈帧。

作用:栈用于存储线程执行方法时的局部变量和方法调用信息。每个线程都有自己的栈,栈的大小是固定的。

存储内容:基本数据类型的变量和对象的引用。

生命周期:栈中的变量的生命周期与方法的调用周期一致。当方法调用结束时,栈帧就会被弹出,栈中的局部变量也随之销毁。

堆(Heap)

所有线程共享的内存区域,用于存储通过new关键字创建的对象。堆的大小通常比栈大得多,对象在堆上分配,并且其生命周期不受方法调用的影响。

作用:堆用于存储对象的实例,即通过new关键字创建的对象。堆是所有线程共享的一块内存区域。

存储内容:实例变量(对象的属性)和对象的方法。

生命周期:对象的生命周期不受方法的调用周期限制。在堆上创建的对象会一直存在,直到没有任何引用指向它时,垃圾回收器将其回收。

4.永远不需要销毁对象:

Java的垃圾回收器会负责自动释放不再使用的对象。程序员不需要手动销毁对象,这有助于避免内存泄漏和提高代码的安全性。

5.特例:基本类型:

Java提供了基本数据类型,如int、float等,它们是直接存储值的,而不是通过引用来操作。这些基本类型在一些特殊情况下更高效。

三、操作符

1. 算术操作符

加、减、乘、除和取余:Java提供了基本的算术操作符,用于执行加法、减法、乘法、除法和取余运算。

int x = 5;
int y = 3;

int sum = x + y; // 加法
int difference = x - y; // 减法
int product = x * y; // 乘法
int quotient = x / y; // 除法
int remainder = x % y; // 取余

自增和自减:++和–操作符用于增加或减少变量的值。但是++i和i++是有区别的,具体看下面:

前缀形式(++i 和 --i):

在前缀形式中,变量先发生自增或自减,然后再参与表达式的计算。

int x = 5;
int y = ++x;

System.out.println("x: " + x); // 输出:6
System.out.println("y: " + y); // 输出:6

在这个例子中,x先发生自增,然后将自增后的值赋给y,因此x和y的值都变成了6。

后缀形式(i++ 和 i–):

在后缀形式中,变量的值首先被使用,然后再发生自增或自减。

int a = 5;
int b = a++;

System.out.println("a: " + a); // 输出:6
System.out.println("b: " + b); // 输出:5

在这个例子中,a的值首先被赋给b,然后a发生自增。因此,a的值变成了6,而b的值仍然是5。

2. 关系操作符

比较运算符:用于比较两个值的关系,返回布尔结果。

int a = 5;
int b = 7;

boolean isEqual = (a == b); // 相等
boolean isNotEqual = (a != b); // 不相等
boolean greaterThan = (a > b); // 大于
boolean lessThan = (a < b); // 小于
boolean greaterOrEqual = (a >= b); // 大于等于
boolean lessOrEqual = (a <= b); // 小于等于

3. 逻辑操作符

逻辑运算符:用于对布尔值进行操作,包括逻辑与、逻辑或和逻辑非。

boolean x = true;
boolean y = false;

boolean andResult = x && y; // 逻辑与
boolean orResult = x || y; // 逻辑或
boolean notResult = !x; // 逻辑非

4. 位操作符

位运算符:对二进制位进行操作,包括按位与、按位或、按位异或等。

int a = 5; // 二进制:0101
int b = 3; // 二进制:0011

int andResult = a & b; // 按位与,结果:0001
int orResult = a | b; // 按位或,结果:0111
int xorResult = a ^ b; // 按位异或,结果:0110
int notResult = ~a; // 按位取反,结果:11111010

5. 移位操作符

左移和右移:用于将二进制位向左或向右移动指定的位数。

int num = 8; // 二进制:1000

int leftShiftResult = num << 2; // 左移两位,结果:0010000
int rightShiftResult = num >> 1; // 右移一位,结果:0000100

6. instanceof 操作符

instanceof:用于检查对象是否属于特定类或接口的实例。

Object obj = new String("Hello");

if (obj instanceof String) {
    System.out.println("obj is an instance of String");
} else {
    System.out.println("obj is not an instance of String");
}

7. 条件运算符(三元运算符)

三元运算符:用于根据条件选择两个值中的一个。

int a = 5;
int b = 7;

int min = (a < b) ? a : b; // 如果 a 小于 b,min 等于 a,否则等于 b

四、控制执行流程

1. 条件语句

if语句:根据条件的真假执行不同的代码块。

int x = 10;

if (x > 10) {
    System.out.println("x 大于 10");
} else if (x < 10) {
    System.out.println("x 小于 10");
} else {
    System.out.println("x 等于 10");
}

switch语句:根据表达式的值选择执行不同的分支。

int day = 3;

switch (day) {
    case 1:
        System.out.println("星期一");
        break;
    case 2:
        System.out.println("星期二");
        break;
    // 其他case...
    default:
        System.out.println("未知");
}

2. 循环结构

while循环:在满足条件的情况下反复执行代码块。

int count = 0;

while (count < 5) {
    System.out.println("Count: " + count);
    count++;
}

do-while循环:至少执行一次代码块,然后在满足条件时重复执行。

int count = 0;

do {
    System.out.println("Count: " + count);
    count++;
} while (count < 5);

for循环:指定初始条件、循环条件和迭代步骤的循环结构。

for (int i = 0; i < 5; i++) {
    System.out.println("i: " + i);
}

增强for循环:用于遍历数组或集合。

int[] numbers = {1, 2, 3, 4, 5};

for (int num : numbers) {
    System.out.println("Number: " + num);
}

3. 跳转语句

break语句:终止循环或switch语句。

for (int i = 0; i < 10; i++) {
    if (i == 5) {
        break; // 当 i 等于 5 时退出循环
    }
    System.out.println("i: " + i);
}

continue语句:跳过循环体中剩余的代码,进入下一次循环。

for (int i = 0; i < 10; i++) {
    if (i % 2 == 0) {
        continue; // 当 i 为偶数时跳过本次循环的剩余代码
    }
    System.out.println("i: " + i);
}
  • 28
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 实现方案的隐藏 1.4 方案的重复使用 1.5 继承:重新使用接口 1.5.1 改善基础类: 尽管extends关键字暗示着我们要为接口“扩展”新功能,但实情并非肯定如此。为区分我们的新类,第二个办法是改变基础类一个现有函数的行为。我们将其称作“改善”那个函数。 为改善一个函数,只需为衍生类的函数建立一个新定义即可。我们的目标是:“尽管使用的函数接口未变,但它的新版本具有不同的表现”。 1.5.2 等价和类似关系 1.6 多形对象的互换使用 1.6.1 动态绑定 1.6.2 抽象的基础类和接口 1.7 对象的创建和存在时间 1.7.1 集合与继承器 1.7.2 单根结构 1.7.3 集合库与方便使用集合 1.7.4 清除时的困境:由谁负责清除? 1.8 违例控制:解决错误 1.9 多线程 1.10 永久性 1.11 Java和因特网: 既然Java不过另一种类型的程序设计语言,大家可能会奇怪它为什么值得如此重视,为什么还有这么多的人认为它是计算机程序设计的一个里程碑呢?如果您来自一个传统的程序设计背景,那么答案在刚开始的时候并不是很明显。Java除了可解决传统的程序设计问题以外,还能解决World Wide Web(万维网)上的编程问题。 1.11.1 什么是Web? 1.11.2 客户端编程 1.11.3 服务器端编程 1.11.4 一个独立的领域:应用程序 1.12 分析和设计 1.12.1 不要迷失: 在整个开发过程中,最重要的事情就是:不要将自己迷失!但事实上这种事情很容易发生。大多数方法都设计用来解决最大范围内的问题。当然,也存在一些特别困难的项目,需要作者付出更为艰辛的努力,或者付出更大的代价。但是,大多数项目都是比较“常规”的,所以一般都能作出成功的分析与设计,而且只需用到推荐的一小部分方法。但无论多么有限,某些形式的处理总是有益的,这可使整个项目的开发更加容易,总比直接了当开始编码好! 也就是说,假如你正在考察一种特殊的方法,其中包含了大量细节,并推荐了许多步骤和文档,那么仍然很难正确判断自己该在何时停止。时刻提醒自己注意以下几个问题: (1) 对象是什么?(怎样将自己的项目分割成一系列单独的组件?) (2) 它们的接口是什么?(需要将什么消息发给每一个对象?) 在确定了对象和它们的接口后,便可着手编写一个程序。出于对多方面原因的考虑,可能还需要比这更多的说明及文档,但要求掌握的资料绝对不能比这还少。 整个过程可划分为四个阶段,阶段0刚刚开始采用某些形式的结构。 1.12.2 阶段0:拟出一个计划: 1.12.3 阶段1:要制作什么?: 1.12.4 阶段2:如何构建? 1.12.5 阶段3:正式创建 1.12.6 阶段4:校订 1.12.7 计划的回报 1.13 Java还是C++? 第2章 一切都是对象 “尽管以C++为基础,但Java是一种更纯粹的面向对象程序设计语言”。 无论C++还是Java都属于杂合语言。但在Java中,设计者觉得这种杂合并不象在C++里那么重要。杂合语言允许采用多种编程风格;之所以说C++是一种杂合语言,是因为它支持与C语言的向后兼容能力。由于C++是C的一个超集,所以包含的许多特性都是后者不具备的,这些特性使C++在某些地方显得过于复杂。 Java语言首先便假定了我们只希望进行面向对象的程序设计。也就是说,正式用它设计之前,必须先将自己的思想转入一个面向对象的世界(除非早已习惯了这个世界的思维方式)。只有做好这个准备工作,与其他OOP语言相比,才能体会到Java的易学易用。在本章,我们将探讨Java程序的基本组件,并体会为什么说Java乃至Java程序内的一切都是对象。 2.1 用句柄操纵对象 2.2 必须创建所有对象: 创建句柄时,我们希望它同一个新对象连接。通常用new关键字达到这一目的。new的意思是:“把我变成这些对象的一种新类型”。所以在上面的例子中,可以说: String s = new String("asdf"); 它不仅指出“将我变成一个新字串”,也通过提供一个初始字串,指出了“如何生成这个新字串”。 当然,字串(String)并非唯一的类型。Java配套提供了数量众多的现成类型。对我们来讲,最重要的就是记住能自行创建类型。事实上,这应是Java程序设计的一项基本操作,是继续本书后余部分学习的基础。 2.2.1 保存在什么地方 2.2.2 特殊情况:主类型 2.2.3 Java中的数组 2.3 绝对不要清除对象:在大多数程序设计语言中,变量的“存在时间”(Lifetime)一直是程序员需要着重考虑的问题。变量应持续多长的时间?如果想清除它,那么何时进行?在变量存在时间上纠缠不清会造成大量的程序错误。在下面的小节里,将阐示Java如何帮助我们完成所有清除工作,从而极大了简化了这个问题。 2.3.1 作用域 2.3.2 对象的作用域 2.4 新建数据类型:类 2.4.1 字段和方法 2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序:正式构建自己的第一个Java程序前,还有几个问题需要注意。 2.6.1 名字的可见性 2.6.2 使用其他组件 2.6.3 static关键字 2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入HTML 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记:变量文档只能包括嵌入的HTML以及@see引用。 2.8.7 方法文档标记 2.8.8 文档示例

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值