ToB企服应用市场:ToB评测及商务社交产业平台
标题:
Head First Java 学习笔记
[打印本页]
作者:
飞不高
时间:
2022-9-16 17:22
标题:
Head First Java 学习笔记
一、常用概念
1. JVM(Java Virtual Machine):Java 虚拟机
虚拟机:通过软件模拟的具有完整硬件系统功能的,运行在一个完全隔离环境中的完整计算机系统。
JVM:是运行所有Java程序的抽象计算机,是 Java 语言的运行环境。
注意:Java 的跨平台特性正是通过在 JVM 中运行 Java 程序实现的,但是不同操作系统之上的 JVM 是不同的。
2. GC(Garbage Collection):垃圾回收
创建对象时,它会被存放在称为堆的内存区域中。不管对象如何创建都会放在此区域中。此区域并非普通的堆;它是可回收垃圾的堆(Garbage-Collectible Heap)。Java会根据对象的大小来分配内存空间。但对象使用完毕时内存要如何回收呢?Java会主动帮你管理内存!当某个对象被 Java 虚拟机察觉不再会被使用到,该对象就会被标记成可回收的。如果内存开始不足,垃圾收集器就会启动来清理垃圾、回收空间,让空间能够再次被利用。
二、常用指令
假设命令行的当前工作目录下存在源文件 Demo.java(需要使用 cmd 命令 cd 来指定 Demo.java 所在目录)
javac Demo.java
复制代码
对当前目录下的 Demo.java 文件进行编译。
当前目录下会生成 Demo.class 文件。
java Demo
复制代码
运行当前目录下的 Demo.class 文件。
如果有参数,用空格隔开。例如:
java Demo a 1 bc 23
复制代码
三、一些零碎的知识
1. System.out.print 与 System.out.println 的区别
println 会在最后面插入换行,若你想要让后续的输出以新的一行开始,可以使用 println,若是使用 print,则后续的输出还是会在同一行。
2. 圆点运算符(.)
调用对象的实例变量和方法
3. 若有成百上千的类时要如何提交 Java 程序?
可以把所有文件包装进依据 pkzip 格式来存档的 Java Archive-.jar 文件。在 jar 文件中可以引入一个简单文字格式的文字文件,它被称为 manifest,里面有定义出 jar 中的哪一个文件带有启动应用程序的 main 方法。
四、进入 Java 的世界
1. Java 程序的运行过程
编写:编写源文件( *.java 文件)。
编译:使用 Java 编译器( Javac 编译程序)编译源文件,编译器会对源文件进行错误检查,如果没有错误将会生成字节码文件( *.class 文件)。
运行:使用 Java 解释器将字节码文件翻译成机器代码并执行
Java 解释器是 JVM 的一部分,JVM 负责解释执行 Java 字节码程序,并且 Java 字节码程序只能运行于 JVM 之上。这样,利用 JVM 就可以把 Java 字节码程序和具体的硬件平台以及操作系统环境分隔开。只要在不同的计算机上安装了针对特定平台的 JVM ,Java 程序就可以运行,而不用考虑当前具体的硬件平台以及操作系统环境,也不用考虑字节码文件是在何种平台上生成的。
2. Java 的程序结构
1. 源文件、类、方法、语句
源文件:扩展名为 .java 。
类:用来表示程序的一个组件,类的内容必须包在花括号里面,类中带有一个或多个方法
在 Java 中的所有东西都会属于某个类。我们会建立源文件( *.java 文件),然后将它编译成新的类文件( *.class 文件)。真正被解释执行的是类文件。
方法:是一组语句的集合,它们在一起执行一个功能,方法的花括号中编写方法应该执行的语句,方法必须在类的内部声明。
语句:在 Java 中,语句是最小的组成单位,每个语句必须使用分号作为结束符。
2. 关于 main()
1. 什么是 main()
public static void main (String[] args) {
}
复制代码
main() 是 Java 程序的入口方法(程序的起点),程序在运行的时候,第一个执行的方法就是 main()
当 Java 虚拟机启动执行时,它会寻找你在命令行所指定的类。然后他会锁定 main 方法,接着 Java 虚拟机就会执行 main() 在花括号间的所有指令。
2. 需要注意的点
访问控制权限是公有的(public)。
main() 是静态的。如果要在 main() 方法中调用本类中的其他方法,则该方法也必须是静态的,否则需要先创建本类的对象,然后再通过对象调用成员方法。
main() 没有返回值,只能使用 void。
main() 具有一个字符串数组参数,用来接收执行 Java 程序的命令行参数。
参数列表中字符串数组的名字(代码中的 args)可以任意设置。
main() 定义必须是“public static void main(String[] 参数名)”。
一个类只能有一个 main()。
每个 Java 程序有且只有一个 main()。
3. main() 的两种用途
测试真正的类。
启动Java应用程序。
4. 你能在 main() 中做什么
1. 语法 Tips
语句是以分号结束
x = x + 1;
复制代码
以两条斜线开始的行是注释
// 我是注释
复制代码
空格符通常无关紧要
x = 3 ;
复制代码
用名称与类型(type)来声明变量
int weight;
// 类型:int,名称:weight
复制代码
2. 循环结构
1. while 循环
while (布尔表达式) {
// 循环内容
}
复制代码
要点:
语句以分号结束。
程序块以{}划出范围。
用名称与类型声明变量。
等号是赋值运算符。
两个等号用来当等式等号运算符。
只要条件测试结果为真,while 循环就会一直执行块内的程序
把 boolean 测试放在括号中
2. do-while 循环
do {
// 循环内容
} while (布尔表达式);
复制代码
do-while 循环和 while 循环相似,不同的是,do-while 循环至少会执行一次。
3. for 循环
for (初始化; 布尔表达式; 更新) {
// 循环内容
}
复制代码
要点:
最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。
然后,检测布尔表达式的值。如果为 true,循环体被执行。如果为 false,循环终止,开始执行循环体后面的语句。
执行一次循环后,更新循环控制变量。
再次检测布尔表达式。循环执行上面的过程。
3. 分支结构
1. if 语句
if (布尔表达式) {
// 如果布尔表达式为 true 将执行的语句
}
复制代码
如果布尔表达式的值为 true,则执行 if 语句中的代码块。否则执行 if 语句后面的代码。
2. if...else 语句
if (布尔表达式) {
// 如果布尔表达式的值为 true 将执行的语句
} else {
// 如果布尔表达式的值为 false 将执行的语句
}
复制代码
如果布尔表达式的值为 true,则执行 if 语句中的代码块。否则执行 else 语句中的代码块。
3. if...else if...else 语句
if (布尔表达式 1) {
// 如果布尔表达式 1的值为 true 将执行的语句
} else if (布尔表达式 2) {
// 如果布尔表达式 2的值为 true 将执行的语句
} else if (布尔表达式 3) {
//如果布尔表达式 3的值为 true 将执行的语句
} else {
// 如果以上布尔表达式都不为 true 将执行的语句
}
复制代码
要点:
if 语句至多有1个 else 语句,else 语句在所有的 else if 语句之后。
if 语句可以有若干个 else if 语句,它们必须在 else 语句之前。
一旦其中一个 else if 语句检测为 true,其他的 else if 以及 else 语句都将跳过执行。
4. 嵌套的 if…else 语句
if (布尔表达式 1) {
// 如果布尔表达式 1的值为 true 将执行的语句
if (布尔表达式 2) {
//如果布尔表达式 2的值为 true 将执行的语句
}
}
复制代码
5. switch 语句
switch (expression) {
case value :
//语句
break; //可选
case value :
//语句
break; //可选
//你可以有任意数量的case语句
default : //可选
//语句
}
复制代码
要点:
switch 语句中的变量类型只能为 byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量。
switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。
case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。
当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。
当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不必须要包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句。
switch 语句可以包含一个 default 分支,该分支必须是 switch 语句的最后一个分支。default 在没有 case 语句的值和变量值相等的时候执行。default 分支不需要 break 语句。
五、拜访对象村
1. 对象和类的概念
对象:对象是类的一个实例,有状态和行为。
类:类是一个模板,它描述一类对象的状态和行为。
注:
软件对象和现实对象十分相似,实例变量用来存储状态,行为通过方法来体现。
2. 要点
面向对象设计扩展功能不需要改动之前已经测试好的程序代码。
所有的 Java 程序都定义在类中。
类如同蓝图描述该类型的对象要如何创建。
创建类时,可能同时会需要创建独立、测试用的类。
类可以继承自较为抽象的父类。
对象自治;你无需在意它如何完成任务。
对象有状态和行为。
实例变量用来存储状态,行为通过方法来体现。
Java 的程序在执行期是一组会相互交谈的对象。
六、认识变量
1. 什么是变量
变量就像是杯子,是一种容器,有大小和类型,用来存储变量值(对 primitive 主数据类型变量来说,变量值是该值的字节表示。对引用变量来说,变量值就是存取特定对象的方法)。
变量有两种:primitive 主数据类型(基本数据类型)变量和引用变量。
声明变量的规则:
变量必须拥有类型。
变量必须要有名称。
// 类型 名称;
int count;
复制代码
变量命名规则
名称必须以字母、下划线(_)或 $ 符号开头,不能用数字开头。
除了第一个字符以外,后面都可以用数字。
不可以使用 Java 的保留字来命名。
2. primitive 主数据类型变量
primitive 主数据类型有八种
整数类型
byte 8 bits
short 16 bits
int 32 bits
long 64 bits
浮点数类型
float 32 bits
double 64 bits
boolean 和 char
boolean(true 或 false) 位数由Java虚拟机决定
primitive 主数据类型的声明与赋值声明
// 在不赋值的情况下声明变量,然后再赋值
int myNum;
myNum = 15;
// 声明一个 int 类型的变量,名称为 myNum(将数值 15 以字节的形式放进变量 myNum 中)
int myNum = 15;
复制代码
3. 引用变量
对象的声明、创建与赋值有三个步骤:
声明一个引用变量
Dog myDog
要求 Java 虚拟机分配空间给引用变量,并将此变量命名为 myDog。此引用变量将永远被固定为 Dog 类型。
创建对象
new Dog()
要求Java虚拟机分配堆空间给新建立的 Dog 对象(对象只会存在于可回收垃圾的堆上!)。
连接对象和引用
Dog myDog = new Dog();
将新的 Dog 对象赋值给 myDog 这个引用变量(代表取得 Dog 对象的方法以字节形式放进变量中),此时 myDog 变量能够引用到新创建的 Dog 对象。
注意:
引用变量只会保存引用,而不是对象本身!
没有引用到任何对象的引用变量的值为 null 值。
数组也是对象
int[] nums;
声明一个 int 数组变量。数组变量保存数组对象的引用。
nums = new int[3];
创建可以存放 3 个元素的 int 数组,并将它赋值给之前声明为 int[] 的变量 nums。
nums[0] = 16;
nums[1] = 19;
nums[2] = 44;
赋予 int 数组的每一个元素一个 int 值。要记得在 int 数组中的每个元素皆为 int 类型的变量。
注意:
数组一定是个对象(数组对象),数组中的每个元素都是变量,可以是 8 种 primitive 主数据类型变量中的 1 种,也可以是引用变量。所以在 int 类型的数组中,每个元素可以装在一个 int 类型的变量值;在 Dog 数组中(Dog[]),每个元素持有的是 Dog 的引用。
一旦数组被声明出来,你就只能装入所声明类型的元素。
不管所声明的元素是否为 primitive 主数据类型,并没有 primitive 主数据类型的数组,只有装载 primitive 主数据类型的数组。
创建 Dog 数组
Dog[] pets;
声明一个 Dog 数组变量。
pets = new Dog[3];
创建大小为7的 Dog 数组,并赋值给前面所声明出的 Dog[] 类型变量 pets。
pets[0] = new Dog();
pets[1] = new Dog();
pets[2] = new Dog();
创建新的 Dog 对象并将它们赋值给数组的元素。记得 Dog 数组中只带有 Dog 的引用变量。我们还需要 Dog 对象!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4