JavaSE复习笔记

1.请简述一下break,continue,return之间的区别

  • break:停止所在层的循环,以及停止选择语句的当前分支

  • continue:停止当前的本次循环,循环从下一次继续开始

  • return:停止所在的方法,返回调用该方法语句处,程序继续向下执行

2.数组: 将一组相同数据结构的数据进行统一存储 对外作为整体存储

一维数组:

创建方式

1)动态数组---new 类型[长度(元素个数)]

2)静态数组---类型[] 数组名 = {}

一旦创建成功,长度不能改变 不能是混合型数据

数组在存储或者获取数据时使用索引进行处理 从0开始 到长度-1结束 byte short int char

作用:存储、操纵、管理

二维数组 :

创建方式

  • 1)动态数组---new 类型[二维数组的长度][数组中每个元素的长度]

  • 2)静态数组---类型[][] 数组名 = {{},{},{},......}

如果使用动态方式进行创建,第一个长度不能省略,第二个长度值可以省略,表示每个元素的长度不是统一的,后期可以通过代码进行单独的指定

如果使用动态方式进行创建,第一个和第二个长度同时指定,那么每个元素的长度是固定的,无论是一维数组还是二维数组,无论动态数组还是静态数组,只要数组创建成功,长度都不能改变

遍历数组:

  • 1)for循环

  • 2)for-each循环 前提:JDK在1.5以上才能使用

注意:只能对数组进行遍历 不能进行赋值,因为该循环中没有索引存在,无法指定位置

该循环表示提取数组中的每个元素值

3.方法

  • 声明:方法头([访问修饰符] 返回值类型 方法名 [参数列表] [异常列表] )

private default protected public

参数列表是进入该方法的输入接口

调用方法时传递的实参与定义的形参必须在数量、顺序、类型上保持一致

  • 实现:方法体

  • 值传递:是指在方法调用时,传递的参数是按照值的拷贝进行传递的 传递前后互补影响

  • 引用传递:是指在方法调用时,传递的参数是引用地址,传递后操作的是同一个地址中的数据,传递前后有影响

public class Test{
public static void main(String[] args){
//请将你的代码写在此处----调用aa方法
Test t = new Test();
t.aa(3,1.2);
}
public void aa(int a,double b){
sout("123");
}
}

4.面向对象的程序设计:OOP

面向对象 = 对象+消息传递

面向过程 = 算法+数据结构

面向对象的好处:重用性 可靠性 灵活性 扩展性

面向对象的基本特征:

  • 封装 :数据模块化 有选择的数据隐藏 防止意外对数据的破坏 易于数据的隔离和修复

  • 继承 :通过已有类创建新的类的机制,新的类称为子类。子类中含有父类中公共的属性和方法

  • 多态 :对象根据接收的消息做出的动作。同一个消息被不同的对象进行接收,产生不同的行为,称为多态

方法的重载

在同一个类中使用相同的方法名定义多个不同的方法的机制。

参数列表必须不同:

  • 1)类型不同

  • 2)数量不同

  • 3)顺序不同(不推荐,与第一种本质上是一个)

方法的重写

子类对父类同名方法的覆盖 (重新定义)

注意事项:重写的方法与被覆盖的方法的返回值类型、方法名、参数列表必须保持一致

访问修饰符:要与被覆盖的方法完全一致或者只能更宽松,不能更严格

private < default < protected < public

5.面向对象中最小的单位是:类

类和对象----类是事物的描述 对象是事物的具体

类是构建对象的模板 对象是类的具体实例

6.类名 对象名 = new 类名(); 通过new调用方法,返回对象在堆内存中开辟的空间地址,赋值给对象

基本数据类型

byte short int long boolean float double char

引用数据类型

String 自定义类 集合 接口

String a = null; //空 在内存中没有开辟地址,对象不存在
String b = ""; //已经占用了内存,对象存在,但是没有具体值
sout(a.length()); //报错:java.lang.NullPointException空指针异常
sout(b.length()); //0

判断题:数组具有长度的方法,可以获取数组的长度值,即元素的个数(X) 数组具有长度的属性

7.数据成员(类中的成员变量)

1)声明数据成员必须指定所属类型和变量名

2)变量名必须是唯一的

3)类型可以是Java中的任意类型数据

方法成员:表示一个对象能做的事情,通过对象调用该方法获取某些信息值

可以有,可以有一个或多个,也可以没有

8.如果成员变量进行了私有化处理(封装),就要提供对应的公有的get+set方法

public class Student{
private int age;
public int getAge(){ //get获取
//如果方法设置了返回值类型,必须要有该类型的值的返回
return age;
}
public void setAge(int age){ //set设置
this.age = age; //当全局变量与局部变量重名时,使用this进行区分,this表示当前对象
}
}
对象名.setAge(12);
Student stu = new Student(); //通过Student类的构造方法创建对象stu,并对对象的属性进行初始化操作
sout(stu.getAge()); //对象的age属性值是:0
stu.setAge(15); //修改属性值
sout(stu.getAge()); //15

9.构造方法(构造器 构造子 构造函数) 非传统意义上的方法

每个类中都有一个构造方法,系统会默认提供一个无参的构造方法

语法结构:[访问修饰符] 类名([参数列表]){}

方法的实现

  • 构造方法的名字必须与类名完全一致

  • 没有返回值 不能使用void

  • 不能被static、final进行修饰

  • 不能直接调用,只能通过new关键字自动引起构造方法的调用,进行实例化对象

构造方法的作用:创建对象并进行初始化操作

构造方法不能被继承

构造方法可以被重载

同一个类中的多个构造方法之间可以进行调用,需要使用this([参数列表])语句,但是该语句必须写在调用的构造方法的第一行

构造方法虽然不能被继承 但是子类可以调用父类的构造方法,使用super([参数列表])语句,但是该语句必须写在子类构造方法的第一行

如果父类中存在无参构造方法,子类构造方法中的super()语句可以省略不写,默认调用父类的无参构造方法

如果父类中不存在无参构造方法,那么子类的构造方法中,super(参数列表)必须进行显示的调用

注意:同一个构造方法中不能同时使用this()语句和super()语句 因为他们的约束条件冲突了

final:

修饰变量--->常量,值不能被修改。在声明时必须进行初始化操作(赋值),以便后期进行直接使用

修饰方法--->终结方法,不能被重写

修饰类--->终结类,不能被继承

10.对象和对象数组作为方法的参数进行传递

public void check(Student stu){
//通过形参stu获取当前学生的信息
}
public void check(Student[] stus){
//遍历数组,依次提取每个学生对象,获取当前学生的信息
}

11.static

  • 静态变量(类变量)----调用语法:类名.变量名,对类中所有对象均有效

  • 静态方法(类方法)----调用语法:类名.方法名,对类中所有对象均有效

非static修饰的变量和方法

  • 实例变量---调用语法:对象名.变量名,仅对当前对象有效

  • 实例方法---调用语法:对象名.方法名,仅对当前对象有效

注意:实例方法中可以调用实例方法/静态方法,可以使用实例变量/静态变量

静态方法中只能使用静态变量和调用静态方法 !!!!!!

单例模式(1.懒汉式 2.饿汉式)

12.继承 extends

通过已有的类创建新的类

父类---->子类 子类是父类的一种 has a

Java只支持单继承 一个子类只能有一个直接的父类

继承的规则

private---->子类不能继承

default---->同包可继承,不同包不可继承

protected---->任何情况都可以继承

public---->任何情况都可以继承

子类对父类同名方法的覆盖----子类对父类中相同的属性进行重新的定义

子类中含有两个同名的属性(1.父类中 2.自己重新定义的)

调用父类被覆盖的属性-----super.属性名 super表示父类对象的引用 this表示当前自身的引用

子类可以对父类中同名方法进行定义(同名方法的覆盖----方法的重写)

抽象方法必须被重写 如果子类不重写父类中的抽象方法,则子类必须是抽象类

static和final修饰的方法不能被重写

instanceof----判断对象是否属于一个特定的类 返回boolean类型

子类和父类之间的转换

  • 对象上转型:子类转成父类类型,允许的 使用的属性是父类的 调用的方法是子类的

  • 对象下转型:父类转成子类类型,错误的 在编写时虽然通过强制转换可以不报错,但是运行时显示类转换异常

里氏代换原则

  • 父类出现的地方,子类一定可以出现 父类对象作为方法参数,任何子类对象都可以传递

  • 子类出现的地方,父类不一定出现

13.组合 在一个类中,含有另外一个类的对象 我中有你 has a

public class A{
int age;
}
public class B{
String sex;
A a; //a.age
}

合成聚合复用原则

在继承和组合都能实现代码复用的前提下,优先选择组合关系,尽量少使用继承关系

因为组合关系的耦合度比较低

14.接口 interface like a 抽象类(abstract)

目的:设计和实现相分离

1个类可以实现多个接口

1个接口可以被多个类实现

接口不能使用new关键字创建对象,不能实例化 需要new它的实现类

接口中的成员数据都是公有的静态的常量,在定义时必须进行初始化赋值的操作

接口中的成员方法都是公有的抽象方法,没有方法体(在JDK1.8版本以后,接口中提供了static方法和default方法,可以有方法体)

抽象类也能进行实例化,不能new对象,需要new它的子类

抽象类中可以有常规元素(普通变量和普通方法),也可以没有抽象方法

接口的抽象层次比抽象类要更高一些

接口在设计时,尽量满足接口隔离原则

使用专门的接口要比统一的接口更为合理

Collection 集合的父接口

对上述的父接口进行细化细分

List extends Collection 扩展一些与索引相关的操作 ArrayList实现类

Set extends Collection 几乎都是与父类一致的操作 HashSet实现类

15.异常 Exception--->Throwable--->Object

分类:

  • 运行时异常 :在编码时,系统编译器不进行实时检查,只有在运行时可能会出现错误,并显示错误的信息

  • 检查型异常 :在编码时,系统编译器需要进行实时检查,如果有异常,必须要对异常进行处理,否则编译不通过

处理异常的方式:

  • 捕获异常:try catch finally try-finally try-catch try-catch-finally

  • 抛出异常:throw(实现) throws(声明)

实现的异常可以是Throwable或者其他子类对象

一个try可以同时匹配多个catch语句 但是catch需要注意先后顺序,先子类后父类

try-catch可以进行嵌套使用

try与一个catch语句进行搭配,但是处理了多个异常,那么在catch语句中可以使用逻辑或运算符描述

(异常1 | 异常2 | 异常3 | ...... e)

显示异常信息的方式

  • getMessage():显示异常错误的信息

  • toString():显示异常错误的类型以及错误的信息

  • printStackTrace():打印异常在堆栈中的轨迹信息,追溯异常的位置

finally是进行资源释放的

无论代码是否正确,finally都要被执行,如果try-catch语句中存在return 先执行finally再进行return返回操作

唯一不执行finally的情况:使用了System.exit(0)

自定义异常:

自定义的异常类需要继承Exception/子类

重写方法:
toString(){} //无需做更改,就是通过该方法获取当前类的类型以及自定义的信息提示
getMessage(){} //自定义异常信息的提示
16-1.Object
equals()方法:比较对象的地址,判断对象是否是同一个
String
equals()方法:比较内容是否是相同的
String str1 = "123";
String str2 = "123";
soutv(str1 == str2); //数据是存储在常量池中的 str1与str2指向同一个数据 true
String str1 = new String("123");
String str2 = new String("123");
soutv(str1.equals(str2)); //虽然String的父类是Object,但是对父类的equals方法进行了重写,比较的是内容 true
Student stu1 = new Student("李四",23);
Student stu2 = new Student("李四",23);
soutv(stu1 == stu2); //比较的是对象的地址 堆内存中开辟的空间不同 地址不同 false
soutv(stu1.equals(stu2)); //Student的父类是Object,使用的方法是从父类继承来的,依旧是判断对象的地址 false
//如果Student也想内容一致返回true 需要对继承的equals方法进行重写操作

16-2.Date 获取系统时间

new Date(); 一般得到的是CST格式 或者 GMT东八区时间

如果想重新设置时间的格式,需要使用DateFormat对象进行相关处理

但是DateFormat是抽象类,需要new子类SimpleDateFormat(pattern).format(系统时间--Date对象)最终返回String值

如果需要将某个String--->"1999-12-12"转成Date类型的时间

SimpleDateFormat.getDateInstance(); //获取可以处理成日期的父类对象
SimpleDateFormat.getTimeInstance(); //获取可以处理成时间的父类对象
SimpleDateFormat.getDateTimeInstance(); //获取可以处理成日期和时间的父类对象
Date date = SimpleDateFormat.getDateInstance().parse("1999-12-12");

17.集合

都可以存储一组相同类型的数据,多外作为整体存在

数组不是面向对象的,没有封装、继承、多态类的特性,在开发时效率相对较低

数组的数据结构比较单一,采用顺序表方式 数组的长度是固定的 数组的实际存储元素个数无法直接获取

集合是以类的形式存在的,具有封装、继承、多态类的特性,使用简单的方法、属性就可以实现比较复杂的操作,提高开发的效率

结构(顺序表、链表、哈希表、树) 特征(是否有序 是否唯一)

集合可以动态改变容量,集合可以直接获取实际存储元素个数,不关系容量的大小

数组可以存储基本数据类型+引用数据类型

但是集合只能存储引用数据类型

Collection-----不唯一,无序

List----不唯一,有序

ArrayList---顺序表 优点:遍历元素和通过索引随机访问效率高

LinkedList---链表 优点:插入、删除操作时效率高

Vector和ArrayList的比较

  • 原理相同 功能相同 可以互用

  • Vector以前的产物 ArrayList新的产物

  • Vector线程安全的 ArrayList线程非安全的

  • Vector默认增长为原来的一倍 ArrayList默认增长原来的一般50%

Set----唯一,无序

HashSet---采用哈希表结构

优点:添加、删除、查询、变更速度都快

TreeSet---采用二叉树结构 按照自然顺序进行排列

优点:按照内容,查询速度比List快

LinkedHashSet---采用哈希表结构,同时使用链表维护次序

有顺序(添加顺序)

equals方法和hashCode方法

Map<K,V>----可以存储映射关系的集合

KEY具有唯一性,如果重复,值覆盖 KEY没有顺序 ------ 类似于Set集合

VALUE可以重复(不唯一),没有顺序 --------- 类似于Collection

HashMap

TreeMap

LinkedHashMap

因为与Set集合很像,发现HashSet底层在进行数据存储时,就是在使用HashMap做处理

HashMap和Hashtable的比较

  • 原理相同 功能相同 可以互用

  • Hashtable以前的产物 HashMap新的产物

  • Hashtable继承Dictionary(过时了,开发中不再使用) HashMap实现了Map接口

  • Hashtable是线程安全的 HashMap非安全的

  • Hashtable不允许有null值 HashMap允许有null值

18. IO输入输出流

下面四个类都是抽象类 不能直接new

  • 面向字符的流

Reader---输入------>FileReader(节点流)---->new BufferedReader(节点流),提高执行的效率

Writer---输出------>FileWriter(节点流)---->new BufferedWriter(节点流),提高执行的效率

  • 面向字节的流

InputStream------输入------>FileInputStream(节点流)---->new BufferedInputStream(节点流),提高执行的效率

OutputStream------输出------>FileOutputStream(节点流)---->new BufferedOutputStream(节点流),提高执行的效率

对象的序列化和反序列化

  • 序列化:将Java对象转成字节序列

  • 反序列化:将字节序列恢复成Java对象

FileInputStream(节点流)---->new ObjectInputStream(节点流)---->实现对象的反序列化 对象 = readObject();

FileOutputStream(节点流)---->new ObjectOutputStream(节点流)---->实现对象的序列化 writeObject(对象)

注意:进行序列化的类要实现序列化接口(空接口,只是具有标识性)

Java中唯一一个用于处理文件或目录的类是File 在java.io包下 该类与平台无关

new File(String path);

new File(String dir,String fileName);

new File(File path,String fileName);

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Programmer-J

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值