java,
java,
javaSE基础知识点归纳总结
即将出去找工作了,在此将一些相关的技术面试题在此整理,一方面自己复习哈相关的知识点,另一方面,与大家一起分享....
1.javaSE是什么?
java2开始,将其版本分为三个:
javaSE:Java2 Platform Standard Edition : Java 2平台标准版,即javaSE,适用于桌面系统
javaEE: Java2 Platform Enterprise Edition:Java 2平台企业版,即Java EE 主要用于创建服务器和客户端的应用 (即web)
JavaME:Java2 Platform Micro Edition,Java2平台Micro版 即JavaME:主要 适用于小型设备和智能卡
2. JDK,JRE,JVM分别是什么?
JDK:java Development Kit java开发工具
JRE:java Runtime Environment java运行环境
JVM:java virtual machine java虚拟机
3. 在电脑上配置JAVA_HOME,path,classpath三个环境变量的作用是什么?如何配置?
Java_home:指定jdk的安装目录
如:JAVA_HOME:D:\ProgramFiles\Java\jdk1.7.0_25
Eclipse/Tomcat等软件就是通过java_home来找到并使用安装好的jdk(即供运行Java的程序使用)
Path:指定命令搜索路径,在命令行下面执行javac编译java程序时,系统会到path变量所指定的路径中查找看是否能找到相应的命令程序。我们将jdk安装目录下的bin目录增加到path变量中,(bin目录中包含经常要用的可执行文件如Java/javac/javadoc等),设置好path变量后,可以在任何目录下执行Java/javac等工具了
Path:%JAVA_HOME%\bin;
Classpath:用来指定类搜索路径,要使用已经编写好的类,前提当然能够找到他们,jvm就是通过classpath来寻找 .class文件。我们需要将jdk目录下的lib子目录下的dt.jar 和tools.jar设置到classpath中.
Classpath:.;%JAVA_HOME%\lib\dt.jar;% JAVA_HOME %\lib\tools.jar;
前面的”.”不能少,它代表了我们为自己的Java类建立工作路径,其他的是jdk自带的标准类库路径
4. 什么是java平台无关性?
Java源文件本被编译成.class的字节码的形式,无论在什么系统环境下,只要有java虚拟机就能运行这个字节码文件。也就是一处编写,处处执行,即java的跨平台无关性。
5.简述一个.java程序的执行过程?
a) 加载代码:
Javac(java语言编译器) 工具读取用 Java 编程语言编写的类和接口定义(.java文件),并将它们编译成字节码类文件(.class文件)。
b) 校验代码:
校验代码由字节码校验
c) Java 命令执行字节码文件
6.简述OOP的特点,java如何实现.
封装:一个类就是一个封装类,封装了属性和方法;封装的好处是隐藏了具体细节实现.
继承:java属于单根继承,都继承Object类,继承的好处就是实现了代码的重用性.
多态: 多态是指同一行为/方法在不同的对象中有不同的表现形式(重点).
7.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?
可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。
8.Java有没有goto?
goto是java中的保留字,现在没有在java中使用。
9.说说&和&&的区别,|和||的异同点。
相同点:
&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。
不同点:
&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(“”))表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。If(x==33 & ++y>0) y会增长,If(x==33 && ++y>0)不会增长
&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31 & 0x0f的结果为0x01。
|和||是或操作:
普通或(|):所有的判断条件都要执行,不管第一个条件是否满足。
短路或(||):若第一个条件为true时,那么第二个条件无论为true还是false都不执行了。
10.在JAVA中如何跳出当前的多重嵌套循环?
两种方法:
1.定义一个标号 label,在要跳出的地方,breaklabel即可
例如:ok:
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
System.out.println("i=" + i + ",j=" + j);
if(j == 5) break ok;
}
}
2.让外层的循环条件表达式的结果可以受到里层循环体代码的控制
例:要在二维数组中查找到某个数字。
<span ><span ><span ><span >int arr[][] = {{1,2,3},{4,5,6,7},{9}};
boolean found = false;
for(int i=0;i<arr.length && !found;i++)
{
for(int j=0;j<arr[i].length;j++)
{
System.out.println(“i=” + i + “,j=” + j);
if(arr[i][j] == 5)
{
found = true;
break;
}
}</span></span></span></span>
11.switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
在switch(expr1)中,expr1只能是一个整数表达式或者枚举常量(更大字体),整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。显然,long和String类型都不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中。
12.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有错吗?
对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1 时,编译器将报告需要强制转换类型的错误。
对于short s1 = 1; s1 += 1;由于+= 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。
13.char型变量中能不能存贮一个中文汉字?为什么?
char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存 储汉字啦。不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这 个特殊汉字。补充说明:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。
iso-8859-1 是一种西文编码,只支持英文,不包括汉字,一个字母占用一个字节
utf-8 :万国码,对Unicode的扩展,支持汉字,一个汉字占用三个字节
GB2312/GBK :GBK 是国标码,支持繁体和简体;GB2312支持简体
14.使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。
final StringBuffer a= new StringBuffer("stringbuffer");
a = new StringBuffer(""); -- 此语句报错,因为final 修饰变 量时,是指引用的变量不能变
/*引用变量指向的对象中的内容是可以改变的
* 执行a.append("23");通过
*/
15.=="和equals方法究竟有什么区别?
= =号比较的是对象是否相同(即地址是否相同)
Equals()比较的是对象的内容是否相等(值是否相等)
16.静态变量和实例变量的区别?
语法上:静态变量用static修饰,而实例变量不是;
程序运行如何调用:
静态变量属于全局变量,可有类直接调用,且独自分配全局空间,在堆中分配,而实例变量是属于某一对象的一个属性,必须要创建一个对象,才能通过对象调用,内存空间在栈中分配。下面这个例子就是很好的例证:
<span ><span >public class StaticVar_20150725 {
public static int staticVar = 0;
public int instanceVar = 0;
public StaticVar_20150725() {
// TODO Auto-generated constructor stub
staticVar++;
instanceVar++;
System.out.println("staticVar " + staticVar + "\n" + " instanceVar "
+ instanceVar);
}
public static void main(String[] args) {
new StaticVar_20150725();
new StaticVar_20150725();</span>
}</span>
返回的结果:
staticVar 1
instanceVar 1
staticVar 2
instanceVar 1
可看出,实例变量每次创建对象时,都只属于当前对象,而静态变量属于全局的,故在创建实例时,不会再栈中从新分配内存。
17.int和Integer的区别?/有了基本数据类型,为什么还要用封装类型?
int 是java 8 种(整型:int ,short ,long ,byte; 浮点型:float,double; 逻辑型:boolean;字符型:char)基本数据类型之 一,java提供了Integer为int的封装类型,那么问题来了,有了基本数据类型,为什么还要用封装数据类型呢?
别急,接着往下看,你将知道答案:
1.基本数据类型是按值传递,而封装数据类型是按引用(地址)传递。---在实际应用中,这便决定了封装数据类型存在的必要性。
2.基本数据类型在堆栈(就是栈,官方为堆栈,绕晕了不知多少人)中创建,对象在堆中创建,但对象的引用在栈中创建。
3.基本数据类型的默认值和封装数据类型不一样,int 默认为0 ,Integer 默认为 null,根据此我们若要知道没有考试和考试为0分的同学,则只能用Integer。---即用封装数据类型可以判断是否赋值。
18.Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
Overload 即重载,Override 即覆盖/重写的意思。
Overload表示一个类中有多个方法名相同的方法,但这些方法的参数不一样(参数类型,参数数量,参数顺序);
Override表示子类中的方法名和父类一样,只是具体的实现细节不一样,实现的功能有可能改变了。(这就是实现多态的原因)。
Overload注意:
1、在使用重载时只能通过不同的参数样式。例如,不同的参数类型,不同的参数个数,不同的参数顺序(当然,同一方法内的几个参数类型必须不一样,例如可以是fun(int,float),但是不能为fun(int,int));
2、不能通过访问权限、返回类型、抛出的异常进行重载;
3、方法的异常类型和数目不会对重载造成影响;
4、对于继承来说,如果某一方法在父类中是访问权限是priavte,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。
Overrride注意:
1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;
2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;
3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;
4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
对于 Overloaded的方法是否可以改变返回值的类型?这个问题的本质是在问返回值类型的不同,是否是可认为是重载,答案是不行的。因为我们在写某个方法时,可以不给返回类型,在给了返回类型,和没给返回类型的方法都调用时,机器并不知道,程序员想调用那个方法,故这样设计是不合理的。
19.简述 try 、catch、throw 、throws、finally关键字在异常中的作用。
try :保护代码,当出现异常时,try代码块中的代码不在执行 Catch:捕获异常,当try中出现异常时,catch负责捕获异常,处理异常
Throw:抛出异常
Throws:产生异常
Finally:无论是否出现异常,finally中的代码都会执行
20.什么是构造方法?有什么特点和作用?
构造方法是没有返回值,方法名和类名一样;若我们没有写,在创建类的实例时,系统会自动生成一个无参的构造 方法;若我们指定了构造方法(带参是否都行),系统便不再生成默认的构造方法。
作用:用于初始化对象。
21. 什么样的标识符是合法的?
a) 由字母,数字,_和$组成,长度不限。其中字母可以是大小写,数字是0~9;
b) 标识符的第一个字符不能是数字;
c) 标识符区分大小写;
d) 标识符不能包含空格;
22. 什么是隐式类型转换?什么是显示类型转换?
a) 将占位数少的类型赋值給占位数多的类型时,java自动使用隐式转换;
b) 当把在级别高的变量的值赋给级别低的变量时,必须使用显示类型转换运算;
23. while和do … while的区别?
while 循环要先进行条件判断,条件满足才执行; do while 不管条件是否满足,都先执行一次;故do while 最少都要执行一次;
24.Stack和heap的区别?
1)stack 是栈,heap 是堆; 2)stack 由系统自动分配内存,而heap由程序员手动分配内存(每次 new 新对象时,就是在分配堆内存)3)stack 的容量有限,heap的容量很大
25.接口和抽象类的区别?
抽象类用abstract 关键字修饰,接口用interface修饰;
接口是抽象类抽象的抽象(具体表现在接口中的所有的方法都是抽象的,所有的变量都是全局变量)。
语法上的区别:
1.抽象类里可以有构造方法,而接口里不能有构造方法。
2.抽象类中能有普通成员变量,而接口中不能有普通成员变量。
3.一个类只能继承一个抽象类,但可以实现多个接口。
4.抽象类中可以包含非抽象的方法,而接口中必须都是抽象方法[默认为public abstract 故在定义接口时可以省略这两个关键字,但在实现时必须用public修饰 ,因为实现的范围不能比原来的范围更窄]。
5.抽象类中可以包含静态方法,但接口中不能包含静态方法。
[静态方法是使用公共内存空间的,就是说所有对象都可以直接引用,不需要创建对象再使用该方法]。
应用上:
接口更多的是在系统框架设计方法发挥作用,主要定义模块之间的通信,而抽象类在代码实现方面发挥作用,可以实现代码的重用。
26.error和exception的区别?
error表示不是不可能解决,只是很困难的一种情况,比如说内存溢出等,不可能指望程序自动解决;
exception表示只要程序正常运行,就不会发生的情况。
27.String ,StringBuilder,StringBuffer 的区别?
String是操作不可变数据类型(赋值后就不变了);
单线程操作大量数据用StringBuilder(线程不安全)
多线程操作大量数据用StringBuffer(线程安全)
但StringBuilder比StringBuffer的效率更高
28.java中的引用和c语言中的指针有什么区别?
引用是更安全的指针;
java中引用不允许进行数学运算,是得不到真实的内存地址的(hashcode 只是内存地址在jvm中的映射,不是真实的内存地址);
C语言中的指针 可以指向内存中的任何位置,得到的是真实的内存地址。
29.简述序列化和反序列化。
序列化是将对象转换为二进制信息在磁盘上或网络上进行传输;
反序列化就是将二进制信息还原成原来的对象;
序列化通过ObjectInputstream实现,反序列化通过ObjectOutputstream实现
30.java的三大特性。
封装:给对象提供了隐藏内部特性和行为的能力,对象提供了一些能够更改内部数据的方法来更改内部数据,在java中,有四种修饰符:public ,private,protected,default.
同类中 子类 异包子类 异包
——————————————————————————————————
public
√ √ √ √
private √
protected √
√
default √ √√
———————————————————————————————————
继承:继承给对象提供从基类获取属性和方法的能力,这样提高的代码的可重用性。在java中只支持单继承(一个 类只能继承一个基类/父类)。
多态:指呈现多种形态或形式的能力;指方法具有相同的名称,但根据自身的需求,方法的具体实现不相同。
接口的功能就是实现了多态这一特性
31.abstract class和interface的区别?
声明一个方法而不去实现它的类叫做抽象类,它用于要创建一个需要体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类中的方法。当然,抽象类中可以存在非抽象的方法(即可以存在已实现的方法),子类在继承抽象类时必须将里面的方法全部实现,不然该子类也是一个抽象类。
接口是抽象类的抽象,接口中的方法全都抽象的(只是声明,没有实现)。接口中的成员变量只能定义为 static final 类型。
32.简述java反射机制。
其实看到这个问题的时候,自己想到几点:什么是反射?java中为什么要用反射?用了它有什么好处?根据这三点,分别找到了如下的答案:
有这么一个要求:在java运行时,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法?我猜你肯定也会知道答案是肯定的,这个要求就可以根据java反射机制来实现。现在,我们一起来揭露java反射机制的神秘面纱:
1.java反射的定义:jAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制(此句话你可在任何它的定义中找到)。
PS:个人感觉说了这么多,所谓的反射机制就是在java运行时的环境中,你可以通过反射机制,查看每一个类的属性和方法,当然也可更改它的属性和方法。
2.为什么要用反射机制?/用了它有什么好处?
要回答这个问题之前,我们来看看java反射机制有什么功能。
1.在运行时判断任意一个对象所属的类。
2.在运行时构造任意一个类的对象。
3.在运行时判断任意一个类所具有的成员变量和方法。
4.在运行时调用任意一个对象的方法。
根据它的功能和每个功能的要求,便可知道上述问题的。
33.java中的集合类。
相关文章
- 暂无相关文章
用户点评