Java 划重点笔记
- JAVA概述
- 基础语法
- 常量
- 关键字
- 数据类型
- 变量
- 标识符
- 类型转换
- 运算符
- 算数运算符
- 赋值运算符
- 逻辑运算符
- 短路逻辑运算符
- 三元运算符
- 数据输入
- 流程控制
- switch 分支语句
- 循环
- Random
- IDEA
- 项目结构
- 内容辅助键和快捷键
- 数组
- 数组定义格式
- 数组动态初始化
- 内存分配
- 数组静态初始化
- 数组操作的2个常见问题
- 方法
- 方法重载
- 方法参数传递
- 案例:百钱百鸡
- 面向对象
- 类和对象
- 类的定义
- 对象的使用
- 对象内存
- 成员变量和局部变量
- private
- this
- 封装
- 构造方法
- 字符串
- API(应用程序编程接口)
- String类
- StringBuilder类
- 集合基础
- ArrayList
- 学生管理系统案例记录
- 继承
- 继承中的变量访问
- super关键字
- 继承中构造方法的访问特点
- 继承中成员方法的访问特点
- super内存图
- 方法重写
- Java中继承的注意事项
- 包与修饰符
- 包
- 导包
- 修饰符
- 权限修饰符
- 状态修饰符
- final
- static
- 多态
- 多态中成员访问特点
- 多态的好处与弊端
JAVA概述
JRE:Java Runtime Environment,运行时环境,包含JVM和运行时所需要的核心类库。
JDK:Java Development Kit,程序开发工具,包含JRE和开发人员使用的工具。其中 javac.exe 是编译工具,java.exe 是运行工具。
基础语法
常量
包括布尔常量;存在空常量但不能输出。
关键字
定义:关键字就是被Java语言赋予了特定含义的单词。
特点:其字母全部小写。(在一些编辑器中有颜色标记)
数据类型
变量
- 变量未赋值不可使用。
- 变量名字不可以重复。
- long类型变量定义时,为防止整数过大,后面加L。
- float类型变量定义时,为防止类型不兼容,后面加F。
long a = 10000000000 //×
long a = 10000000000L //√
float b = 14.33 //×
float b = 14.33F //√
标识符
类型转换
Java类型转换分为自动和强制两类。
自动:把一个数据范围小的数值或变量赋值给另一个表示数据范围大的变量
强制:赋值场景与自动相反,需要自己声明强转,否则会报错。
示例:int k =(int)88.8 ,输出为88,会有数据丢失。
运算符
算数运算符
一条老规则了:整数相除只能得到整数,有小数参与,才能得到浮点数。
注意:这块知识要区分Python!(这里是字符的运算操作,不是字符串)
常见错误:
char a = ‘a’ + 5;int b = 314+3.14;
关于字符串:
区分:“码农” + 10 + 0 + “年” 得到“码农100年”;
赋值运算符
扩展的赋值运算符(如+=)底层隐含了强制类型转换。
逻辑运算符
^:异或,相同为false,不同为true。
区分python:
python中逻辑运算符主要是 and, or, not,而&(参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0)、 |、 ^ 等是位运算符。
短路逻辑运算符
考虑到运算速度,最常用的逻辑运算符是&&、|| 和 ! 。
三元运算符
同二元关系运算符的多次运用一样,用多次三元运算符可以比较多个值。
数据输入
流程控制
语句分为3类:顺序、分支、循环。
switch 分支语句
case 穿透:若符合条件的case语句末尾没有break,则会向下执行直至遇到下一个break,或整体switch语句结束。而default后面不添加break无影响。
循环
for循环中如果内部初始化变量,则为内部变量。
Random
IDEA
项目结构
新文件作模块添加到项目目录下后在IDEA中导入模块。
内容辅助键和快捷键
数组
数组定义格式
Java中的数组是一种用于存储多个相同类型的数据的储存模型。
(推荐格式一)
数组动态初始化
Java中的数组必须先初始化,才能使用。初始化即为数组中的数组元素分配内存空间,并为每个数组元素赋值。
仅动态初始化后输出数组名,得到的是该数组的地址值。
获取数组元素数量:数组名.length
内存分配
数组静态初始化
数组操作的2个常见问题
方法
方法是将具有独立功能的代码块组成一个整体,使其具有特殊功能的代码集。
注意:
1.先定义,后调用;
2.方法不能嵌套定义;
3.明确返回值类型和参数。
//示例
public static void xxx(……){
//方法体
}
方法重载
指同一个类中定义的多个方法之间的关系(仅针对方法的定义,也不通过返回值判定是否构成),若满足:
1.多个方法在同一类下;
2.多个方法具有相同的方法名;
3.多个方法的参数不同,类型不同或数量不同,
则构成重载,可按需各自调用,Java虚拟机会通过参数的不同来区分同名的方法。
方法参数传递
对于基本类型的参数,形式参数的改变,不会影响实际参数的值。
对于引用类型的参数,形式参数的改变,影响实际参数的值。
案例:百钱百鸡
面向对象
类和对象
类是对现实生活中一类具有共同属性和行为的事物的抽象。类是对象的数据类型,可以理解为是满足上述条件的一组对象的集合。
类的定义
public class ClassName{
//成员变量
//...
//成员方法
//...
}
对象的使用
利用package包方法,可以在另一个类文件执行主程序 或 调用其他类。
对象内存
图中输出001的地址,说明Java中实例化后得到的对象名对应地址,main方法在栈内存中进行,而对象指向的信息存储在堆内存。
对于s.study() 和 s.dohomework()两个方法,执行时在栈内存中进行,执行完则消去。而到了程序的最后一行,main方法在栈内存中也会被消去。
成员变量和局部变量
private
应用:一般的业务中,一个标准类的编写应包括private修饰的成员变量,同时提供相应的getXXX()方法 和 setXXX()方法。
this
冲突场景:成员变量和方法变量同名,而方法中识别局部变量。(若不同名,则指成员变量。)
解决:this.name = name;
this代表所在类的对象引用,this修饰的变量用于指代成员变量。
封装
构造方法
构造方法作为一种特殊的方法,用于创建对象,主要是完成对象的初始化。
当未详细编写构造方法时,系统默认设定无参构造方法。可以通过方法重载编写多个构造方法。建议:无论是否使用,都手工书写无参构造方法。
创建对象时即可这样使用:Classname a = new Classname();
- 标准类制作
小技巧:Alt+Insert 可以根据自己的需要选择来自动生成构造或set/get代码。
字符串
API(应用程序编程接口)
指的就是JDK中提供的各种功能的Java类,这些类已将底层的实现封装起来。(一般Java.lang不用导包)
String类
首先,应区分基本类型char和String类。
字符串不可变,但可共享。
4种构造方法:无参、字符数组、字节数组和直接赋值。一般推荐使用最后一种。
- 关于String对象:
1.通过new方法创建的字符串对象,每一次new都会申请一个内存空间,地址值不同。
2.以“”方式给出的字符串,只要字符串序列相同,JVM只会建立一个String对象。 - (字符串作类时属引用类型)
字符串之间的拼接可用+实现。
StringBuilder类
StringBuilder是一个可变的字符串类,可以把它看成一个容器。相比String类,它更节省内存空间。
集合基础
集合类提供一种储存空间可变的储存模型。集合类有很多,一般常用ArrayList类。
ArrayList
首先从java.util导包。
自己定义的类也在E的范围内。
上图输出结果:[hello,javase,world,java]ArrayList集合常用方法:
学生管理系统案例记录
1.System.exit(0);作用是JVM退出。
2.利用while循环和自设计的判断学号是否重复的函数,来实现正确录入新学号这一操作。
继承
继承是面向对象三大特征之一,可以使子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。
(存在相同属性、相同特征)
//格式
public class 子类名 extends 父类名{
}
继承中的变量访问
子类方法中访问变量的过程:子类局部查找->子类成员范围找->父类范围->都没有则报错(继承中访问变量这一操作,不考虑父类的父类)
super关键字
继承中构造方法的访问特点
继承中成员方法的访问特点
若要直接调用父类成员方法,可用super.方法名()。
super内存图
注意子类构造时默认super访问父类构造。
方法重写
情景:子类中出现和父类中一模一样的方法声明。
功能:即沿袭了父类的功能,又定义了子类特有的内容。
重写子类方法时,内容相同的部分可以用super.父类同名方法()来代替。
@Override:作为一个注解,检查重写方法是方法声明的正确性。
注意事项:
Java中继承的注意事项
1.类只支持单继承,不支持多继承
2.类支持多层继承
3.实例化对象时,构造方法默认访问父类的无参构造方法(可用super访问父类中其他构造方法)。如果子类代码无成员变量定义,而想要对子类带参构造,因为this不能访问父类中的private变量(标准类编写),应用super(构造参数),通过父类中的set/get来赋值。
包与修饰符
包
文件夹就是包,作用是对类分类管理,如区分同名类。
// 格式
package 包名 //多级包用.分开
声明包后,应相应地把编译后得到的class文件放到正确的目录下,保证被找到,程序才能正确运行。
导包
修饰符
权限修饰符
private:只能在同一个类中用
默认:只能在同一个包中用
protected:除了不同包中的无关类,均允许被使用
public:总是允许被用
状态修饰符
final
final关键字是“最终”的意思,可以修饰成员方法、成员变量和类。
public final void helloword{
}
# final 修饰方法,表明该方法是最终方法,不能被重写
public final int age = 20;
# final 修饰变量,表明该变量是常量,不能在被赋值
public final class NotFather{
}
# final 修饰类,表明该类是最终类,不能被继承
- final修饰局部变量
变量是基本类型:基本类型的数据值不能改变
引用类型:引用类型的地址值不能改变,但是地址里面的内容仍可以改变
static
static关键字表示静态,可以修饰成员方法,成员变量。
特点:
1.被类的所有对象共享——也是判断是否使用static的条件
2.可以通过类名和对象名,以赋值的形式调用。建议采用类名方式。
如在类中声明静态成员变量: public static int test;
实例化对象后调用时,可这样赋值:instance.test = 1;
多态
例如按下空格键,在不同场景有着不同的作用:跳转,空格或播放.接下来我们带上继承、重写来理解多态。
多态中成员访问特点
多态的好处与弊端
优点:提高了程序的拓展性。具体体现为定义方法的时候,使用父类型作为参数,将来使用的时候,使用具体的子类型参与操作。
缺点:不能使用子类的特有功能。