2026/5/21 14:01:11
网站建设
项目流程
重庆营销网站建设平台,安卓开发者网站,wordpress 拼音,重庆网红打卡景点文章目录抽象类和普通类的区别抽象类和接口的区别注解的作用注解的分类说说JAVA中异常类体系结构throw和throws的区别JAVA中创建对象的方式有哪些#xff1f;如何实现深拷贝抽象类和普通类的区别
// 普通类
class Animal {void eat() {System.out.println(Animal eats如何实现深拷贝抽象类和普通类的区别// 普通类 class Animal { void eat() { System.out.println(Animal eats); } } // 抽象类 abstract class Bird { abstract void fly(); // 抽象方法没有实现 void sleep() { System.out.println(Bird sleeps); } }特性普通类抽象类能否实例化可以不可以是否可包含抽象方法否可以方法实现必须有实现可以有抽象方法也可以有实现方法继承用途可继承也可直接用用于规范子类必须被继承实现抽象方法典型使用场景功能完整的对象框架、模板、规范类抽象类和接口的区别特性抽象类接口是否可以实例化不可以不可以定义抽象方法可以默认是抽象方法定义普通方法可以Java 8 可以有 default 方法在JDK9中允许有私有普通方法定义静态方法可以可以Java 8成员变量可以有实例变量只能有常量public static final构造方法可以不可以继承方式单继承多实现适用关系is-acan-do使用场景复用 规范统一规范 多实现功能注解的作用注解是JDK1.5版本开始引入的一个特性用于对代码进行说明可以对包、类、接口、字段、方法参数、局部变量等进行注解。它主要的作用有以下四方面生成文档通过代码里标识的元数据生成javadoc文档。编译检查通过代码里标识的元数据让编译器在编译期间进行检查验证。编译时动态处理编译时通过代码里标识的元数据动态处理例如动态生成代码。运行时动态处理运行时通过代码里标识的元数据动态处理例如使用反射注入实例。注解的分类Java自带的标准注解包括Override、Deprecated和SuppressWarnings分别用于标明重写某个方法、标明某个类或方法过时、标明要忽略的警告用这些注解标明后编译器就会进行检查。元注解元注解是用于定义注解的注解包括Retention、Target、Inherited、Documented。Retention用于标明注解被保留的阶段Target用于标明注解使用的范围Inherited用于标明注解可继承Documented用于标明是否生成javadoc文档自定义注解可以根据自己的需求定义注解并可用元注解对自定义注解进行注解。说说JAVA中异常类体系结构Throwable是 Java 语言中所有错误与异常的超类Error及其子类程序中无法处理的错误Exception程序本身可以捕获并且可以处理的异常运行时异常RuntimeException类及其子类异常这些异常是不检查异常程序中可以选择捕获处理也可以不处理。这些异常一般是由程序逻辑错误引起的程序应该从逻辑角度尽可能避免这类异常的发生。编译器不会检查非运行时异常必须进行处理的异常如果不处理程序就不能编译通过。throw和throws的区别throws: 若方法中存在非运行时异常如果不对其捕获那必须在方法头中显式声明该异常以便于告知方法调用者此方法有异常需要进行处理。 在方法中声明一个异常方法头中使用关键字throws后面接上要声明的异常。若声明多个异常则使用逗号分割.public static void method() throws IOException, FileNotFoundException{ //something statements }throw: 如果代码可能会引发某种错误可以创建一个合适的异常类实例并抛出它这就是抛出异常。public static double method(int value) { if (value 0) { throw new ArithmeticException(参数不能为0); } return 5.0 / vlaue; }JAVA中创建对象的方式有哪些使用new创建对象。User user new User()使用反射创建对象// 方式1Class.newInstance()已废弃不推荐 Person p1 Person.class.newInstance(); // 方式2Constructor.newInstance() ConstructorPerson constructor Person.class.getConstructor(); Person p2 constructor.newInstance();使用克隆创建对象class Person implements Cloneable { String name; public Object clone() throws CloneNotSupportedException { return super.clone(); } } Person p1 new Person(); Person p2 (Person) p1.clone(); // 复制对象通过序列化/反序列化创建对象// 假设 person.ser 是序列化文件 ObjectInputStream ois new ObjectInputStream(new FileInputStream(person.ser)); Person p (Person) ois.readObject(); ois.close();如何实现深拷贝先介绍一下深拷贝和浅拷贝浅拷贝: 对象的基本类型会被复制但对象中的引用类型仍指向同一个实例。深拷贝对象及其引用类型都被完整复制互不影响。实现深拷贝的方式手动实现clone()方法所有引用对象也要实现Cloneable并重写clone()逐层调用 clone实现对象图的深度复制通过序列化反序列化实现深拷贝将对象写入字节流再读回来自动生成新的对象要求对象及其引用对象都实现Serializable使用第三工具Gson / Jackson可以先序列化成 JSON 再反序列化Apache Commons Lang提供SerializationUtils.clone()