你的位置:首页 > Java教程

[Java教程]java基础部分


1.java的基本数据类型及所占的字节

boolen  8位  1个字节

byte 8位 1个字节

char 16位 2个字节

short 16位 2个字节

int 32位 4个字

float 32位 4个字节

double 64位 8个字节

long 64位  8个字节

2.java中==和.equals的区别

==是比较内存地址也就是对象的值

equals是比较的对象的内容

3.谈谈final, finally, finalize的区别。 

①final;当类被定义为final时,该类不能被继承,因此类不能abstract 和final同时使用,当方法被定义为final时方法不能被重写 当属性被定义为final时属性的值不能被改变

②finally;在try..catch中使用,不管是否遇到异常都会进入到finally块中

③finalize;Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。 

4.Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 

匿名内部类是没有名字的类,不能继承别的类,但是可以作为接口被另一个内部类实现

5.&和&&的区别

 &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。

6.java集合的属性

 List Set 属于conction  

 6.1List(可重复值)   ->6.1.1ArrayList  [1.数组的方式存放数据,2.查询快增删慢、3.线程不安全]

                           ->6.1.2LinkList    [1.链表的方式存放数据,2.增删快,查询慢,3线程不安全]

 6.2Set(不可重复)   ->6.2.1 HashSet [1.线程不安全,2.存储是无序的,3.性能优于treeSet]

                           ->6.2.2 treeSet  [1.有升序排序功能]

 6.3Map(key value的方式)  -> 6.3.1 HashMap  [1.线程不安全,2.无序的,3.value允许为null]

                                     ->6.3.2  HashTable [线程安全 ,2.无序,3.value不允许为null]

                                     ->6.3.3  treeMap [线程不安全]

7.线程的生命周期

   ①线程的创建 也就是new一个线程对象的时候,创建一个空的线程,系统不为它分配资源

   ②可运行状态 也就是调用了start()方法,系统为线程分配资源,这时的状态并不是运行状态,只有系统为这个线程分配了CPU资源才真正运行

   ③不可运行状态  当发生下列事件【调用了sleep()方法】【调用了wait()方法】【线程的输入/输出阻塞】

   处于sleep状态的线程在指定的睡眠时间后返回可运行状态

   处于wait状态的线程需要等待对象调用notify()或者notifyAll()方法

   如果输入输出阻塞需要等待输入输出完成后

   ④ 消亡状态   线程在run方法执行完毕后就进入消亡状态

线程创建后,可通过调用setPriority()方法改变优先级。

8.Overload和Override的区别

 Overload是在同一个类中方法名称相同,通过改变参数的个数或者类型来重载

 Override是在子类继承父类,重写父类中的方法

9.error和exception有什么区别? 

   error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。
 exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

 

10.int 和 Integer 有什么区别?

  Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。原始类型封装类booleanBoolean    charCharacter  byteByte  shortShort  intInteger  longLong  floatFloat  doubleDouble引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。

11.String 和StringBuffer的区别?

  String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。

12.HashMap和Hashtable的区别。

  HashMap和Hashtable的区别。
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。
Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。

13.同步和异步有何异同,在什么情况下分别使用他们?举例说明

  如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。
当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。

14.abstract class和interface有什么区别?

  声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。

15.heap和stack有什么区别。

  栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。堆是栈的一个组成元素。

16.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上? 

  witch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。

17.当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 

  是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。

18.Java中的异常处理机制的简单原理和应用。

  当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都是java.lang.Thowable的子类。

19.描述一下JVM加载class文件的原理机制? 

  JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。

20.java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 

  字节流,字符流。字节流继承于InputStream \ OutputStream,字符流继承于InputStreamReader \ OutputStreamWriter。在java.io包中还有许多其他的流,主要是为了提高性能和使用方便

21.是否可以从一个static方法内部发出对非static方法的调用? 

  不可以,如果其中包含对象的method();不能保证对象初始化。