- 浏览: 589749 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
zhanghao1785:
jQuery jqGrid中ColModel的参数大全 -
haiyangyiba:
在实际应用中,回车提交一般需要注意的是,多次回车之间的间隔,换 ...
回车自动提交 -
fengkuangxiao6:
快捷键能写的这么详细,太棒了!
Eclipse中10个最有用的快捷键组合 -
Frank_Sun:
我的jdk版本是1.6.0.29,在finally中加retu ...
try catch finally与return的执行顺序 -
jueyue:
这个注解可以搞吗,感觉还不如放在前台
struts2校验(二):声明式验证(基于xml配置验证)(1)
=====java 基础====
1.1 面向对象四大特性
抽象(abstract,某一类事物共有的特征,但是又不能实例化)、封装(把属性和方法都包装在类里)、继承(java单一继承 extends)
、 多态(方法重载【重构】、方法重写)
1.2 java的特点
1.跨平台 2.可移植(一次编译,到处运行,当你在windows下写了代码后
你不需要改变你的代码,就可以直接放到linux下去用)
1.3Java标识符的命名规则:
1) 标识符由字母、数字、下划线“_”、美元符号“$”或者人民币符号“¥”组成,并且首字母不能是数字。
2) 不能把关键字和保留字作为标识符。
3) 标识符没有长度限制。
4) 标识符对大小写敏感。
Java编程规范:
1)类名和接口名:首字母大写,其余字母小写。如SamDoc
2)方法名和变量名:首字母小写,其余的字母大写。
如bothEyesOfDoll。
3)包名:字母全部小写。如,com.abc.dollapp。
4)常量名:采用大写形式,单词之间以下划线“_”隔开。
如DEFAULT_COLOR_DOL。
示例:private String $n; √
private String ¥n;√
private String #n; ×
private String 3n;×
1.4java垃圾回收
原理:Java的垃圾回收机制是Java虚拟机提供的能力,用于在空闲时间以不定时的方式动态回收无任何引用的对象占据的内存空间。
System.gc()
Runtime.getRuntime().gc() 上面的方法调用时用于显式通知JVM可以进行一次垃圾回收(只是简单的申请垃圾回收,垃圾回收器并不一定在接到申请后就立刻回收),但真正垃圾回收机制具体在什么时间点开始发生动作这同样是不可预料的,这和抢占式的线程在发生作用时的原理一样。
好处:垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存
回收机制:有分代复制垃圾回收和标记垃圾回收、增量垃圾回收。
需要注意的是:垃圾回收回收的是无任何引用的对象占据的内存空间而不是对象本身,很多人来我公司面试时,我都会问这个问题的,70%以上的人回答的含义是回收对象,实际上这是不正确的。
(内存泄漏是指分配出去的内存无法回收了
内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况,是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。
内存溢出是指程序要求的内存,超出了系统所能分配的范围,从而发生溢出。
内存溢是指在一个域中输入的数据超过它的要求而且没有对此作出处理引发的数据溢出问题,多余的数据就可以作为指令在计算机上运行。 )
GC是什么? 为什么要有GC?
GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。
(
GC是垃圾收集的意思(Gabage Collection),Java的垃圾回收机制是Java虚拟机提供的能力,用于在空闲时间以不定时的方式动态回收无任何引用的对象占据的内存空间。Java语言没有提供释放已分配内存的显示操作方法,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,从而防止内存泄露,有效的使用可以利用的内存。
)
对象的创建和放置都是在存储器堆栈上面进行的
1A.java垃圾回收gc和finalize的区别(gc即使垃圾回收的system.gc()功能)
Gc不能回收栈内存,而finalize 可以回收栈内存。
GC是垃圾收集,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。Java中垃圾回收机制回收的是内存不是对象。
Finalize 工原理:当垃圾收集器准备好回收对象所占用的内存空间时(而不是对象),JVM会调用这个对象的finalize方法,而且只有在下次垃圾回收过程中才会真正回收对象的内存,使用finalize可以在垃圾收集期间进行一些重要的清除工作
//原理:1、finalize()方法是Object中的方法。
2、finalize()方法会在对象被垃圾回收之前被垃圾回收器调用一次,这是Java语言的一种机制。
3、finalize()方法在任何对象上最多只会被垃圾回收器调用一次。
finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。
//
2.多态是重载( overload)和重写(override)
重载的特性:同名不同参,方法名相同,传入方法的参数不同(包括个数和类型、次序). 一般参数顺序不建议这样做, 可维护性不好!.返回类型可以相同也可以不同,因为重载是根据参数判定不是根据返回值类型。发生在同一个类中。
重写的特性:同名又同参,方法名相同,返回类型,参数均相同,必须发生在子类.
使用重载的原因:对于同一个方法也许你有不同的需求,比如铸锅,可以铝,铁或者其他金属,对于这个铸锅函数,应该统一的,如果不进行重载的话,那么有很多个函数名,一旦函数过多,记忆之类的都不好,不利于开发!
示例:
你是一个铸锅匠,专门管铸锅,你会铸铁锅,也会铸铝锅。但是无论是铸铁锅还是铝锅,都用的是一个铸锅的方法(方法),铸出来的也都是锅(返回值),所不同的就是用的原料(传入参数)不一样,客户拿来了铁,你就得铸铁锅,客户拿来了铝,你就铸铝锅,客户啥也没拿,那好吧,你就调用默认方法给他铸口空气锅。
说明:返回值可以相同可以不同,因为决定调用哪个方法的因素仅仅是传入参数的类型而不是返回值的类型
Guo zhuGuo() {
//客户啥也没拿,那你只能用空气铸锅了,这是默认方法
}
Guo zhuGuo(Tie t) {
//这个方法铸出来的是铁锅
}
Guo zhuGuo(Lv lv) {
//这个方法铸出来的是铝锅
}
3.bit 位:指二进制数中的一个位数,其值为“0”或“1”。
byte 字节:一个字节由8位二进制数组成。在计算机内部,一个字节可以表示一个数据,也可以表示一个英文字母,两个字节可以表示一个汉字。
1B=8bit
'' 单引号引的数据 是char类型的
"" 双引号引的数据 是String类型的
单引号只能引一个字符(字母、数字或者汉字都行),如char m='a';或者char m='我'或者 char m='1' 是正确的,但是char m='aa'或者char m='我们'或者 char m='11' 或者char m=''就会报错
而双引号可以引0个及其以上
char java默认的char型变量是两个字节。
4.多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?
答:多线程有两种实现方法,分别是继承Thread类与实现Runnable接口
同步的实现方面有两种,分别是synchronized,wait与notify
5.java 构造函数constructor
一般我们讲的“函数”就是“方法”;
构造函数=构造方法;
构造方法是一种特殊的方法,具有以下特点。
(1)构造方法的方法名必须与类名相同。
(2)构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。
(3)构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。(在Java中,任何变量在被使用前都必须先设置初值.Java提供了为类的成员变量赋初值的专门功能:构造方法(constructor),所以即把参数传给对象的成员变量,达到给成员变量赋值的目的)
(4)构造方法不能由编程人员调用,而要系统调用。(构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用(即在new的时候就开始执行构造函数里面的语句);而一般的方法是在程序执行到它的时候被调用的.
)
(5)一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行任何代码。
(6)构造方法可以重载,以参数的个数,类型,或排列顺序区分。
(7)构造方法不能被子类继承
new Test()
并不是单单执行了一个构造方法
它包括:
实例变量内存分配
构造方法调用
如果类没加载,还存在类装载、连接、初始化
java构造函数的执行顺序见文章:http://deony2jacob1314.iteye.com/admin/blogs/1811029
6.Servlet与JSP的区别
答:JSP和Servlet本质上都是java类。JSP编译后是"servlet类"。Servlet和JSP最主要的不同点在于:
Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。
JSP侧重于视图,Servlet主要用于控制逻辑。
编程方式不同 JSP是为了解决Servlet中相对困难的编程技术而开发的技术,因此,JSP在程序的编写方面比Servlet要容易的多,Servlet严格遵循Java语言的编程标准,而JSP则遵循脚本语言的编制标准。 4、Servlet必须在编译以后才能执行 JSP并不需要另外进行编译,JSP Container会自动完成这一工作,而Servlet在每次修改代码之后都需要编译完才能执行。 5、运行速度不同 由于JSP Container将JSP程序编译成Servlet的时候需要一些时间,所以JSP的运行速度比Servlet要慢一些,不过,如果JSP文件能毫无变化的重复使用,它在第一次以后的调用中运行速度就会和Servlet一样了,这是因为JSP Container接到请求以后会确认传递过来的JSP是否有改动,如果没有改动的话,将直接调用JSP编译过的Servlet类,并提供给客户端解释执行,如果JSP文件有所改变,JSP Container将重新将它编译成Servlet,然后再提交给客户端。
7.面向对象的特征有哪些方面
1.抽象2.继承 3.封装 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
4. 多态性:
多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
8.String是最基本的数据类型吗?
基本数据类型包括byte、int、char、long、float、double、boolean和short。
java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类
(String是不可变的,所以要对String作改动不能直接改那个String本身,而是要创建新的String,所以如果改动次数多,用String就效率不高,而StringBuffer(如果是单线程则建议用StringBuilder,不用考虑线程安全性,效率更高点。如果我们的程序是在单线程下运行,或者是不必考虑到线程同步问题,我们应该优先使用StringBuilder类;当然,如果要保证线程安全,自然非StringBuffer莫属了。)
8.1 String a = "3";
a = a + "22";
System.out.println(a);//322
源码中对String中+操作符的描述如下
引用
The Java language provides special support for the string concatenation operator ( + ), and for conversion of other objects to strings. String concatenation is implemented through the StringBuilder(or StringBuffer) class and its append method.
简单的概括下:String本身是不变的对象,但是string的+号操作符是通过StringBuilder或StringBuffer(可以通过反汇编class文件,看到使用的StringBuilder来实现的。)
=========================
以上两个方法中都有开辟(new)以及销毁堆空间的操作,打大量的string操作导致效率很低。
所以在大量操作string字符串时,StringBuilder的append方法是最好的选择)
8.2 请说明String s = null, String s = “”这两种赋值有什么区别
答:一个是没有初始化
一个是初始化了但里面没有值
9.String与StringBuffer,StringBuilder的区别。
答:String的长度是不可变的,StringBuffer的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法
StringBuffer是线程安全的,StringBuilder不是线程安全的。
(
StringBuffer可变String不可变的真正原因
String和StringBuffer都是final类,他们生成的对象在堆中都是不可变的,在他们内部都是靠属性char数组实现的,
那为什么StringBuffer可以在对象中追加字符串呢?呵呵,因为String中的char数组是finall的,也就是常量,是不可改变 的,而StringBuffer继承自抽象类AbstractStringBuilder,他的内部实现靠他的父类完 成,AbstractStringBuilder内的char数组是变量,可以用append追加
StringBuffer和StringBuilder都实现了AbstractStringBuilder抽象类,此抽象类实现Appendable接口因此可追加
(在JDK 6.0 API中StringBuilder和Stringbuff写着都继承自Object 而且在他的API中找不到AbstractStringBuilder类))
9.int 和 Integer 有什么区别
Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。
===========================================
什么是引用类型
引用类型(reference type)指向一个对象,不是原始值,指向对象的变量是引用变量。
在java里面除去基本数据类型的其它类型都是引用数据类型,自己定义的class类都是引用类型,可以像基本类型一样使用。
java数据类型图:
┏数值型━┳━整数型:byte short int long
┏基本数据类型━━┫ ┗━浮点型:float double
┃ ┣字符型:char
数据类型╋ ┗布尔型:boolean
┃ ┏类(class)
┗引用数据类型━━╋接口(interface)
┗数组(array)
java的数据类型分基本数据类型(原始数据类型)和引用数据类型;
原始类型封装类
booleanBoolean
charCharacter
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。
10.String 和StringBuffer的区别
JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。
11、null, "", String.isEmpty 的区别
null
null 关键字是表示不引用任何对象的空引用的文字值。null 是引用类型变量的默认值。那么也只有引用型的变量可以为NULL,如果 int
i=null,的话,是不可以的,因为Int是值类型的。
"" 和 String.isEmpty
这两个都是表示空字符串。只不过""理论上重新开辟内存空间,而String.isEmpty指向一处。不过优化器会优化的!
String (Java Platform SE 6)
isEmpty: Returns true if, and only if, length() is 0.
【注意】判断一个string str 是否为"",要么用 str.equals(""), 要么用str.isEmpty(), 但不能用 str=="".
12.运行时异常与一般异常有何异同?(详细见ppt)
运行时异常是unchecked exception,不必检查,编译可以通过。是程序存在逻辑错误,是程序员马虎造成的,常见的有illegalArgumentException、NullPointException、indexOutOfBoundException、classCastException
一般异常时checked exception,编译不能通过,必须捕捉,否则程序会终止。包括IOException、SQLException、FileNotFoundException
13.java中数组的长度是固定的,不能够改变。如果说有需求要经常改变长度,建议你使用list集合,将数组转换为集合的方法: List a=Arrays.asList(数组名); 注意:asList的方法参数必须是对象,所以如果你的数组是int类型的,那么需要改变为Integer类型!
String[] arr = new String[] {"1", "2"};
List list = java.util.Arrays.asList(arr);
14.说出ArrayList,Vector, LinkedList的存储性能和特性
都是可伸缩的数组,就是可以动态改变长度的数组。
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
实际应用中:ArrayList是最常用的。
16.说出Servlet的生命周期,并说出Servlet和CGI的区别。
servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。 Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。
CGI是公共网关接口(Common Gateway Interface)是HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。
)
17.Collection 和 Collections的区别。
Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
|└Set
|
|_queue
Map
├Hashtable
├HashMap
└WeakHashMap
List, Set, Map是否继承自Collection接口
答: List,Set是,Map不是
----------------------------------
介绍JAVA中的Collection FrameWork(包括如何写自己的数据结构)?
答:Collection FrameWork如下:
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)
18.&和&&的区别。
&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。
20.final, finally, finalize的区别。
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
//它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。
Java中所有类都从Object类中继承finalize()方法。//
21
作用域 当前类 同一package 子孙类 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
不写时默认为friendly
22.Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)
答:匿名的内部类是没有名字的内部类。匿名类本身就是通过继承类或者接口来实现的。但是不能再显式的extends 或者implements了
关于内部类详细见: http://deony2jacob1314.iteye.com/blog/1842666
22.1 Static Nested Class 和 Inner Class的不同
Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。内部类(Inner Class)需要在外部类实例化后才能实例化。
静态嵌套类仅能访问外部类的静态成员和方法。
23.什么时候用assert
assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。一般来说,assertion用于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion检查通常是关闭的
代码示例:
public class aClass {
public void aMethod( int value ) {
assert value >= 0;
System.out.println( "OK" );
}
public static void main( String[] args ){
aClass foo = new aClass();
System.out.print( "aClass.aMethod( 1 ): " );
foo.aMethod( 1 );
System.out.print( "aClass.aMethod( -1 ): " );
foo.aMethod( -1 );
}
}
24.String s = new String("xyz");创建了几个String Object
答:两个,一个字符对象,一个字符对象引用对象
25.Math.round(11.5)等於多少? Math.round(-11.5)等於多少
答: Math.round(11.5)==12;Math.round(-11.5)==-11;round方法返回与参数最接近的长整数,参数加1/2后求其floor
26.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错
答:short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)short s1 = 1; s1 += 1;(可以正确编译)
当使用+=、-=、*=、/=、%=、运算符对基本类型进行运算时,遵循如下规则:
• 运算符右边的数值将首先被强制转换成与运算符左边数值相同的类型,然后再执行运算,
且运算结果与运算符左边数值类型相同。
复合运算符会自动进行强制类型转换。
27.Java有没有goto
答:java中的保留字,现在没有在java中使用
(Goto仍然是保留字,不能使用它为标识符命名。
但Goto已经不被支持了。不能用。)
28.数组有没有length()这个方法? String有没有length()这个方法
答:数组没有length()这个方法,有length的属性。String有length()这个方法
private String mm;
private String m[];
public void test() {
this.mm.length();
//this.m.length(); //报错
if (this.m.length == 4) {
System.out.println("");
}
}
29.构造器Constructor是否可被override
答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading
30.是否可以继承String类
答:String类是final类故不可以继承
31.用最有效率的方法算出2乘以8等於几
答:2 << 31.2<<3表示把二进制的2左移3为,即2*2^3(2乘以2的三次方)=16;// 这种符合题意
2.8<<1表示把二进制的8左移1为,即8*2=16;// 这种根本就不是题目的意思。
3.如果你硬要用8<<1的话,那为什么不用4<<2或者16<<0呢。
4.根据题目意思当然是2<<3了。
5.如果题目问:用最有效率的方法算出8乘以2等于几?那么就是:8<<1.
32.内部类和外部类
33.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上
答:witch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 byte、 short、int、 char。long,string 都不能作用于swtich。
(swtich只能作用于byte、 short、int、 char)
34.float型float f=3.4是否正确?
答:不正确。精度不准确,应该用强制类型转换,如下所示:float f=(float)3.4 或者
float f=3.4f
(java里面的带小数点的数,默认是double类型的)
35.==和equal区别
“==”两个对象在内存中的首地址。
“equals” 比较的是对象中存放的值
之所以String、一些基本类型的封装类型(基本数据类型没有equal方法)的equals方法表示比较的是内容,是因为这些类都实现了父类的equals和hashcode方法,不过不实现的话,则调用equals方法的时候其返回的结果和"=="是一样的。
StringBuffer 和StringBuilder特殊,没有重写equal方法,所以equal也是比较地址。
对于Interger,java为了提高效率,初始化了-128--127之间的整数对象
所以在赋值在这个范围内都是同一个对象。
Integer n3 = 100000000;
Integer n4 = 100000000;
System.out.println(n3 == n4); //错误,因为数值不在范围内
36.int 和 Integer 有什么区别
答:1.Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。
,int是8种基本数据类型之一(八种数据类型:字符类型:char,布尔类型boolean以及数值类型byte、short、int、long、float、double)。integer是对int的封装。
2.声明int的变量不需要实例化。声明integer变量需要实例化。
3.当需要往ArrayList,HashMap中放东西时,像int,double这种内建类型是放不进去的,因为容器都是装object的,所以只能用Ingeger引用类型
4.对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。例如int的初始值是0
3.int和Integer都可以表示某一个数值,彼此可以相互转换
37.java中int和Integer的相互转换
int到Integer:
int a=3;
Integer A=new Integer(a);
或:
Integer A=Integer.valueOf(a);
Integer到int:
Integer A=new Integer(5);
int a=A.intValue();
至于Integer.parseInt(String str)则是将String类型转为int类型。
3.请写出Java的八种基本类型以及它们对应的包装类名称(用英文写), 包装类能够将什么转换成基本类型?
答:int----------------Integer
short--------------Short
byte---------------Byte
float---------------Float
double------------Double
long---------------Long
char---------------Character
boolean-----------Boolean
包装类能够将String转换成基本类型。
38.Java中的异常处理机制的简单原理和应用
Java异常分为java标准定义的异常和自定义异常。
标准异常时指违反了java语法规则,这里的语法规则指Java类库内置的语义检查。
所有的异常都是java.lang.Thowable的子类,继承它的分为异常Exception和错误Error.
Exception分为子类(uncheckedExcepton)RuntimeException和(checkedException)编译异常,运行时异常,不必检查,编译可以通过,而编译异常必须捕捉,否则程序会终止。
Error表示系统级别的错误和程序无需处理的。
自定义异常JAVA允许程序员扩展这种语义检查,通过继承Throwable或Exception,程序员可以创建自己的异常,定义异常方法,并自由选择在何时用throw关键字引发异常。
所有的异常都是Thowable的子类。
自定义异常详细见http://deony2jacob1314.iteye.com/blog/1849036
39.你所知道的集合类都有哪些?主要方法?
答:最常用的集合类是 List 和 Map。 List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。 List 适用于按数值索引访问元素的情形。
Map 提供了一个更通用的元素存储方法。 Map 集合类用于存储元素对(称作"键"和"值"),其中每个键映射到一个值。
Collection接口的方法:
boolean add(Object o) 向集合中加入一个对象的引用
void clear():删除集合中所有的对象,即不再持有这些对象的引用
boolean isEmpty()判断集合是否为空
boolean contains(Object o) 判断集合中是否持有特定对象的引用
Iterartor iterator()返回一个Iterator对象,可以用来遍历集合中的元素
boolean remove(Object o)从集合中删除一个对象的引用
int size() 返回集合中元素的数目
Object[] toArray() 返回一个数组,该数组中包括集合中的所有元素
详细见http://deony2jacob1314.iteye.com/blog/2159739
40.描述一下JVM加载class文件的原理机制?
JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。
41.一个".java"源文件中是否可以包括多个类?
可以的,一个“.java”源文件里面可以包含多个类,但是只允许有一个public类,并且类名必须和文件名一致
一个类中可以没有public修饰的类,public修饰的类必须和文件名一致,非public修饰的可以任意起名字。
详细见http://deony2jacob1314.iteye.com/blog/1849856
42.接口中都是抽象方法,可以用abstarct修饰么?
可以,
接口的方法默认就是public abstract
变量默认就是public static final
public interface Test {
int b = 0;
public static final int a = 0;
public abstract void aa();
}
43.举例说明this关键字的作用。
this 关键字 在一个对象中表示对象自身。
作用是,在方法体内,当局部变量名 和 属性变量名有冲突的时候 ,
我们可以通过this.属性名 来区别 局部变量。
而且一个类有多个构造函数,我们可以通过this在一个构造函数中调用另外一个构造函数。
44、简述类与类之间的四种关系并举例说明
泛化(is-a) extends 人是动物,则人继承了动物
-------------------------------------------------------
实现 implements 汽车和电动车都实现了机动车的几口
-------------------------------------------------------
关联 我和朋友
-------------------------------------------------------
依赖 客户依赖提供者
-------------------------------------------------------
聚合 公司和员工(生命周期各自独立)
-------------------------------------------------------
组合 人和大脑(拥有共同的生命周期即整体生命周期的结束也以
意味着部分生命周期的结束)
http://deony2jacob1314.iteye.com/blog/2160349
45.举例说明getter和setter方法的目的和作用。
答 :取值 设置 ,getter and setter 方法的目的是保护对象的属性变量。
比如,当我们需要让外界只有读的权限而没有修改的权限,我们可以吧setter方法设置为private。
而且有些属性我们在调用方法的时候可以对属性进行预处理,如初始化。
46、说明基本数据类型与引用类型的差别。
Java 提供两种不同的类型:引用类型和原始类型(或内置类型)
1.声明基本数据类型int的变量不需要实例化,声明integer变量需要实例化。
2.当需要往ArrayList,HashMap中放东西时,像基本数据类型int,double这种内建类型是放不进去的,因为容器都是装object的,所以只能用Ingeger引用类型
3.对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。例如int的初始值是0
47.1 short a = 1;
a = a + 1; 请给出程序运行结果, 并说明原因.
答:结果错误,因为short型运行时自动提升为int型,所以要进行强转。
short a = 1;
a += 1;请给出程序运行结果, 并说明原因.
答:结果正确,因为a+=1强转已经在虚拟机内部解决。
48.Java是怎样跨平台的,javac.exe,java.exe的作用是什么?
答:Java是通过Java虚拟机跨平台的,不同的平台使用不同的虚拟机,编译的Java字节码文件是相同的。
javac.exe:是用来编译Java文件的,将Java文件编译成字节码文件,再用虚拟机上运行。
java.exe:是用来解释执行Java字节码文件的。
49.2.Java的编码规范请写出四点, Java的注释有哪几种?
答:(1).文件名必须要和类名一样。
(2).必须区分大小写。
(3).括号要成对出现。
(4). 缩进。
Java的注释有三种:
第一种是 / / 注释 这种注释只注释一行
第二种是/* */注释 这种注释可以注释多行
第三种是/****/注释,文档注释
50.Java语言的基本数据类型之间可以进行类型转换,类型转换有几种转换方式?如果进行基本类型之间的类型转换,请分别举例说明,并说明类型转换时应该注意哪些地方?
答:强制类型转换、自动类型转换
short i = 0;
int m=0;
m =i+1;//自动类型转换, 遵循左大鱼吃右小鱼的原则,字母排序,l与i调换位置
i=(short) (m+i);// 强制类型转换
51.三元运算符可以表示一个简单的if else语句,将”如果a>0,a=0,否则a=1”这句描述用三元运算符”?:”来表示.
答:a = a>0?0:1;
52、编写一个程序,打印出以下图形,行数自己确定
*
***
*****
class Sjx{
public static void main(String[] args){
int a = 5;
for(int i = 1;i < a;i++){
for(int j = 1;j <= a-i;j++){
System.out.print(" ");
}
for(int k =0;k< 2 *i -1;k++ ){
System.out.print("*");
}
System.out.println();
}
}
}
53.11.months是一个代表12个月 天数的数组,请写出代码初始化这个数组,必须两种方式
答:方式一:int[] months = new int[]{31,28,31,30,31,30,31,31,30,31,30,31};
方式二:int[] months = new int[12];
months[0] = 31;
.............
.............
months[11] = 31;
数据的三种初始化形式:
**************************************************
int a[] = new int[3];
a[0] = 0;
a[1] = 1;
a[2] = 2;
**************************************************
int b[] = { 1, 2, 3 };
**************************************************
int c[] = new int[] { 1, 2, 3 };
**************************************************
54.int, char, String数组初始化后初始值分别是什么?
答:int初始化后初始值为:0。
char初始化后初始值为:''。
String初始化后初始值为:null。
55.如果访问数组中不存在的元素,会抛出什么异常信息.
答:下标越界: ArrayIndexOutOfBoundsException
56.请说说类和对象(实例)的关系
答:类是:同一个类事物进行抽象出来的框架,规定了这类事物标准.
对象是类的表现形式,是类的一个实体,需要用new 关键字去分配内存空间.
57.static 关键字的作用是什么, 它对类和对象的影响是什么, 怎么样调用static类型的变量和方法.静态代码块会在什么时候执行?
答:static 关键字的作用是静态。
影响是共享一个static数据,.调用static类型的变量和方法.只需使用 类名.变量 或者 类名.方法. 静态代码块会在类第一次加载的时候执行一次.
//静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只要程序在运行,那么这块内存就会一直存在。这样做有什么意义呢?
在Java程序里面,所有的东西都是对象,而对象的抽象就是类,对于一个类而言,如果要使用他的成员,那么普通情况下必须先实例化对象后,通过对象的引用才能够访问这些成员,但是有种情况例外,就是该成员是用static声明的
58.说明抽象类和接口的异同
抽象类 和接口 都是需要被继承/实现,自己不能直接创建对象。
不同,
(1) 抽象类中能写实现,接口不能写实现;
(2) 一个类只能继承一个抽象类,但是能实现多个接口
59.Tomcat怎么改端口?
修改Tomcat/conf/server.xml里的<Connector port=”8080″ …/>
60.当复制大量数据时,使用System.arraycopy()命令
61.三元运算符可以表示一个简单的if else语句,将”如果a>0,a=0,否则a=1”这句描述用三元运算符”?:”来表示.
答:a = a>0?0:1;
62.我要1000-9999之间的随机数,该怎么得到,请写出代码.
提示:方式一: Math.random()方法返回一个0-1之间的double类型的随机数
方式二: int[] num = {0,1,2,3,4,5,6,7,8,9},随机四个下标,将对应的数取出来,然后将值连接起来
class SuiJi{ public static void main(String[] args){ for(int i = 0; i<10000; i++){ double val = Math.random()*10000; if((int) val>1000){ System.out.println((int)val); } } } }
63.编写一个程序,打印出以下图形,行数自己确定
*
***
*****
class Sjx{ public static void main(String[] args){ int a = 5; for(int i = 1;i < a;i++){ for(int j = 1;j <= a-i;j++){ System.out.print(" "); } for(int k =0;k< 2 *i -1;k++ ){ System.out.print("*"); } System.out.println(); } } }
64..int, char, String数组初始化后初始值分别是什么?
答:int初始化后初始值为:0。
char初始化后初始值为:''。
String初始化后初始值为:null。
67.int[] a = new int[]{1,2,3};
int[] b = a;
答:a,b引用同一个地址空间,控制同一个数组, 所以a改变后对b是有影响。[/size]
http://x125521853.iteye.com/blog/655558
发表评论
-
Calendar
2015-01-21 10:52 753Calendar cal = Calendar.getIn ... -
java集合
2014-11-24 15:49 795集合简介:集合是一个类,集合大致可分为3中体系set(无序,不 ... -
java中的堆、栈、常量池
2014-11-21 16:20 770Java内存分配: 1. 寄存器:我们在程序中无法控制 2. ... -
hibernate 想忽略对象的某个属性不保存金数据库
2014-11-14 15:10 1107... -
new关键字和newInstance()
2014-02-19 14:17 495new关键字和newInstance()方法的区别: new ... -
类名.class, class.forName(), getClass()区别
2014-02-19 14:17 1211.getClass()是动态的,其余是静态的。 .clas ... -
getDeclared××× 方法和 get××× 方法的区别
2014-02-19 10:40 915Java 的 Class 类提供了很 ... -
延迟加载 lazy="true"
2013-12-10 10:16 951TpkXw.hbm.xml <property ... -
Struts2中struts.xml配置详解
2013-07-19 22:30 0package作用:使用package可以将逻辑上相关的 ... -
Struts中ActionForm的生命周期
2013-07-16 22:04 1411ActionForm有两种生命周期,一种是Request,另外 ... -
生产者和消费者
2013-07-10 15:17 1038某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模 ... -
线程池
2013-07-04 23:50 1063线程池 为什么要用线程池: 减少了创建和销毁线程的次数,每 ... -
equal 和hashcode
2013-07-04 22:40 986public static void main(String ... -
多线程实例
2013-07-04 17:18 928多线程-用JAVA写一个多线程程序,写四个线程,其中二个对一个 ... -
english interview
2013-07-01 10:30 0personal director 人事总监 exec ... -
Jsp中嵌入java代码的三种标签方式
2013-06-21 21:22 18241.表达式标签 <%= 1+1 %> ... -
jsp引入标签taglib和在web中配置的区别
2013-06-21 21:06 1504<%@taglib uri="tagLibra ... -
垃圾回收
2013-06-20 22:33 31 引言 Java的一个 ... -
HashMap遍历的两种方式
2013-06-20 10:03 959第一种: Map map = new HashMap() ... -
知识三(J2EE)
2013-05-21 16:43 9281.MVC的各个部分都有那些技术来实现?如何实现? MVC是模 ...
相关推荐
java基础知识,帮助初学者更快更好地掌握java。ppt内容具体易懂,希望对刚接触java的初学者有所帮助。
Java是一种广泛使用的面向对象的编程语言,其基础知识涵盖了多个方面,包括语法、面向对象特性、异常处理、多线程...以上只是Java基础知识的一个概述,每个话题都值得深入探讨和实践,不断学习和总结是提升技能的关键。
Java基础知识整理 Java是一种广泛应用于软件开发的编程语言,拥有丰富的基础知识体系。本文将对Java基础知识进行系统性的整理和总结,涵盖面向对象、访问控制权限、Final关键字、内部类、集合等多个方面的知识点。 ...
JAVA基础知识总结 JAVA基础知识总结 JAVA基础知识总结
Java 基础知识大全 本资源摘要信息是 Java 基础知识大全的总结,涵盖了 Java 语言的基本概念、特点、历史发展等方面的知识点。以下是本资源摘要信息的详细内容: 一、 Java 语言的特点 * 面向对象:Java 语言是...
Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案...
### Java基础知识精炼 #### 一、Java概述与发展历程 Java是一种高级编程语言,由Sun Microsystems公司的James Gosling等人于1991年开始研发,原名为Oak,旨在控制嵌入式设备如有线电视交换盒和PDA。1994年正式更名...
自己在网上找的相对好一点的java复习资料,留个纪念 。详细讲述了Java课程的知识点
java基础知识的培训ppt,对于java初学者来说可以有一些作用。
Java基础知识总结涵盖了Java程序设计语言的核心概念和常用知识点。在详细学习和总结这些知识点之前,首先需要对Java有一个整体的认识。Java是一种面向对象的编程语言,它具有跨平台的特性,即“一次编写,到处运行”...
【Java基础知识概述】 Java是一种广泛使用的高级编程语言,由Sun Microsystems公司(现已被Oracle公司收购)于1991年发起的“绿色项目”孕育而生,最初名为Oak。尽管最初的项目目标并未实现,但Java作为一种面向...
Java 基础知识总结 Java 是一种广泛使用的编程语言,由 Sun 公司的 James Gosling 等人于 1991 年开始开发。Java 有三种技术架构:JavaEE、JavaSE 和 JavaME。JavaSE 是桌面应用程序的开发基础,JavaEE 是企业环境...
这是一套Java核心技术基础使用手册,包含Java 基础核心总结、Java核心基础、Java核心知识、Java 基础面试题总结等,内含最强 Java 核心知识点整理及思维导图,需要的朋友可下载试试! Java是一门编程语言,Java发展...
Java基础知识学习:包括JVM虚拟机、对象模型等Java基础知识代码案例Java基础知识学习:包括JVM虚拟机、对象模型等Java基础知识代码案例Java基础知识学习:包括JVM虚拟机、对象模型等Java基础知识代码案例Java基础...
Java基础知识总结 一些的基础知识 适合初学者和回顾以前的知识
java基础知识点总结,适合面试前过一遍,有利于对知识进行巩固
java基础理论知识串讲java基础理论知识串讲
Java 基础知识总结是 Java 程序员不可或缺的一部分,本总结将涵盖 Java 的基础知识,包括 Java 概述、Java 语法基础、变量、数据类型、运算符、控制语句、方法、数组、继承、多态、接口、异常、IO 流等。 一、Java ...