191、
在try语句一旦遇到异常就直接抛出执行catch语句和finally,不会继续执行try的,try-catch语句嵌套的话,会一层层往外抛出,catch都会执行。
192、!!常错整理:
基本类型:short、byte、char、int、long、float、double、boolean
其他为引用类型:String、枚举、包装类别
equals:不能用于基本类型比较,只比较引用类型对象的值
==:基本类型比较值,引用类型对象比较地址(有new xxx的就是新的地址了)
193、JVM 内存可简单分为三个区:
1、堆区(heap):用于存放所有对象,是线程共享的(注:数组也属于对象)
2、栈区(stack):用于存放基本数据类型的数据和对象的引用,是线程私有的(分为:虚拟机栈和本地方法栈)
3、方法区(method):用于存放类信息、常量、静态变量、编译后的字节码等,是线程共享的(也被称为非堆,即 None-Heap)
Java 的垃圾回收器(GC)主要针对堆区
194、
196、Java程序的种类有:
(a)内嵌于Web文件中,由浏览器来观看的_Applet
(b)可独立运行的 Application
(c)服务器端的 Servlets、
197、Queue有3种:
(1)LinkedBlockingQueue:一个基于节点链接的可选是否有界的阻塞队列,不允许null值。是一个线程安全的阻塞队列,实现了先进先出等特性。
(2)PriorityQueue:是一个无界队列,不允许null值。不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素。入队和出队的时间复杂度是O(log(n))。非线程安全。
(3)ConcurrentLinkedQueue:是一个基于链接节点的无界线程安全队列,该队列的元素遵循FIFO原则。
即LinkedBlockingQueue不一定有界,不允许null,线程安全,FIFO
PriorityQueue非线程安全,无界,不允许null,非FIFO。
ConcurrentLinkedQueue:无界、非线程安全、FIFO
198、1. 只看尖括号里边的!!明确点和范围两个概念
2. 如果尖括号里的是一个类,那么尖括号里的就是一个点,比如List,List,List
3. 如果尖括号里面带有问号,那么代表一个范围, extends A> 代表小于等于A的范围, super A>代表大于等于A的范围,>代表全部范围
4. 尖括号里的所有点之间互相赋值都是错,除非是俩相同的点;
5. 尖括号小范围赋值给大范围,对,大范围赋值给小范围,错。
如果某点包含在某个范围里,那么可以赋值,否则,不能赋值。范围不能赋值给点。
6. List>和List 是相等的,都代表最大范围
7.补充:List既是点也是范围,当表示范围时,表示最大范围
199、
ceil:向上取整,Math.ceil(11.3)的结果为12,Math.ceil(-11.6)的结果为-11;
floor:向下取整,Math.floor(11.6)的结果是11,Math.floor(-11.4)的结果-12;
round:将原来的数字加上0.5后再向下取整,所以,Math.round(11.5)的结果是12,Math.round(-11.5)的结果为-11.
200、符号的优先级排序是:'>','<','&&','||'。
201、构造函数必须与类同名,而且不能有返回类型。而方法是可以与类同名的,但是必须声明返回数据类型。
202、
类的加载顺序。
(1) 父类静态对象和静态代码块
(2) 子类静态对象和静态代码块
(3) 父类非静态对象和非静态代码块
(4) 父类构造函数
(5) 子类 非静态对象和非静态代码块
(6) 子类构造函数
其中:类中静态块按照声明顺序执行,并且(1)和(2)不需要调用new类实例的时候就执行了(意思就是在类加载到方法区的时候执行的)
按照声明顺序,第3行 执行了构造函数,输出了blockA,又执行了第9行,输出了blockB,按顺序,执行了第13行,输出了blockA
203、object调用getName()方法:包名+类名
204、
205、
206、servlet周期:加载--实例化--初始化--处理请求--销毁
init() --> 初始化;service() --> 处理请求;destory () --> 销毁(停止)
207、Java的跨平台特性是因为JVM的存在, 它可以执行.class字节码文件,而不是.java源代码。
JAVA的跨平台特性表述为“一次编译,到处运行”,JAVA程序运行在JVM上,而JVM对上屏蔽了底层操作系统差异。
208、
209、
210、
211、对比抽象类和接口:
构造方法:抽象类可以有构造方法,但不能实例化对象,接口没有构造方法
普通成员变量:抽象类中可以有,接口中没有(一定是public static final 常量)
接口中的方法可以被default和static修饰,但是!!!被修饰的方法必须有方法体,而接口中的abstract方法则不能有方法体;
单继承,多接口
212、str += 'a' 和 str +="a"都是对的,但是如果a前面加一个空格,那么只能用双引号了。代表字符串
213、对hashmap:不能保证其中元素的顺序,允许key和value为null,使用键值对的方式存储。
214、count = count++ 原理是 temp = count; count = count+1 ; count = temp; 因此count始终是0 这仅限于java 与c是不一样的
215、
216、Ant: 没有正式的约定如一个一般项目的目录结构,你必须明确的告诉 Ant 哪里去找源代码。Ant构建文件默认命名为build.xml。Ant 没有生命周期,你必须定义目标和目标之间的依赖。你必须手工为每个目标附上一个任务序列。
Maven:Maven 拥有约定,因为你遵循了约定,它已经知道你的源代码在哪里。Maven默认构建文件为pom.xml。maven有“生命周期”的概念,当你输入一个命令后,maven会执行一系列的有序的步骤,直到到达你指定的生命周期。
217、java 基本数据类型的默认值:
218、new URL()时必须捕获检查异常,但这个异常是由于字符串格式和URL不符导致的,与网址是否存在无关。URL的toString方法返回字符串,无论网址是否存在。
219、抽象类和接口都不能被实例化,抽象类有构造方法,但是是用来初始化的而不是实例化。
220、float 型: 占 4 字节,7 位有效数字
double 型:占 8 字节,15~16 位有效数字
所以比较2个float类型的值是否相等?
(1)一般都是在允许的某个范围内认为某个个浮点数相等,如有两个浮点数a、b,允许的误差范围为 1e-6,则 abs(a-b) <= 1e-6,即可认为 a 和 b 相等。
```
float a=10.55f;
float b=10.55f;
if(Math.abs(a-b)<=1e-6){
System.out.println("相等");
}else{
System.out.println("不相等");
}
```
(2)扩大再取整:比如 a=5.23、b=5.23,直接比较 a==b 有可能为 false,但是 a 和 b 都扩大一百倍,然后强制转换为 int 类型,再用 == 比较就可以了。
```
float a=5.23;
float b=5.23;
if((int)a*100)==(int)(b*100)){ 相等;}
else{ 不等}
```
float类型和“0”比较:
```
float x=0.000f;
float ep=0.000001;
if((x<=ep)&&(x>=-ep)){
输出是0;}
```
221、equals和==比较总结:
两者类型不同,直接false
==:比较基本类型:比较值;比较对象引用时(如String):比较地址
equals:比较引用时,比较值的内容
222、应用层:HTTP POP3 FTP DNS
运输层:UDP、TCP
网络层:ARP、ICMP
223、TCP:POP3 HTTP FTP Telnet SMTP
UDP:SNMP、DNS
224、线性结构:有序数据元素的集合(如线性表、栈、队列、双队列、数组、串)
非线性结构:一个结点元素可能有多个直接前驱和多个直接后继(如二维数组、多维数组、广义表、树,二叉树等)
225、定义有StringBuffer s1=new StringBuffer(10);s1.append(“1234”)
则s1.length()为 4
s1.capacity()为 10
226、程序执行到catch抛出异常,返回return,会先执行finally的操作再return,但不会再执行finally结束后的语句了。
227、
不能用list.remove(obj),原因:
228、静态变量只能在类主体中定义,不能在方法中定义。
229、对于外部类来说,只有两种修饰,public和默认(default),因为外部类放在包中,只有两种可能,包可见和包不可见。
对于内部类来说,可以有所有的修饰,因为内部类放在外部类中,与成员变量的地位一致,所以有四种可能。
230、java的“一次编写,到处运行”的跨平台性是独有的特点~
231、1、同一用户回话不同页面之间数据共享方法
(1)通过Cookie。
(2)通过隐含的表单把数据提交到下一个页面。
(3)通过ServletContext对象。
(4)通过application对象。
(5)通过文件系统或者数据库。
2、不同用户回话不同页面之间数据共享方法
(1)通过ServletContext对象。
(2)通过application对象。
(3)通过文件系统或者数据库。
232、decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。
encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码。
233、字符流是字节流根据字节流所要求的编码集解析获得的,可以理解为字符流=字节流+编码集,所以和字符流有关的类都拥有操作编码集(unicode)的能力
字节流:
InputStream/OutputStream
|-- FileInputStream (基本文件流)
|-- BufferedInputStream
|-- DataInputStream
|-- ObjectInputStream
字符流
Reader
|-- InputStreamReader (byte->char 桥梁)
|-- BufferedReader (常用)
Writer
|-- OutputStreamWriter (char->byte 桥梁)
|-- BufferedWriter
|-- PrintWriter (常用
234、final:修饰属性,属性值不可变;修饰方法,方法不可重载,但可继承。
235、java和JavaScript并没有什么子集关系。
236、Swing 是在AWT的基础上构建的一套新的图形界面系统,它提供了AWT 所能够提供的所有功能,并且用纯粹的Java代码对AWT 的功能进行了大幅度的扩充,Swing在不同的操作系统中显示相同的风格。
AWT 是基于本地方法的C/C++程序,其运行速度比较快;Swing是基于AWT 的Java程序,其运行速度比较慢。
237、执行顺序优先级:静态块>main()>构造块>构造方法
238、抽象类不能实例化。抽象类能申明为对象。java中,接口和抽象类,都可以声明为对象。
抽象类中可以有普通成员变量,接口中没有普通成员变量。
抽象类和接口中都可以包含静态成员常量。
239、json:轻量级数据交换格式,是js对象的字符串表示法
1、JsonObject:JSON对象,各种构造函数和getXX()、put(),常传入map String和bean构造JSON对象
(1)传入s:String s="{'name':'abc','age':21}; JSONObject strJson=new JSONObject(s);
(2)传入map: map.put("age",21); JSONObject strJson=new JSONObject(map);
(3)传入Bean类型:建一个Student对象, JSONObject strJson=new JSONObject(student);
2、JSONArray:JSON数组
(1)1.1 传字符串:JSONArray strJson=new JSONArray(s);
1.2 传Collection类型:JSONArray strJson=new JSONArray(list);
1.3 传Array类型1:int[] list JSONArray strJson=new JSONArray(list);
1.4 put()创建:直接将int double String 等put()
栗子:
var json={{"name":"xj","age":18},{"name":"xt","age":20}}
240、在java 中,声明一个数组时,不能直接限定数组长度,只有在创建实例化对象时,才能对给定数组长度.。
String[] s ; char c[] ; Object b[];
String a[]=new String[50];
int[][] num={{1,2}{2,3}};
241、servlet在多线程下其本身并不是线程安全的。
如果在类中定义成员变量,而在service中根据不同的线程对该成员变量进行更改,那么在并发的时候就会引起错误。最好是在方法中,定义局部变量,而不是类变量或者对象的成员变量。由于方法中的局部变量是在栈中,彼此各自都拥有独立的运行空间而不会互相干扰,因此才做到线程安全。
242、
243、volatile保证可见性,不保证原子性。针对多线程情况下出现的。当线程读取它修饰的变量时,都会强迫从主存中重新读取。
244、局部变量可以与成员变量重名,这时可用“this”来指向成员变量
245、String对String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,而不是StringBuffer;
StringBuffer每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。
246、一般用(System.in)创建InputStream对象,表示从标准输入中获取数据;
用(System.out)创建OutputStream对象,表示输出到标准输出设备中。
247、Java的跨平台是靠JVM实现的。
Java中:包(package)由一组类(class)和接口(interface)组成
248、 声明为static和transient类型的成员数据不能被串行化。因为static代表类的状态, transient代表对象的临时数据。
249、静态初始化块:
无法直接调用静态初始化块
在创建第一个实例前或引用任何静态成员之前,将自动调用静态初始化块来初始化。
静态初始化块既没有访问修饰符,也没有参数
250、Java程序的种类:Applet、Application、Servlet
251、一个完整的URL地址由协议,主机名,端口和文件四部分组成。
252、Ant和Maven都是基于Java的构建(build)工具。理论上来说,有些类似于(Unix)C中的make ,但没有make的缺陷。Ant是软件构建工具,Maven的定位是软件项目管理和理解工具。
Ant特点 :没有一个约定的目录结构 ,必须明确让ant做什么,什么时候做,然后编译,打包 �没有生命周期,必须定义目标及其实现的任务序列 �没有集成依赖管理
Maven特点 :拥有约定,知道你的代码在哪里,放到哪里去 �拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程 �只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮你处理其他事情 �拥有依赖管理,仓库管理
253、Java中的数据类型分类:
基本数据类型8种(原生类、内置类型、原始类型)、引用数据类型(数组、类、接口)
254、Web程序中,当前用户上下文信息应该保存在session对象中
【当前用户 , application能被同一个应用程序的所有用户访问,所以当前用户的信息就不宜保存在application中
session会话对象,一个会话只可能是一个用户的,生命周期默认30分钟,也可以自行定义,当前会话结束(如关闭浏览器),当前session被销毁。所以当前用户的信息应该保存在session中】
255、ServerSocket(int port) 是服务端绑定port端口,调accept()监听等待客户端连接,它返回一个连接队列中的一个socket。
Socket(InetAddress address , int port)是创建客户端连接主机的socket流,其中InetAddress是用来记录主机的类,port指定端口。
256、原子性:事务是一组不可分割的操作单元,这组单元要么同时成功要么同时失败(由DBMS的事务管理子系统来实现);
一致性:事务前后的数据完整性要保持一致(由DBMS的完整性子系统执行测试任务);
隔离性:多个用户的事务之间不要相互影响,要相互隔离(由DBMS的并发控制子系统实现);
持久性:一个事务一旦提交,那么它对数据库产生的影响就是永久的不可逆的,如果后面再回滚或者出异常,都不会影响已提交的事务(由DBMS的恢复管理子系统实现的)
257、抛InterruptedException的代表方法有:
java.lang.Object 类的 wait 方法
java.lang.Thread 类的 sleep 方法
java.lang.Thread 类的 join 方法
258、注意true,false,null, friendly,sizeof不是java的关键字,但是你不能把它们作为java标识符用。是显式常量符。
259、Panel 和 Applet 的默认布局管理器是 FlowLayout
260、关于servlet service:
doGet/doPost 则是在 javax.servlet.http.HttpServlet 中实现的;
service()是在javax.servlet.Servlet接口中定义的,根据请求类型,判断是post还是get方法提交的链接,决定是调用doGet()还是doPost()方法;
261、这个关键字常见的坑:
true、false、null都不是关键字
goto、const、是保留的关键字
262、下列声明错误的是?
A、final修饰的类为终态类,不能被继承,而 抽象类是必须被继承的才有其意义的,因此,final是不能用来修饰抽象类的。
B、 final修饰的方法为终态方法,不能被重写。而继承抽象类,必须重写其方法。
即 final不能修饰抽象类或抽象方法
C、抽象方法是仅声明,并不做实现的方法。
263、一个类,先继承,后实现
public class A extends B implements C
凡是先实现后继承的,都会编译报错。
264、已知如下的命令执行 java MyTest a b c
对于java命令,类名后面跟着的就是main函数的参数,多个参数则用空格隔开。 main方法的形参是一个string数组所以对于java mytest a b c传入的参数算是一个string数组。 即args[0]=a args[1]=b args[2]=c
265、若有定义语句: int a=10 ; double b=3.14 ; 则表达式 'A'+a+b 值的类型是(double)
因为基本类型会自动转换:int/char/byte-->int-->long-->float-->double
266、以下哪项不属于java类加载过程?B
类的加载过程:加载,验证,准备,解析,初始化
A.生成java.lang.Class对象 ===>属于加载,生成Class对象作为方法区这个类的各种数据的访问入口
B.int类型对象成员变量赋予默认值 ===>既然是对象成员,那么肯定在实例化对象后才有。在类加载的时候会赋予初值的是类变量,而非对象成员。所以不属于java类加载过程。
C.执行static块代码 ====>这个会调用。可以用反射试验。
D.类方法解析 ====>解析过程
267、能编译通过并正确运行。
因为Test类的hello方法是静态的,所以是属于类的,当实例化该类的时候,静态会被优先加载而且只加载一次,所以不受实例化new Test();影响,只要是使用到了Test类,都会加载静态hello方法!
268、stream结尾都是字节流,reader和writer结尾都是字符流
两者的区别就是读写的时候一个是按字节读写,一个是按字符。
269、java中true ,false , null非关键字也非保留字,是显式常量值不能作为保留字
const和goto是java的保留字。
java中所有的关键字都是小写的,
还有要注意true,false,null, friendly,sizeof不是java的关键字,但是你不能把它们作为java标识符用。
implements,instanceof是关键字
270、A是抢占
272、Java.awt.*只能导入awt这个包中的所有类,awt中的包中的类不会导入
导包只可以导到当前层,不可以再导入包里面的包中的类
273、两种用于多态的机制:
(1)通过子类对父类方法的覆盖实现多态
(2)利用重载来实现多态.即在同一个类中定义多个同名的不同方法来实现多态。
多态分为方法多态和引用多态。
多态指同一个实体同时具有多种形式。
概念:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。
274、可以被继承的类:
Number类、Tthread类、ClassLoader类
275、
会话跟踪是一种灵活、轻便的机制,它使Web上的状态编程变为可能。
HTTP是一种无状态协议,每当用户发出请求时,服务器就会做出响应,客户端与服务器之间的联系是离散的、非连续的。当用户在同一网站的多个页面之间转换时,根本无法确定是否是同一个客户,会话跟踪技术就可以解决这个问题。当一个客户在多个页面间切换时,服务器会保存该用户的信息。
有四种方法可以实现会话跟踪技术:URL重写、隐藏表单域、Cookie、Session。
1).隐藏表单域:,非常适合步需要大量数据存储的会话应用。
2).URL 重写:URL 可以在后面附加参数,和服务器的请求一起发送,这些参数为名字/值对。
3).Cookie:一个 Cookie 是一个小的,已命名数据元素。服务器使用 SET-Cookie 头标将它作为 HTTP
响应的一部分传送到客户端,客户端被请求保存 Cookie 值,在对同一服务器的后续请求使用一个Cookie 头标将之返回到服务器。与其它技术比较,Cookie 的一个优点是在浏览器会话结束后,甚至在客户端计算机重启后它仍可以保留其值。
4).Session:使用 setAttribute(String str,Object obj)方法将对象捆绑到一个会话
276、
intValue():把Integer对象类型 ==> int基础类型
parseInt():String ==> int基础类型
Valueof():String ==> Integer对象类型(JDK支持自动装箱拆箱)<==> int
277、
有继承关系的类的执行顺序:
1、父类静态对象、父类静态代码块(按出现顺序)
2、子类静态对象、子类静态代码块(按出现顺序)
3、父类非静态对象、父类非静态代码块
4、父类构造函数
5、子类非静态对象、子类非静态代码块
6、子类构造函数
在此题中,父类子类无静态对象、静态代码块
(1执行到A中的非静态代码块C c=new C(); 调用了 C的构造函数,输出C
278、URL u =new URL("http://www.123.com");。如果www.123.com不存在,则返回______。
http://www.123.com
279、子类可以继承父类的私有方法和数据域,只是不能直接调用。
280、forward转发,redirect重定向
forward:服务器请求资源,服务器直接访问目标地址的URL,把该URL的内容读取过来,再将内容发送给浏览器。浏览器不知道内容的来源,地址栏不变。转发页面和转发到的页面课共享request的数据。一般用于用户登录时,由角色转发到相应模块。效率较高。
redirect:服务器根据逻辑发送一个状态码,让浏览器重新去请求地址。地址栏显示新地址。不能共享数据。用于用户注销登陆时返回主页面和跳转到其他网站等。效率较低。
281、修饰类的限定范围修饰语:
```
同一个类 同一个包 子类 全局范围内
public y y y y
default y y y n
protected y y n n
private y n n n
```
java外部类:public default
java成员内部类:public protected private
java局部内部类:都可以修饰