Java基础
1.面向对象的特点
抽象、继承、封装、多态
2.基本类型和封装类
基本类型 封装类
int Integer
boolean Boolean
char Character
byte Byte
short Short
long Long
float Float
double Double
引用类型和原始类型具有不同的特征和用法,包括:大小和速度问题,这种类型以哪种类型的数据结构存储。当引用类型和原始类型用作某个类的实例数据时,制定的缺省值,对象应用实例变量的缺省值为null,而原始类型实例变量的缺省值与它们的类型有关。
3.final、finally、finalize
final是一种声明属性,作用与类、方法和变量,final修饰的变量的值不能够再改变,final修饰的方面不能被覆盖,final修饰的类不能被继承。
finally是异常处理语句的一部分,表示总是执行。
finalize是object类的一个保护子方法,在垃圾回收器回收该对象空间前调用此方法,此方法可被覆盖,指定一个对象被撤消前必须执行的操作 。如文件关闭等。
4.heap 和stack 的区别
| Heap(堆) | Stack(栈) |
JVM中的功能 | 内存数据区 | 内存指令区 |
存储数据 | 对象实例 | 基本数据类型, 指令代码,常量,对象的引用地址 |
5.基本数据类型
byte,int,long,double,char,boolean,float,short
String不是基本数据类型,java.util.String是final类,不能被继承。
6.GC
GC是垃圾回收的意思(gabage collection),java的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,java语言没有提供释放已分配内存的显式操作方法。
7.线程的start和run方法
启动一个线程用start()方法,使线程处于可运行的状态,这意味着它可以由JVM(java虚拟机)来调度和执行,这并不意味着线程就会立即执行。而run()方法在执行完成后产生必须退出的标志来停止一个线程。
8.构造器Constructor是否能被override
构造器(Constructor)不能被继承,因此不能重写override,但是可以被重载overload。
9.对象作为参数传递给一个方法,是传值还是传引用?
java语言中只有值传递参数,对一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用(地址),对象的内容可以在被调用的方法中改变,但对象的引用(地址)是永远改变不了的。
10.垃圾回收机制的有点
垃圾回收机制使得java程序员在编写程序的时候不用再考虑内存管理,java中的对象不再有“作用域”的概念,只是对象的引用才有“作用域”,垃圾回收可以有效的防止内存泄漏,有效的使用可以使用的内存。
11.char能否存储一个汉字
能,因为java中以unicode编码,一个char占16个字节,存放一个中文是没有问题的。
12.匿名内部类(Anonymous Inner Class)是否可继承其他类,是否可以实现接口?
可以继承其他类或完成其他接口。
13.HashMap和HashTable的区别
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。
14.sleep()和wait()的区别?
sleep是线程类(Thread)的方法。导致此线程暂停执行一段时间,把执行的机会给其他线程,但是监控状态依然保持,到时候后自动恢复,调用sleep不会释放对象锁。
wait是object类的方法,对此对象发出wait方法导致本线程放弃对象锁,进入等待此对象的锁定池,只有针对此对象发出notify方法(或者notifyAll)后,本线程才进入对象锁定池准备获得对象锁进入运行状态。
15.数组有没有length()这个方法?String有没有length()这个方法?
数组没有length()方法,当时有length变量。String有length()方法。
16.Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
方法的重写OVerriding和重载Overloading是Java多态的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现,
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Voerriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被屏蔽了。如果在一个类中定义了多个同名的方法,他们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading), Overloading的方法可以改变返回值的类型。
17.Set里的元素是不是能够重复的,那么用什么方法来区分重复与否呢?使用==还是用equals()?他们有什么区别?
Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()方法是判断两个Set是否相等。
equals()和==方法决定引用值是否指向同一个对象,equals()在类中被覆盖,为的是当两个的对象的内容和类型相配的话,返回真值。
18.error和exception 的区别
error表示恢复不是不可能,但是很困难的情况下的一种严重问题。比如说内存溢出,不可能指望程序能处理的情况。
exception表示一种设计或实现问题。也就是说,他表示如果程序运行正常,是不会发生的情况。
19.abstract class和interface有什么区别?(抽象类与接口的区别)
声明方法的存在而不去实现它们的类被叫做抽象类(abstrct class)。它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不在该类中实现全部方法,abstract类不能创建实例。可以创建一个变量,其类型就是一个抽象类,并让他指向具体的子类的一个实例。不能有抽象构造函数或抽象静态方法,abstract类的子类必须为它的父类中的所有抽象方法提供实现,否则它也必须是抽象类。
接口(interface)是抽象类的变体,在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口只可以定义static final成员变量。instanceof运算符可以用来判定某对象的类是否实现了接口。
20.abstract的method是否可同时是static,是否可以是同时是native,是否同时是synchronized?
都不可以。
21.xml有哪些解析技术?区别是什么?
有DOM,SAX等
DOM:处理大型文件时其性能下降的非常厉害,这个问题是由DOM的树结构造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对xml的随机访问
SAX:SAX是事件驱动型的xml解析方式,他顺序的读取xml文件,不需要自已全部装载正文件,当遇到文档开头,文档结束,或者标签开头与标签结束时,他会触发一个事件,通过在其回调事件中写入处理代码来处理xml文件,适合对xml的顺序访问。