王业航 202402150564
第一章
java环境的搭配和JDK和JRE
Java的基础环境搭建:通过安装JDK(Java Development Kit)和IDEA(IntelliJ IDEA)去完成的
JDK:JDK 是 Java 开发工具包(Java Development Kit)的缩写,它是 Java 编程语言开发所必需的核心工具集合。JDK 提供了创建、编译、调试、测试和运行 Java 应用程序所需的所有工具和库。
JRE:即 Java Runtime Environment(Java运行时环境),是运行Java应用程序所必需的环境。它是Java程序能够执行的基础,提供了Java程序所需的运行时库和环境,但不包括开发工具(如编译器)。JRE的主要作用是使得Java应用可以在特定的操作系统上运行。
JDK与JRE的关系:JDK包含JRE,它不仅包含了JRE,还提供了开发Java程序所需的编译器、调试工具等,换句话说,JDK是JRE的超集,JDK在JRE的基础上增加了更多开发工具。
第二章
Java编程基础
2.1变量与常量
标识符与命名的规范:
- 只能由字母(大小写,26个英文字母)、数字(0~9)、下划线“_”和“$”符组成。
- 数字不可以开头。
- 不可以使用关键字和保留字,但是可以包含关键字和保留字。
- Java中严格区分字母大小写。
- 对长度无要求。
- 标识符内不能含有空格
八大数据类型:
基本类型 存储大小 初始化默认值
byte 1字节(8位) 0 -128~127
short 2字节(16位) 0 -32768~32767
int 4字节(32位) 0 -2^31 ~ 2^31 - 1 I
long 8字节(64位) 0L。"L"理论上不分大小写,但若写成"l"容易与数字"1"混淆,不容易分辨,所以最好大写。 -2^63 ~ 2^63 - 1
float 4字节(32位) 0.0f 符合IEEE754标准的浮点数,1.4E-45 ~ 3.4028235E38
double 8字节(64位) 0.0d 符合IEEE754标准的浮点数,4.9E-324 ~ 1.7976931348623157E308
char 2字节(16位) ‘\u0000’ \u0000 ~ \uffff(十进制等效值为 0~65535,本质也是数值)
boolean 1字节(8位)/4字节(32位) false true/false
引用数据类型
类类型:
自定义或系统提供的类,如String是引用数据类型,String str = new String("Hello");。
接口类型:
定义接口,类实现接口,通过接口引用对象,例如List<String> list = new ArrayList<>();。
数组类型:
存储多个相同类型的数据,如int[] arr = new int[5];,可以存储 5 个整数。
选择结构:
1.基本if选择结构
if(条件){ //如果条件满足,就会进入该代码块执行代码
//代码块
}
2.if-else选择结构
if(条件){ //如果条件成立,则会执行代码块1
//代码块1
} else { //否则执行代码块2
//代码块2
}
3.三元一次运算符
(条件 ? 表达式1 : 表达式2)
?表示判断前面的条件是否满足,如果满足,那么使用表达式1,如果不满足,那么执行表达式2。
4.else if
if(条件1){ //如果条件1满足,则执行代码块1
//代码块1
} else if(条件2) { /*如果上面条件不成立,且满足条件2,则执行代码块2,这样的结构可以有多个*/
//代码块2
}
5.嵌套if选择结构
解释:在if if-else else if 的结构中可以加入这些结构的使用
if(条件1){ //如果条件1成立,则执行其大括号中的代码块
if(条件2){ //在满足条件1,且满足条件2时,执行条件2的代码块
//代码块
} else { /*条件1成立,条件1不成立时,执行这部分的代码块,注意else的内容可加可不加*/
//代码块
}
}
循环结构
1.while结构:先判断后执行,有可能一次都不执行
while(boolean){ 语句块/循环体------------反复执行的代码 }
2.do...while结构:先执行后判断,至少执行一次
do{ 语句块 }while(boolean);
3.for结构
for(要素1;要素2;要素3){ 语句块/循环体--------------反复执行的代码 }
break与continue的区别:
break:break语句是结束整个循环过程
continue:其作用为结束本次循环,即跳过循环体中下面尚未执行的语句,然后进行下一次是否执行循环的判定
方法
方法的声明
修饰符 返回值类型 方法名(参数列表) {
// 方法体,包含具体的操作逻辑和语句
return 返回值;
}
方法的调用
类名 对象名 = new 类名();
对象名.方法名(参数值列表);
方法重载
方法签名差异:各重载版本之间至少存在一种区别——即它们拥有不同的形参数量或类型的组合。
返回类型无关紧要:即使两个函数除了返回值以外完全一样也不能构成合法的重载关系;也就是说,仅通过改变返回类型来区分两者的做法是不允许的。
访问修饰符不影响重载判断:无论public、private还是其他任何可见度声明都不会影响到编译器对于是否形成重载的理解上。
数组
1、格式一:数据类型[] 变量名
int[] arr
2、格式二:数据类型 变量名[]
int arr[]
数组元素访问
java
package com.slxy;public class Arrydemo {
public static void main(String[] args) {
int[] arr = new int[5];
System.out.println(arr);
System.out.println(arr [0]);
System.out.println(arr [1]);
System.out.println(arr [2]);
System.out.println(arr [3]);
System.out.println(arr [4]);
}
}
第三章
面向对象程序设计
3.1 类
类是Java程序的基本要素,一个Java应用程序就是若干类构成的。类是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能(用来干啥),描述完成后计算机就可以识别了
在Java中定义类时,需要用到class关键字
class 类名{
类体的内容
}
3.2构造方法
格式
public class Student {
修饰符 类名(参数) {
方法体;
}
}
其中,访问修饰符可以是public、protected、private或默认(无修饰符),用于限制构造方法的访问范围。
3.3 this关键字
this关键字在Java中具有以下主要作用
1.指代当前对象,允许访问当前对象的成员变量和方法。
2.区分局部变量和成员变量。
3.构造方法重载。
4.将当前对象作为参数传递给其他方法。
3.4 static字
java static关键字修饰方法的特性
1.随着类的加载而加载,在内存中也是独一份
2.可以直接通过“类.类方法”的方式调用
3.在静态的方法内部可以调用静态的属性或者静态的方法,而不能调用非静态的方法。反之,非静4.态的方法时可以调用静态属性或者方法的。
例:
3.5包
1、包中java文件的定义:
在.java文件的首部, 必须编写类所属哪个包, 格式:
package 包名;
2、包的定义:
通常由多个单词组成, 所有单词的字母小写, 单词与单词之间使用.隔开 ,一般命名为“com.公司名.项目名.模块名…”。
3、包的命名:
1)包名全部由小写字母(多个单词也全部小写)
2)如果包名包含多个层次,每个层次用“.”分割。
3)包名一般由倒置的域名开头,比如 com.baidu,不要有 www。
4)自定义包不能 java 开头
4、包导入
导入单个类:如果要在一个类中使用其他包中的类,需要先导入该类。可以使用import语句来导入单个类,格式为import 包名.类名;
第四章
4.1封装
在Java中,而封装就是将对象的状态(数据)和行为(方法)打包在一起,并隐藏对象的内部实现细节,只提供公开的接口(getter和setter方法)来与对象进行交互。
Java封装的实现方式
在Java中,封装的实现主要通过以下几个方面:
1. 使用访问修饰符
Java提供了四种访问修饰符,用于控制对类、字段、方法的访问权限:
private:表示该成员只能在当前类内部访问。
default(包级别访问权限):表示该成员只能在同一个包中访问。
protected:表示该成员可以在当前类、同一个包中的类和所有子类中访问。
public:表示该成员可以被任何类访问。
创建get/set方法:
4.2继承
继承是面向对象的三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。
继承是指在原有类的基础上,进行功能扩展,创建新的类型。
继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模。
JAVA中类只有单继承,没有多继承
继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等。
继承关系的两个类,一个为子类(派生类),一个为父类(基类)。子类继承父类,使用关键字extends来表示。
子类和父类之间,从意义上讲应该具有"is a"的关系。
extends的意思是“扩展”,子类是父类的扩展。
继承的格式:
格式: public class 子类名 extends 父类名{}
例如: public class Zi extends Fu {}
Fu:是父类,也被称为基类、超类
Zi: 是子类,也被称为派生类
继承中子类的特点:
子类可以有父类的内容,子类还可以有自己特有的内容
例如:
// 父类
public class Person {
//public 公共的
public int money = 1_0000_0000;
public void say(){
System.out.println("说话");
}
}
创建一个子类Student
//student i
//Teacher student也叫派生类或者子类
//子类可以继承父类的所有方法
public class Student extends Person{
}
代码解读
4.3抽象类
抽象类和抽象方法必须使用 abstract 关键字修饰
//抽象类的定义
public abstract class 类名 {}
//抽象方法的定义
public abstract void eat
();
4.4接口
接口的理解:接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成。接口是解决Java无法使用多继承的一种手段,但是接口在实际中更多的作用是制定标准的。或者我们可以直接把接口理解为100%的抽象类,既接口中的方法必须全部是抽象方法。
接口的语法实现:
一个简单的接口就像这样:拥有全局变量和抽象方法
为了实现这个接口,我们使用implements关键词去实现接口:
第五章
异常
什么是异常?
异常就是有异于常态,和正常情况不一样,有错误出错。在java中,阻止当前方法或作用域的情况,称之为异常。
java中异常的体系是怎么样的呢?
1.Java中的所有不正常类都继承于Throwable类。Throwable主要包括两个大类,一个是Error类,另一个是Exception类;
2.其中Error类中包括虚拟机错误和线程死锁,一旦Error出现了,程序就彻底的挂了,被称为程序终结者;
3.Exception类,也就是通常所说的“异常”。主要指编码、环境、用户操作输入出现问题,Exception主要包括两大类,非检查异常(RuntimeException)和检查异常(其他的一些异常)
4.RuntimeException异常主要包括以下四种异常(其实还有很多其他异常,这里不一一列出):空指针异常、数组下标越界异常、类型转换异常、算术异常。RuntimeException异常会由java虚拟机自动抛出并自动捕获(,此类异常的出现绝大数情况是代码本身有问题应该从逻辑上去解决并改进代码。
5.检查异常,引起该异常的原因多种多样,比如说文件不存在、或者是连接错误等等。跟它的“兄弟”RuntimeException运行异常不同,该异常我们必须手动在代码里添加捕获语句来处理该异常,这也是我们学习java异常语句中主要处理的异常对象
第六章
Java常用类
6.1String类
String是字符串类型 String类提供的构造方式非常多,常用的就以下三种:
① 使用常量串构造
String s1 = "hello bit";
System.out.println(s1);
② 直接 newString 对象
String s2 = new String("hello bit");
System.out.println(s2);
③ 使用字符数组进行构造
char[] array = {'h','e','l','l','o','b','i','t'};
String s3 = new String(array);
System.out.println(s3);
6.2StringBuffer类与StringBuilder类
在Java中,StringBuffer和StringBuilder类都用于处理可变的字符串,它们提供了比String类更高效的字符串操作。两者的主要区别在于线程安全性和性能。下面是这两个类的详细对比和使用总结:
1. StringBuffer 类
StringBuffer类是在java.lang包中定义的,它提供了对可变字符串的操作,能够在字符串修改时避免生成新的字符串对象。StringBuffer是线程安全的,即它的方法是同步的,可以在多线程环境下安全地使用。
主要特点:
线程安全:所有的方法都使用sychronized关键字进行了同步,因此在多线程环境下是安全的。
性能较低:由于线程安全的原因,StringBuffer的性能相对较低,尤其是在单线程环境下,因为每次调用方法时都涉及同步操作。
可变性:与String类不同,StringBuffer对象是可变的,能够对字符串进行修改而不创建新的对象。
常用方法:
append(String str):将指定的字符串追加到当前字符串的末尾。
insert(int offset, String str):在指定位置插入指定的字符串。
delete(int start, int end):删除从指定起始位置到结束位置的字符。
reverse():将字符串反转。
capacity():返回当前StringBuffer的容量。
length():返回当前字符串的长度。
学习总结
在整个学期的学习下来,个人对于java的基本语法、数据类型、循环结构有了较为清晰的认识和理解,对于面向对象编程的核心比如类、对象、继承这些有了系统的学习掌握。通过上课老师讲的学习方法,并在网上查阅资料等方式,主动提升编程能力,能够自主解决一些编程中的小问题。虽然掌握了java的基础语法和常用类库,但是对于Java的高级特性等理解不够深入,在项目实践中,有时候代码结构不够清晰、不够规范、注释不充分,使用不够灵活。基本功底还是不够扎实,面对复杂的算法题,还需加强理解和练习。Java的学习是一个渐进的过程,尽管在基础知识和编程能力上有了一定的提升,但是面对复杂的开发需求时,还需要改进很多地方。相信自己能够不断提高自己的认知水平和技术水平,成为熟练的码农。