Skip to main content

实用类

内部类

顾名思义,就是指一个类A的内部再声明了一个类B作为类A的成员。内部类中不能声明类变量和类方法(指static修饰的),外部类可以声明内部类对象。内外的成员和方法可以相互调用

class Student {
String name;
class Life {
String stuName;
Life(String name) { this.stuName = name; }
public void sayHello() { System.out.println(this.stuName); }

}

Life l;
Student() {}
Student(String name) {
l = new Life(name);
this.name = name;
}
public void SelfIntru() { System.out.println("I'm " + this.l.sayHello()); }
}

//类别对内部类进行声明
public static void main() {
ClassA a = new ClassA();
ClassA.ClassB b = a.new ClassB();

Student s = new Student();
Student.Life l = s.new Life();
}

匿名类

顾名思义,就是指没有名字的类,相当于是使用类的子类创建一个子类对象,也就是说默认就带有继承效果,所以可以直接用抽象类或接口创建一个对象。

abstract class Shape { ... }

public static void main() {
Shape bottom;
bottom = new Circle(); //Circle继承Shape

new Shape() { ... } //可以直接创建一个继承于Shape的对象
}

异常类

异常类是指可以自定义java中的异常,所有的异常都是继承于Exception类,只要继承于Exception类并且重写toString和getMessage方法,在声明方法的时候在末尾使用throws + 异常类表示该方法会抛出哪些异常,在使用这个方法的区域需要用try-catch语句捕获异常。

若如果直接使用throw + 异常类,则表示语句执行到该处的时候直接抛出一个异常。

public class ShapeException extends Exception {
String message;
ShapeException(String message) { this.message = message; }
public String toString() { return this.message; }
public String getMessage() { return this.message; }
}
public class Circle implements IShape {
double radius;
public double getArea() { return Cylinder.PI * this.radius * this.radius; }
public double getPerimeter() { return 2 * Cylinder.PI * this.radius; }
public void input(Scanner sc) throws ShapeException {
if (this.radius < 0) { throw new ShapeException("输入半径为负"); }
this.radius = sc.nextDouble();
}
}
public interface IShape {
double getArea();
double getPerimeter();
void input(Scanner sc) throws ShapeException;
}
public static void main() {
while (true) {
try {
bottom.input(sc);
break;
} catch (ShapeException exp) {
System.out.println(exp.getMessage());
System.out.println("请重新输入属性值:");
}
}
}

断言

使用assert关键字,基本用法为: assert + 逻辑表达式。当后面跟的逻辑表达式为真则不会抛出异常,若表达式为假则抛出异常.

int num = 0;
assert num >= 0: "num为负数";
num = -1;
assert num >= 0: "num为负数"; //抛出异常.

输入输出流类

File

该类主要用于描述文件的各种属性,比如获取文件名字,路径,是否可读等,同时还具备遍历文件夹的功能。同时还可以负责文件夹的创建删除等功能

字节流

基本传输单位是字节流

  • 字节输入输出流

使用InputStream、OutputStream类进行操作,并且使用read和write能进行输入输出操作。

  • 文件字节流

使用FileInputStream、FileOutputStream类进行操作,主要是对于文件进行读写操作,以字节的方式进行读写

  • 字节数组流

传入的是一个byte类型的数组,类似于缓冲区的作用。

  • 数据流

使用DataInputStream、DataOutputStream类,类似字符流中的bufferd,传入的参数为InputStream或OutputStream

字符流

基本传输单位是字符的流

  • 字符输入输出流

使用Reader、Writer类进行操作,同样使用read和write方法进行输入输出操作。

  • 文件字符流

使用FileReader、FileWriter类进行操作,主要是对于文件的读写,以字符的方式进行读写

  • 字符缓冲流

使用BufferedReader、BufferedWriter类进行操作,这个为一个缓冲,所以只能传入流来进行操作,传入什么流就对什么流进行操作。传入的参数是Reader或Writer类。使用该类可以实现读取一行或多行的数据的功能。(使用readLine方法)