实用类
内部类
顾名思义,就是指一个类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方法)