Java 基础知识第二部分。
面向对象
- 面向过程:强调步骤
- 面向对象:强调对象
- 特征:封装、继承、多态
- 类:一组相关属性和行为的集合。
- 属性:状态信息
- 行为:可以做什么
- 类和对象的关系
- 类是对一类事物的描述,是抽象的
- 对象是一类事物的实例,是具体的
- 类是对象的模板,对象是类的实体。
类的定义
- 成员变量(属性)
- 直接定义在类当中,在方法外边。
- 成员方法(行为)
- 无
static
关键字
- 无
一个类不能直接使用,需要根据类创建一个对象,才能使用。
步骤:
- 导包:指出需要什么类,在什么位置。
import 包名称.类名称
对于和当前类属于同一个包的情况,可以省略导包语句。 - 创建:
类名称 对象名 = new 类名称();
- 使用
- 使用成员变量:
对象名.成员变量名
- 使用成员方法:
对象名.成员方法名(参数)
- 使用成员变量:
一个对象的内存图
- 方法的进栈和出栈
- 堆中
成员方法
保存的是一个地址值 - 方法要执行,一定要进栈,执行完毕就出栈
- new 之后有默认值
- 对象的名称也叫做对象的引用名
使用对象类型作为方法的参数:当一个对象作为方法的参数,传递到方法当中时,实际上传递进去的是对象的地址值。
使用对象作为方法的返回值:返回值其实就是对象的地址值。
成员变量与局部变量的区别:
- 定义位置不一样(重要)
- 成员变量:在方法外部,直接写在类中
- 局部变量:在方法内部
- 作用范围不一样(重要)
- 成员变量:整个类可以通用
- 局部变量:只有方法中可以使用,出了方法不能使用。
- 默认值不一样
- 成员变量:若没有赋值,会有默认值,规则和数组一样
- 局部变量:没有默认值,如果要想使用,必须手动进行赋值。
- 内存位置不一样(了解)
- 成员变量:位于堆内存
- 局部变量:位于栈内存
- 生命周期不一样
- 成员变量:随着对象创建而诞生,随着对象被垃圾回收而消失。
- 局部变量:随着方法进栈而诞生,随着方法出栈而消失。
方法的参数也是局部变量,在调用的时候必然会被赋值。
面向对象 - 封装性
封装在 java 中体现
- 方法是一种封装
- 关键字
private
也是一种封装 使用 private 将需要保护的成员变量进行修饰。在本类中可以随意访问,但是超出本类范围之外不能直接访问。 间接访问 private 成员变量:设置一对 getter/setter 方法- setter 方法:有参数,无返回值。方法名称必须是
set
+首字母变大写 (setXxx) - getter 方法:无参数,有返回值。方法名称必须是
get
+首字母变大写 (getXxx)。 - 注意:对于基本数据类型中的
boolean
型,Getter 方法一定要写成isXxx
形式,setXxx 规则不变。
- setter 方法:有参数,无返回值。方法名称必须是
封装:将一些细节信息隐藏起来,对于外界不可见。
this
关键字作用:在重名下起到区分的效果。
当方法的局部变量和类的成员变量重名时,根据“就近原则”,优先使用局部变量。
如果需要访问本类中的成员变量,需要使用这种格式:
this.成员变量名
通过谁调用的方法,谁就是 this.
构造方法
专门用来创建对象的方法。(使用构造方法创造对象可以更具体)
格式 =
public 类名称 (参数) { 方法体 }
注意事项:
- 构造方法名称必须和所在类名称完全一样
- 构造方法不需要写返回值类型,void 也不需要
- 构造方法不能产生返回值。
- 如果没有编写任何构造方法,那么编译器将会默认赠送一个构造方法,没有参数且方法体什么都不做。
public Student() {}
- 一旦编写了至少一个构造方法,那么编译器将不再赠送。
- 构造方法也是可以进行重载的。
new 对象就是在调用构造方法。
标准的类(Java Bean)
- 所有成员变量都要使用 private 关键字修饰
- 为每一个成员变量编写一对 Getter/Setter 方法
- 编写一个无参数构造方法
- 编写一个全参数构造方法
在 idea 中可以自动生成下面 3 项!!!菜单
Code -> Generate
API 文档的查看
- 包路径
- 构造方法
- 方法摘要
Scanner 类
引用类型一般使用步骤
- 导包:
import 包路径.类名称;
- 如果需要使用的目标类,和当前类位于同一个包下,则可以省略包不写。
- 只有
java.lang
包下的内容需要导包,其他的包需要 import 语句。
- 创建:
类名称 对象名 = new 类名称();
- 使用:对象名。成员方法 ();
System.in
代表从键盘输入。其实键盘输入的都是字符串。
- 导包:
匿名对象
正常的创建对象格式:类名称 对象名 = new 类名称();
匿名对象创建格式:new 类名称()
注意:匿名对象只能使用唯一的一次,下次只能创建新的匿名对象。
建议:如果确定有一个对象只需要使用一次,就可以使用匿名对象。
Random 类
生成随机数字。
对象数组
数组可以存储任何数据类型
ArrayList 集合
其长度可以随意改变。
对于 ArrayList 来说,有一个尖括号<E>
代表泛型。
泛型:装在集合中的所有元素,全都是统一的什么类型。
注意:泛型只能是引用类型,不能是基本类型。也就是说集合里面保存的都是地址,但是基本类型数据没有地址。


ArrayList<String> list = new ArrayList<>();
注意右侧的尖括号也是要写的。
注意:对于 ArrayList 集合,直接打印得到的不是地址值,而是内容。如果内容为空,则得到的是空的中括号[].
常用方法:
- 添加数据方法:
public boolean add(E e)
- 从集合中获取元素:
public E get(int index)
- 从集合中删除元素:
public E remove(int index)
- 获取集合长度:
public int size()
String
- 程序当中所有的双引号字符串,都是
String
类的对象(就算没有 new, 也照样是)
字符串的特点 =
- 字符串的内容永不可变。(重要)
- 因为字符串不可改变,所以字符串是可以共享使用的。
- 字符串效果上相当于是 char[]字符数组,但是底层原理是 byte[]字节数组。
创建字符串的常见 3+1 种方式 =
- 3 种构造方法
public String()
: 创建一个空白字符串public String(char[] array)
: 根据字符数组内容创建字符串。public String(byte[] array)
:根据字节数组的内容,创建对应字符串。- 1 种直接创建:
String str = "Helo";
字符串常量池:程序当中直接写上的双引号字符串,就在字符串常量池中。new的不在池中。

注意:
- 对于基本类型来说,
==
是进行数值比较 - 对于引用类型来说,
==
是进行地址值的比较
常用 String 方法:
public boolean equals(Object obj)
: 参数可以是任何对象,只有参数是一个字符串并且内容相同的才会给 true;否则返回 false.equals
方法具有对称性,即a.equals(b)和b.equals(a)
效果一样。- 如果比较双方一个常量一个变量,推荐将常量字符串写在前面。推荐
"abc".equals(str)
, 不推荐str.equals("abc");
(原因,如果变量为 null,比较后程序会报错。)
public boolean equalsIgnoreCase(String str)
public int length()
: 字符串长度public String concat(String str)
: 将当前字符串和参数字符串拼接public char charAt(int index)
: 获取指定索引位置的单个字符。public int indexOf(String str)
: 查找参数字符串在本字符串中首次出现的索引位置
静态 static 关键字
一旦用了 static 关键字,那么这样的内容就不再属于对象自己,而是属于类的,所以凡是本类的对象,都共享一份数据。

static 修饰成员变量
static 修饰方法
一旦使用 static 修饰成员方法,这就成为了静态方法。静态方法不属于对象,而是属于类的。
- 如果没有 static,那么必须首先创建对象,然后通过对象才能使用它。
- 对于静态方法来说,可以通过对象名进行调用,也可以直接通过类名称来调用。
类名称.静态方法
- 如果有 static 关键字,可以不创建对象,直接通过类名称调用它
- 对于本类当中的静态方法,可以省略类名称。
无论是成员变量还是成员方法,如果有 static 关键字修饰,都推荐用类名称进行调用
- 静态变量:类名称。静态变量
- 静态方法:类名称。静态方法
注意
静态不能访问非静态(重点)
原因:因为在内存当中是先有的静态内容,后有的非静态内容。(先人不知道后人,但是后人知道先人)
静态方法中不能用
this
原因:this 代表当前对象,但是静态方法是通过类调用的,和对象没有关系。
static 内存图

注意:根据类名称访问静态成员变量时,全程和对象没有关系,只和类有关系。
静态代码块
格式:
public class 类名称 { static { // 静态代码块内容 } }
特点:当第一次用到本类时,静态代码块执行唯一的一次。
静态内容优先于非静态,所以静态代码块优先于构造方法执行。
典型用途:用来一次性地对静态成员变量进行赋值。
Arrays 类
两个常用的方法
public static String toString(数组)
: 将参数数组变成字符串public static void sort(数组)
: 按照默认升序对数组的元素进行排序。
Math 类
常用方法
public static double abs(double num)
: 获取绝对值public statiic double ceil(double num)
: 向上取整public static floor double floor(double num)
: 向下取整public static long round(double num)
: 四舍五入