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. JDKJREJVM分别是什么?

JDK:java Development Kit              java开发工具

JRE:java Runtime Environment    java运行环境

JVM:java virtual machine        java虚拟机


3.   在电脑上配置JAVA_HOMEpathclasspath三个环境变量的作用是什么?如何配置?

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(“”))表达式,当strnull时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。If(x==33 & ++y>0) y会增长,If(x==33 && ++y>0)不会增长

&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4bit位,例如,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 style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">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

switchexpr1)中,expr1只能是一个整数表达式或者枚举常量(更大字体),整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。显然,longString类型都不符合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 style="font-size:18px;"><span style="font-size:18px;">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.OverloadOverride的区别。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.errorexception的区别?

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中的集合类。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值