图片-小白之家
图片-小白之家
图片-小白之家
图片-小白之家

java核心技术(卷一pdf)

方法的可变参数(int…args)

(1)基本特征

底层通过数组实现;

方法内部的可变参数可以直接作为数组操作;

调用方法时,可以传递多个参数、一个数组或一个null。

一个参数表只能有一个变量参数,只能写在最后;

(2)变量参数对方法重载的影响

数组参数方法和变量参数方法不能共存;

空参数方法和可变参数方法可以共存。当没有传递参数时,默认情况下调用null参数方法(如果子类没有父类)。如果没有空参数,将调用变量参数方法。

参数列表,如(字符串…(字符串字符串,字符串…strs)、(stringstr)和(Stringstr,String…strs2)可以共存,只是为了区分传递方法参数时的麻烦。

3.关于构造方法(用于初始化对象)

是一种特殊的方法。方法名与类名相同,没有返回值声明(实际上会返回对象)。它可以为空或包含参数。

在不编写构造函数的情况下,JVM会自动向类中注入一个带有空参数的构造函数。如果编写了构造函数(无论有没有参数),它都不会自动生成。

很多框架在实例化类的时候都会调用null参数构造函数,所以在构造类的时候最好明确提供一个null参数构造函数,防止出错;

构造函数通常用public修饰,在少数情况下,构造函数将是私有的,以限制类对象的创建(如singletondesign);
图片[1]-java核心技术(卷一pdf)-小白之家

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来接受它。
图片[2]-java核心技术(卷一pdf)-小白之家,java核心技术卷一pdf,Java核心技术卷一基础知识第10版PDF下载

转载自:https://download.csdn.net/download/zhangy1008/10343781

本站整理下载:

版权归出版社和原作者所有,链接已删除,请购买正版

用户下载说明:

电子版仅供预览,下载后24小时内务必删除,支持正版,喜欢的请购买正版书籍:

http://product.dangdang.com/24035306.html

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容

图片-小白之家
图片-小白之家