方法的可变参数(int…args)
(1)基本特征
底层通过数组实现;
方法内部的可变参数可以直接作为数组操作;
调用方法时,可以传递多个参数、一个数组或一个null。
一个参数表只能有一个变量参数,只能写在最后;
(2)变量参数对方法重载的影响
数组参数方法和变量参数方法不能共存;
空参数方法和可变参数方法可以共存。当没有传递参数时,默认情况下调用null参数方法(如果子类没有父类)。如果没有空参数,将调用变量参数方法。
参数列表,如(字符串…(字符串字符串,字符串…strs)、(stringstr)和(Stringstr,String…strs2)可以共存,只是为了区分传递方法参数时的麻烦。
3.关于构造方法(用于初始化对象)
是一种特殊的方法。方法名与类名相同,没有返回值声明(实际上会返回对象)。它可以为空或包含参数。
在不编写构造函数的情况下,JVM会自动向类中注入一个带有空参数的构造函数。如果编写了构造函数(无论有没有参数),它都不会自动生成。
很多框架在实例化类的时候都会调用null参数构造函数,所以在构造类的时候最好明确提供一个null参数构造函数,防止出错;
构造函数通常用public修饰,在少数情况下,构造函数将是私有的,以限制类对象的创建(如singletondesign);
4.关于类的初始化顺序
动词(verb的缩写)java枚举(枚举)
第六,java异常处理
1.错误和异常
(1)错误错误
运行时出错,编译器无法检查。
从错误中恢复是不可能的。
错误主要是由运行应用程序的环境引起的。
示例:java.lang.StackOverflowError,java.lang.OutOfMemoryError
(2)例外
包括检查异常(编译器已知)和未检查异常(在运行时发生,编译器未知)。
您可以通过使用try-catch块处理异常来恢复异常。
异常主要是由应用程序本身引起的。
异常:SQLException,IOException运行时异常:ArrayIndexOutOfBoundException,ClassCastException,NullPointerException
(3)个人理解:异常和错误都意味着我们的程序有问题。例外是我们可以拦截和处理的问题,而其他问题比较严重,我们不应该拦截和处理。这些都是错误。
2.检查异常和运行时异常。
两者都发生在运行时;
检查异常是编译器可以预测的异常。代码中可能会出现Check异常,编译器会强制我们处理。
运行时异常是不可预测的,因为程序的一些逻辑问题(数组索引越界等。)可能会在运行时引发;
运行时异常不是代码侵入性的,抛出运行时异常不需要在声明方法时编写抛出语句;
检查异常。如果不需要try-catch,则需要从发生异常的方法向顶级调用方法编写抛出语句。
3.try-catch-finally语句块
如果发生异常,在try的语句块中,异常后的语句将被跳过;
try-catch-finally后有语句,不管有没有异常都会执行(前提是没有返回);之前);
finally中语句的执行时间是在返回之前。最好最后不要返回,因为它可能会覆盖try-catch中的返回;
4.为什么需要自定义异常?
统一外部异常的显示方式,可以隐藏底层异常,更安全,异常信息更直观。
系统中的一些错误符合Java语法,但不符合我们项目的业务逻辑,所以我们需要使用自定义异常来处理它们。
6.java中的异常链
异常链是一种面向对象的编程技术,指的是将捕获到的异常包装成新的异常并再次抛出的异常处理方法。原始异常被保存为新异常的属性(如原因)。
将捕获到的异常包装成新的异常,一层一层的包装,就像一个连锁反应,一个导致另一个,这样底层的异常信息也可以从顶层抛出的异常中获取(getCause方法);
异常链的意义在于,一个方法应该抛出在同一抽象层次上定义的异常,同时不应该丢弃较低层次的异常信息。
异常需要封装和传输。我们在开发系统的时候,不应该“吞下”异常,也不应该“赤裸裸地抛出异常”。封装后要抛出,通过异常链传递,这样可以让系统更加健壮友好。
Java高级*
一、注释(@界面)
1.注释的本质:
java语言中有四种类型,即类、枚举、接口和注释(@interface)。
annotation的本质是一个继承了Annotation接口的特殊接口,可以用来关联类、方法、成员变量等的任何信息。
2.注释和元数据
元数据是指用于描述数据的数据,具体是描述代码之间的关系或代码与其他资源(如数据库表)之间的内部关系的数据;
各种框架的配置文件(通常是xml文件)用于描述元数据,但其缺点是与描述的文件分离,不利于一致性维护。
注释也是一种用于描述元数据的形式。这种方式使得元数据和所描述的对象紧密结合,有利于一致性维护。缺点是耦合度较高。
3.注释分类
(1)JDK内置系统注释
@Override:用于修改此方法覆盖父类的方法,不满足重写规则会报错;
@已弃用:用于修饰过时的方法。不推荐这种批注装饰方式;
@suppresswarnings:用于通知java编译器禁止特定的编译警告,有很多可选项(all,unused);
(2)元注释:是描述其他注释的注释。
@Target:描述注释的动作对象(ElementType。字段)
@Retention:描述注释的生命周期(RetentionPolicy。RUNTIME)
@文档化:支持javadoc等工具的文档化;
@继承:注释可以被子类继承;
(3)自定义标注:标注参数用方法描述(方法名为参数名,返回值类型为参数类型,默认指定默认值)
4.通过反射使用注释。
反射的基本过程:获取类文件对象(字节码对象)——通过字节码对象方法获取Field和方法——通过这些对象的api进行相关操作;
反射获取注释的前提是注释的生命周期必须是运行时,反射的Field和Method实际上是AnnotatedElement接口的实现类,提供api操作注释。
常用操作注意事项的API如下:
第二,java反射和动态代理
1.反思:本质是通过字节码对象解构类,获取类的属性和方法,从而对类进行一些特殊的操作。
反射的核心是获取类文件对象:Class.forName(“完全限定名”)-Java.io.printstream.class-“foo”。getclass();
通过反射创建实例:可以通过类或构造函数的newinstance方法创建对象;
类文件对象有相应的api来获取字段、方法和构造函数;阶级的;甚至是可以访问类的私有成员;
2.动态代理
(1)静态代理-动态代理
代理模式的实现:要么代理对象和被访问者通过继承拥有相同的方法,要么实现接口来实现这个目标;
静态代理:代理的类始终存在,会使系统臃肿,难以维护;
动态:代理类并不总是存在的。访问时动态创建,访问后自动销毁,可以大大节省资源。
(2)动态代理核心应用编程接口
核心类:InvocationHandler和Proxy;
核心方法:代理类的newProxyInstance方法和InvocationHandler的invoke(类加载器、接口、处理程序);
第三,java泛型
1.泛型的本质:java类型的参数化增强了java语言的动态性,使得编写适合各种类型的通用代码成为可能。
2.泛型应用:泛型接口、泛型类、泛型方法(一般使用泛型方法,泛型类不宜轻易使用,有利于定义泛型化的范围)
3.泛型擦除:泛型只存在于编译期,编译后的类文件在反编译后看不到泛型(伪泛型,目的是兼容之前没有泛型的版本)。
4.擦除补偿
(1)擦除引起的问题:以下操作无法编译,在泛型类和泛型方法内部,泛型相当于一个对象,某个类特有的方法无法调用。
if(objinstanceofT);
Tt=新T();
T[]ts=新的T[10];
(2)解决方案:
方法的Instance可以被类对象的isInstance方法代替;
的实例也可以由类对象的新实例创建;如果没有参数构造,也可以通过反射获得构造函数,并由构造函数的newInstance方法创建。也可以用工厂来创建;
泛型数组的创建可以直接用ArrayList代替(底层用数组实现);如果要使用数组,可以通过反射包中数组类的newInstance方法创建;
5.通用边界
有了这个定义,Generator可以在泛型类内部调用Apple类的唯一方法,但实际上这可以通过java的多态性来实现,而无需使用泛型。
在上面的定义中,您只能使用extends而不能使用super,因为向上转换是自动的,而向下转换需要强制执行;
6.通配符和上下限:上限
(1)1)PECS规则(生产者扩展,消费者超级)的总结
如果想从集合中读取E类型的数据,又写不出来,可以用?扩展通配符;
如果要从集合中写入E类型的数据,并且不需要读取,可以使用?超级通配符;
如果你想保存和检索,那么不要使用任何通配符;
(2)原则:列表
意思是它有一个水果的子类类型,但是不可能确定它是水果的哪个子类,所以里面的add元素会报错(null除外);
get方法正常使用。因为无论什么子类都可以转换成水果,可以直接被水果接受。
contains和indexOf方法可以正常工作,因为它们的参数是Object类型,与泛型无关,所以可以使用。
(3)原则:列表
意思是有苹果的父类列表,无法确定是哪个父类,所以无法添加苹果的父类类型;
你可以给它添加苹果的子类,因为无论你添加哪个子类,它都会自动转换成苹果的父类类型。
不建议使用Get方法,但如果有必要,只能使用一个Object来接受它。
,java核心技术卷一pdf,Java核心技术卷一基础知识第10版PDF下载
转载自:https://download.csdn.net/download/zhangy1008/10343781
本站整理下载:
版权归出版社和原作者所有,链接已删除,请购买正版
用户下载说明:
电子版仅供预览,下载后24小时内务必删除,支持正版,喜欢的请购买正版书籍:
http://product.dangdang.com/24035306.html
Tips:本站所有资源均收集自互联网,分享目的仅供学习参考,资源版权归该资源的合法拥有者所有。
Tips:若本站所发布的资源侵犯到您的合法权益,请及时联系 hqteam@qq.com 删除!
暂无评论内容