还剩31页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
程序员培训课程Java欢迎参加我们的程序员专业培训课程本课程旨在帮助您从零基础开Java始,系统性地掌握编程技能,为您未来的软件开发职业生涯打下坚实基Java础在这个为期周的密集训练中,我们将带领您从基础知识逐步深入到面10Java向对象编程的核心概念,并掌握企业级应用开发所需的各种技能Java无论您是刚刚开始编程学习,还是希望转向开发领域的从业者,本课Java IT程都将为您提供清晰的学习路径和实战经验语言简介Java1年诞生1995由公司的团队创建,最初称为,旨在解Java SunJames GoslingOak决跨平台问题2年被甲骨文收购2010收购公司后,成为的主要所有者和推动者Oracle SunJava3年发布2014Java8引入表达式、等现代特性,成为里程碑版本Lambda Stream API4年2021Java17LTS作为长期支持版本,进一步巩固的企业级地位Java作为全球最受欢迎的编程语言之一,广泛应用于企业级应用开发、移动应用Java()、大数据处理和云服务等领域主流开发岗位包括后端工程师、Android Java开发工程师、全栈工程师等,人才需求持续旺盛Android环境搭建Java下载JDK访问官网或网站,根据操作系统选择合适版本的Oracle OpenJDKJDK(推荐或版本)JDK8JDK11LTS安装配置完成安装后,配置环境变量,并将目录添加到JAVA_HOME bin中,确保能在任何目录执行命令PATH Java安装IDE下载并安装或,前者免费开源,后者提供Eclipse IntelliJIDEA社区版和专业版选择,专业开发推荐IDEA正确配置开发环境是开始学习的第一步(开发工具包)提供Java JDKJava了编译和运行程序所需的所有工具现代能显著提高开发效率,提Java IDE供代码补全、调试和项目管理等功能第一个程序Java编写代码创建HelloWorld.java文件,编写主类和main方法编译程序命令行执行javac HelloWorld.java,生成.class字节码文件运行程序命令行执行java HelloWorld,查看输出结果典型的Hello World程序代码如下public classHelloWorld{public staticvoid mainString[]args{System.out.printlnHello,World!;}}这个简单程序展示了Java程序的基本结构类定义、main方法(程序入口点)和输出语句理解Java的编写-编译-运行流程是掌握Java开发的第一步基本数据类型数据类型位数取值范围默认值byte8位-128到1270short16位-32768到327670int32位-2^31到2^31-10long64位-2^63到2^63-10Lfloat32位单精度浮点
0.0fdouble64位双精度浮点
0.0dchar16位Unicode字符\u0000boolean1位true/false falseJava作为强类型语言,拥有8种基本数据类型,分为四类整型(byte、short、int、long)、浮点型(float、double)、字符型(char)和布尔型(boolean)这些基本类型在内存中占用固定空间,并有明确的取值范围了解这些类型的特性对于合理使用内存和避免数值溢出至关重要变量与常量变量常量变量是程序中可以改变值的存储单元,必须先声明后使用常量是程序运行过程中值不可改变的存储单元,使用final关键字定义int age=25;String name=张三;final doublePI=
3.14159;double salary;final StringDB_URL=salary=
5000.50;jdbc:mysql://localhost:3306/mydb;变量命名遵循驼峰命名法,首字母小写,后续单词首字母大写,常量命名通常全部大写,多个单词用下划线分隔,如如userAge,firstName MAX_VALUE,MIN_SALARY变量和常量是程序的基础组成部分合理使用变量提高代码灵活性,而常量则有助于增强代码可读性和维护性,防止意外修改关Java键值在实际编程中,我们应该为变量选择有意义的名称,并使用常量来替代魔法数字()Magic Number运算符详解算术运算符•加法+•减法-•乘法*•除法/•取模%•自增++•自减--比较运算符•等于==•不等于!=•大于•小于•大于等于=•小于等于=逻辑运算符•与•或||•非!位运算符•位与•位或|•位异或^•位取反~•左移•右移运算符是执行特定操作的符号,了解它们的优先级和结合性对于正确编写表达式至关重要一般而言,算术运算符优先级高于比较运算符,比较运算符优先级高于逻辑运算符分支与循环条件分支多路分支结构根据条件执行不同代码块,可嵌语句针对同一变量的多个可能值,执if-else switch套多层实现复杂逻辑判断行相应代码块,效率高于多重if流程控制循环结构中断循环,跳过当前迭、和循环用于重复执行break continuewhile do-while for代,return退出整个方法代码块,根据执行特性选择合适循环分支和循环结构是程序流程控制的基础语句适用于条件判断,而适合于对单一变量进行多值判断循环结构中,循环适合已知次数的if switchfor迭代,适合未知次数的循环,确保至少执行一次循环体while do-while合理使用流程控制语句可以使程序逻辑清晰,执行效率更高在实际应用中,应避免过深的嵌套和过于复杂的条件表达式,以提高代码可读性和可维护性数组及其应用103维度起始索引声明方式Java支持一维数组、二维数组直至多维数组,满足各种数据结构需求Java数组索引从0开始,最后一个元素索引为长度-1可以使用静态初始化、动态初始化或匿名数组三种方式创建数组是最基础的数据结构,用于存储同类型元素的有序集合Java中声明数组的典型方式如下//动态初始化int[]numbers=new int
[5];//静态初始化String[]fruits={苹果,香蕉,橙子};//二维数组int[][]matrix=new int
[3]
[4];数组常见操作包括遍历(使用for循环或增强for循环)、排序(Arrays.sort)、搜索(线性搜索或二分查找)和复制(System.arraycopy或Arrays.copyOf)掌握数组操作是构建更复杂数据结构和算法的基础方法(函数)基础方法定义包含修饰符、返回类型、方法名、参数列表和方法体返回值与参数方法可返回单一值或,参数可以有多个且类型不限void方法重载同名不同参数(类型、数量、顺序)的多个方法形式方法是中封装特定功能的代码块,通过合理使用方法可以提高代码的复用性和可维护性方法参数传递机制分为值传递和引用传递Java基本类型传递的是值的副本,而引用类型传递的是引用的副本(指向同一对象)方法重载是面向对象编程的重要特性,允许同一个类中定义多个同名但参数不同的方法编译器会根据调用时提供的参数类型和数量自动选择合适的方法执行重载提高了方法的灵活性和易用性,如方法可以打印各种类型的数据System.out.println面向对象概念继承子类继承父类的特性,实现代码复用和层次结构多态同一接口,不同实现,提供灵活性和扩展性封装隐藏内部细节,只暴露必要接口,保护数据完整性面向对象编程()是的核心设计理念,与传统的面向过程编程相比,它更注重于对现实世界的模拟在中,类是对象的模OOP JavaOOP板,定义了对象的属性和行为;而对象是类的实例,代表具体的实体的三大面向对象特性互相配合封装保护内部实现并提供访问控制,继承实现代码复用和类层次结构,多态提供接口统一性和实现多Java样性这些特性共同促进了代码的可维护性、可扩展性和可重用性,是成为企业级开发首选语言的重要原因Java类与对象定义类的结构对象创建与使用public classStudent{//创建对象//属性(成员变量)Student student1=new Student;private Stringname;Student student2=new Student李华,18;private int age;private doublescore;//访问属性和方法student
2.study;//输出李华正在学习//构造方法public Student{//默认构造器对象是类的实例,通过new关键字创建每个对象都有自己的属性值(状态),可以调用类中定义的方法}(行为)public StudentStringname,intage{this.name=name;this.age=age;}//方法public voidstudy{System.out.printlnname+正在学习;}}构造方法是特殊的方法,名称与类名相同,没有返回类型它在创建对象时被调用,用于初始化对象如果不定义任何构造方法,编译器会提供一个无参的默认构造方法this关键字指代当前对象,常用于区分局部变量和成员变量,或在一个构造方法中调用另一个构造方法(this)合理设计类的结构和构造方法可以使代码更加清晰和易于维护封装与访问控制public可以被任何类访问,没有限制,通常用于方法接口protected同一包内或子类可访问,常用于继承场景中的成员默认(无修饰符)同一包内可访问,不同包内不可访问,也称为包访问权限private仅在类内部可访问,提供最严格的封装,通常用于内部属性封装是面向对象的核心原则之一,通过访问修饰符控制类成员的可见性,隐藏内部实现细节,只暴露必要的接口标准的封装实践是将属性设为私有,通过公共的getter和setter方法访问和修改public classPerson{private Stringname;private intage;public StringgetName{return name;}public voidsetNameString name{this.name=name;}public intgetAge{return age;}public voidsetAgeint age{if age0age150{this.age=age;}}}继承与多态继承关系Java中通过extends关键字实现继承,子类可以继承父类的非私有成员(属性和方法)Java只支持单继承,一个类只能有一个直接父类,但可以实现多个接口方法重写子类可以重写(Override)父类的方法,提供特定实现重写方法必须具有相同的方法名、参数列表和返回类型(或其子类型)通过@Override注解可以让编译器帮助检查是否正确重写多态性父类引用可以指向子类对象,实现一种接口,多种实现多态通过动态绑定在运行时决定调用哪个方法,提高代码的灵活性和可扩展性,是Java面向对象设计的重要特性继承和多态共同构成了Java面向对象的核心机制,使代码更具层次性和灵活性继承通过建立类的层次结构实现代码复用,而多态则通过统一接口和多样化实现提供了设计上的灵活性在实际开发中,应遵循组合优于继承的原则,避免过深的继承层次抽象类和接口与详解static final静态变量静态方法关键字final属于类而非对象,所有对象共享不依赖对象状态,不能访问非静用于变量、方法和类final变量一个副本,通过类名直接访问,态成员,常用于工具方法如为常量,final方法不可被重写,常用于计数器、共享配置等场景Math.max,可直接通过类名final类不可被继承,增强安全性调用静态初始化块static{}在类加载时执行,初始化静态成员,只执行一次,常用于复杂静态变量初始化static和final是Java中重要的修饰符,对程序结构和性能有显著影响静态成员属于类本身而非实例,节省内存并方便访问;final提供不可变性保证,有助于代码安全和编译优化不可变类(如String、Integer等)通常使用private和final的组合实现,确保一旦创建就不能修改其状态,这对于线程安全、缓存和防止意外修改非常重要合理使用static和final能让代码更加高效、安全和易于维护内部类成员内部类静态内部类定义在类内部的非静态类,可访问外部类的所有成员,包括私有成员需要外部类实例才能创使用static修饰的内部类,不依赖外部类实例,无法直接访问外部类的非静态成员适用于与建,常用于实现与外部类紧密关联的功能外部类关联但不需要访问外部类实例状态的场景局部内部类匿名内部类定义在方法或作用域内的类,只在该方法或作用域内可见可以访问外部类所有成员和final没有名字的局部类,用于创建接口或抽象类的一次性实现广泛用于事件处理、回调等场景,(或等效final)的局部变量用于封装仅在特定方法中使用的逻辑Java8后可用Lambda表达式代替大部分匿名内部类内部类是Java提供的一种将类嵌套在另一个类中的机制,增强了封装性和代码组织能力不同类型的内部类有各自的特点和适用场景,灵活运用可以使代码更加简洁和结构化包与导包机制包的声明导入语句使用语句在源文件首行声明包名,使用关键字导入其他包中的类,可package import要求与文件所在目录结构一致以单类导入或整包导入包命名规范包的组织通常采用反向域名方式,如按功能、层次或模块划分包,良好组织提升,确保com.company.project.module代码可维护性和可读性全局唯一性包()是中组织类的机制,提供命名空间隔离和访问控制一个设计良好的包结构对于大型项目至关重要,可以防止命名冲突、控制package Java访问权限并提高代码的可维护性导入语句()简化了对其他包中类的引用自动导入包(包含、等基础类),其他包中的类需要显式导入import Javajava.lang StringObject静态导入()允许直接使用其他类的静态成员,但应谨慎使用以避免降低代码可读性import static常用概述Java APIjava.lang核心类库,自动导入,包含String、Object等基础类java.util实用工具包,包含集合框架、日期时间、随机数等工具类java.io输入输出操作相关类,处理文件和流的读写java.net网络编程相关类,支持套接字和URL等网络操作Java标准库(Java API)提供了丰富的类和接口,涵盖了从基础数据处理到高级网络编程的各个方面掌握常用API可以避免重新发明轮子,提高开发效率查阅Java API文档是学习和使用这些类库的关键Oracle官方提供的Java SE文档(https://docs.oracle.com/javase/)是最权威的参考资料良好的文档阅读习惯能够帮助开发者更快地找到解决方案,理解类的用法和最佳实践在实际开发中,应该优先使用标准API,在确实需要时才自行实现字符串与StringBuffer类特性可变字符串类String对象一旦创建,其内容不可修改,这是因为内部使用一个和提供可变字符串操作,避免频繁创建新String StringStringBuffer StringBuilderfinal字符数组存储数据对象String s1=Hello;StringBuilder sb=new StringBuilder;String s2=s1+World;//创建新对象sb.appendHello;sb.append World;String result=sb.toString;每次字符串连接或修改都会创建新对象,在大量操作时可能导致性能问题和内存浪费线程安全但性能较低,非线程安全但性能StringBuffer StringBuilder更高,单线程环境首选StringBuilder字符串操作是程序中最常见的操作之一了解的不可变性及其影响对于编写高效代码至关重要在需要频繁修改字符串的场景(如循环中拼Java String接、构建大字符串等),应使用而非连接操作,以显著提升性能StringBuilder String类提供了丰富的方法如、、等,用于字符串处理对有特殊优化,包括字符串常量池机制,可以在String substringindexOf replaceJVM String一定程度上降低内存占用包装类与自动装箱基本类型包装类大小默认值boolean Boolean1位falsechar Character16位\u0000byte Byte8位0short Short16位0int Integer32位0long Long64位0Lfloat Float32位
0.0fdouble Double64位
0.0d包装类将基本数据类型封装成对象,使其能够参与对象操作,如存储在集合中或作为泛型类型参数Java5引入的自动装箱/拆箱功能大大简化了代码//自动装箱Integer num=100;//自动将int装箱为Integer//自动拆箱int value=num;//自动将Integer拆箱为int包装类还提供了有用的工具方法和常量,如Integer.parseInt、Double.MAX_VALUE等使用时需注意null值问题(拆箱null会导致NullPointerException)以及==和equals的区别Integer缓存机制使得-128到127范围内的Integer对象被缓存,这可能导致令人困惑的相等性结果日期时间API传统时间API Java8APIjava.util.Date和Calendar类,设计存在缺陷,易用性和安全性较差,不推荐java.time包中的LocalDate、LocalTime、LocalDateTime等,设计更合在新代码中使用理,API更丰富,线程安全时区处理时间段计算ZonedDateTime和ZoneId提供完善的时区支持,解决复杂的国际化日期时间Period和Duration类提供日期和时间间隔的表示和计算,便于进行复杂的时间处理问题运算Java8引入的新日期时间API解决了旧API的许多问题,采用不可变类设计,线程安全且易于使用新API基于ISO标准日历系统,提供了丰富的格式化和解析功能,以及直观的日期时间计算方法与类Math Random数学运算随机数生成安全随机数Math类提供了丰富的数学函数和常量,如三角函Random类提供了生成各种类型随机数的功能创对于需要高安全性的应用,应使用数、指数函数、对数函数等这些方法都是静态的,建Random实例后,可以生成布尔值、整数、浮点java.security.SecureRandom类生成随机数,它可以直接通过类名调用,无需创建实例常用方法包数等随机值常用方法包括nextInt(随机整提供加密安全的随机数生成器,适用于生成会话ID、括Math.abs(绝对值)、Math.round(四舍数)、nextDouble(0到1之间的随机浮点数)临时密码等场景虽然性能略低于普通Random五入)、Math.max/Math.min(最大/最小Java8后也可以使用StreamAPI生成随机数流,如类,但在安全关键应用中更为合适值)、Math.pow(幂运算)和Math.sqrt(平random.ints方根)Math类提供的是确定性算法,对于相同输入总是产生相同输出而Random类则是伪随机数生成器,生成的是统计学上随机但可预测的序列Random类的默认种子基于系统时间,可以通过构造函数设置特定种子以生成可重复的随机序列,这在测试中特别有用集合框架概览接口接口List Set有序集合,允许重复元素,可通过索引访问无重复元素集合,常用于去重和成员检测接口接口Map Queue键值对映射,每个键唯一,高效查找队列实现,通常用于先进先出(FIFO)处理Java集合框架提供了一套完整的数据存储和操作接口与实现,弥补了数组的局限性集合框架分为Collection和Map两大体系,前者存储单个元素,后者存储键值对Java集合框架的设计基于接口和实现分离的原则,提供了灵活性和可扩展性选择合适的集合类型取决于具体需求需要高效随机访问选ArrayList,频繁插入删除选LinkedList;需要唯一元素用HashSet,需要排序用TreeSet;需要键值映射用HashMap,需要有序映射用TreeMap;需要线程安全考虑ConcurrentHashMap或Collections的同步包装方法Java8增加了StreamAPI,大大简化了集合的批量操作和函数式处理与ArrayList LinkedList操作ArrayList LinkedList随机访问O1高效On低效头部插入/删除On低效O1高效尾部插入/删除O1均摊O1高效中间插入/删除On低效On但比ArrayList快内存占用较少较多(指针开销)迭代性能较好较差(除非使用迭代器)ArrayList和LinkedList是Java中两种最常用的List实现,它们在内部结构和性能特性上有显著差异ArrayList基于动态数组实现,支持高效的随机访问,但在元素插入删除时可能需要移动大量元素;LinkedList基于双向链表实现,支持高效的元素插入删除(特别是在两端),但随机访问性能较差选择ArrayList还是LinkedList应基于应用场景频繁随机访问且插入删除不多时选择ArrayList;频繁在两端或中间插入删除元素时选择LinkedList值得注意的是,对于大多数应用场景,ArrayList的整体性能往往优于LinkedList,除非应用明确受益于LinkedList的特性这两个类都不是线程安全的,多线程环境下需要额外同步或使用线程安全的替代品如CopyOnWriteArrayList与HashSet TreeSetO1Olog n2查找时间查找时间关键方法HashSet TreeSet基于哈希表实现,提供常数时间的添加、删除和包含操作基于红黑树实现,所有操作保证logn时间复杂度实现hashCode和equals方法对HashSet至关重要HashSet和TreeSet都实现了Set接口,保证元素唯一性,但内部实现和性能特性有很大不同HashSet基于HashMap实现,不保证元素顺序,但提供最佳的性能;TreeSet基于TreeMap(红黑树)实现,保持元素的自然顺序或指定比较器的顺序,但性能略低//HashSet示例HashSet hashSet=new HashSet;hashSet.add苹果;hashSet.add香蕉;hashSet.add苹果;//重复元素,不会被添加System.out.printlnhashSet;//输出顺序不确定//TreeSet示例TreeSet treeSet=new TreeSet;treeSet.add苹果;treeSet.add香蕉;treeSet.add橙子;System.out.printlntreeSet;//按字典顺序输出对于自定义类作为Set元素,必须正确重写equals和hashCode方法以确保唯一性如果需要有序集合,可以选择TreeSet或使用LinkedHashSet(保持插入顺序)与HashMap TreeMap哈希存储原理使用哈希表存储键值对,通过哈希函数和桶机制实现高效查找HashMap树形存储结构使用红黑树存储键值对,保证键的有序性和查询效率TreeMap性能对比操作复杂度为,为,但提HashMap O1TreeMap Ologn TreeMap供有序性是中最常用的实现,基于哈希表数据结构,通过键的确定存储位置在中,进行了重要优化当哈HashMap JavaMap hashCodeJava8HashMap希冲突达到一定阈值后,桶中链表会转换为红黑树,提高大量冲突情况下的性能面试中常见的相关问题包括哈希冲突的处理机制、影响性能的因素、与的区别(线程安全性、键HashMap HashMapHashMap Hashtablenull值、性能等)、的内部实现(中使用分段锁和操作)以及的扩容机制(触发条件、过程及性能影响)实ConcurrentHashMap Java8CAS HashMap际应用中应注意选择合适的初始容量和负载因子,以平衡空间使用和时间效率泛型与类型安全泛型类泛型方法泛型类通过类型参数提供编译时类型安全,避免运行时类型转换错误泛型方法独立于泛型类,可以在普通类中定义,提供更灵活的类型参数化public classBox{public voidprintArrayE[]array{private Tcontent;for Eelement:array{System.out.printlnelement;public voidsetT content{}this.content=content;}}public Tget{return content;}}泛型通配符通配符提供了更灵活的类型约束,表示未知类型,可以添加上下界限定//上界通配符void processElementsListlist{//只能读取元素,不能添加}//下界通配符void addElementsListlist{//可以添加Integer或其子类的元素}泛型是Java5引入的重要特性,解决了早期Java中类型转换的安全性问题和代码复用困难泛型通过在编译时进行类型检查,避免了运行时的ClassCastException异常,同时减少了显式类型转换的需要Java的泛型实现使用了类型擦除机制,这意味着泛型信息在运行时被擦除这种设计有助于与旧代码兼容,但也带来了一些限制,比如不能创建泛型数组、不能使用基本类型作为类型参数等了解这些限制有助于更有效地使用泛型,避免常见陷阱增强型循环foreach传统循环增强型循环//数组传统循环//数组增强循环for inti=0;iarray.length;i++{for intitem:array{System.out.printlnarray[i];System.out.printlnitem;}}//集合传统循环//集合增强循环for Iteratorit=list.iterator;for String item:list{it.hasNext;{System.out.printlnitem;Stringitem=it.next;}System.out.printlnitem;}//Lambda表达式(Java8+)list.forEachitem-System.out.printlnitem;增强型for循环(foreach)是Java5引入的语法糖,简化了数组和实现Iterable接口的集合类的遍历它内部使用迭代器实现,语法更简洁,代码可读性更强需要注意的是,增强型for循环不能用于修改集合元素(会导致ConcurrentModificationException),也无法获取当前索引Java8引入的Lambda表达式和Stream API进一步简化了集合操作使用forEach方法和Lambda表达式可以用函数式风格遍历集合,StreamAPI则提供了更丰富的数据处理操作如过滤、映射、归约等这些现代特性使代码更简洁,更易于并行化,推荐在新代码中使用异常体系结构Error严重问题,通常无法恢复Exception程序异常,可以处理的问题Throwable所有异常和错误的基类的异常体系分为三层结构顶层是类,它有两个主要子类和表示严重的系统问题,如Java ThrowableError ExceptionError、等,这类错误通常无法在程序中恢复表示程序可以处理的异常情况,又分为受检异常OutOfMemoryError StackOverflowErrorException()和非受检异常()Checked ExceptionUnchecked Exception受检异常是的直接子类,在编译时必须处理(或声明),如、等非受检异常是Exception try-catch throwsIOException SQLException及其子类,编译器不强制处理,包括、等良好的异常处RuntimeException NullPointerExceptionArrayIndexOutOfBoundsException理策略应该区分这两类异常受检异常通常用于可预见且恢复的问题,而非受检异常通常表示程序逻辑错误,最好通过防御性编程避免机制try-catch-finallytry-with-resources块finallyJava7引入的语法,自动管理资源关闭,实现AutoCloseable接口的资源可以在try语句头部基本结构try-catch无论异常是否发生,finally块中的代码都会执行,常用于释放资源,确保清理代码一定运行声明,会自动关闭try块包含可能抛出异常的代码,catch块捕获并处理特定类型的异常,可以有多个catch块处理不同异常类型异常处理是健壮程序的关键部分典型的异常处理模式如下//传统方式try{//可能抛出异常的代码FileInputStream file=new FileInputStreamexample.txt;//处理文件...}catch FileNotFoundExceptione{//处理特定异常System.err.println文件未找到:+e.getMessage;}catch IOExceptione{//处理更一般的异常System.err.printlnIO错误:+e.getMessage;}finally{//无论如何都会执行的清理代码if file!=null{try{file.close;}catch IOExceptione{//处理关闭时可能的异常}}}//Java7+try-with-resourcestry FileInputStreamfile=new FileInputStreamexample.txt{//处理文件...}catch IOExceptione{//处理异常System.err.printlnIO错误:+e.getMessage;}自定义异常类继承选择根据需求选择继承Exception(受检异常)或RuntimeException(非受检异常)构造方法至少提供默认构造器和带消息的构造器,通常也提供带原因和带消息与原因的构造器异常信息提供足够详细的异常消息,包括问题描述、可能原因和建议解决方案抛出与处理在适当的场景抛出自定义异常,并在相应层次捕获处理自定义异常类是设计良好异常处理机制的重要部分,能够更精确地表达应用程序特定的错误情况一个典型的自定义异常类示例public classBusinessException extendsException{//错误代码private finalint errorCode;//构造方法public BusinessExceptionStringmessage{supermessage;this.errorCode=0;}public BusinessExceptionStringmessage,int errorCode{supermessage;this.errorCode=errorCode;}public BusinessExceptionStringmessage,Throwable cause{supermessage,cause;this.errorCode=0;}//获取错误代码public intgetErrorCode{return errorCode;}}流体系概述IO。
个人认证
优秀文档
获得点赞 0