版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Java 基础复习1、数据类型相关,包装类与对应的基础类型区别,装拆箱?数据类型分为:基本数据类型和引用数据类型。基本数据类型:byte,short,char,int long float double boolean 原始类型包装类:byte Byte,short Short,char Character,int Integer,long Long,float Float,double Double,boolean Boolean包装类的默认值为null,而基础类的默认值为0,基础类型不适合作为web层的表单数据的类型。在hibernate中,将OID定义成int,在hbm映射文件
2、中设置其unsaved-value属性为0。装箱:基本数据类型转换为其对应的包装数据类型的过程。拆箱:包装数据类型转换为对应的基本数据类型的过程。int i=10;Integer x=Integer.valueOf(i);(手动装箱)Integer k=i;(自动装箱)i=Value();(手动拆箱)i=x;(自动拆箱)2、=和equals的区别?基本数据类型时,它们之间的比较是用=,比较的是它们的值。复合数据类型时,用=比较的时候,是比较他们在内存中的存放地址值。(在object中的基类定义了一个equals方法,)在没有覆写equals方法的时候,使用equals比较
3、的还是他们在内存中的存放位置的地址值,覆写了equals方法的时候,比较的是,他们存放的内容值。3、静态成员实例成员及初始化的过程 静态成员(也叫类成员)是属于类的,随着类的加载而存在,随着类的销毁而销毁,静态成员内是不能用this关键字。 实例成员(也叫对象成员)是属于对象的,随着对象的创建而存在,随着对象的销毁而销毁。初始化过程:实例成员初始化过程:默认初始化,实例初始化,初始化块,构造器。静态成员初始化过程:默认初始化,声明初始化,静态快。 静态变量和实例变量的区别? 语法上的区别:静态变量前要加static关键字,而实例变量前则不加。 程序运行时的区别: 实例变量必
4、须创建对象后才可以通过这个对象来使用。 静态变量则可以直接使用类名来引用。4、访问修饰符 public protected private同一个类 true true true同一个包 true true fals子父类 true true false不同包 true false false 5、方法传参(基本数据类型和引用数据类型)基本数据类型传参,采用的是值传递,它不会修改实参的值。引用数据类型传参,采用的是引用传递,和值传递类似,传的是引用的一份拷贝,而非引用本身。引用可以理解成java指针,它指向对象在堆里面分配的首地址。 static void a1(int i
5、) i=10; static void a2(UserInfo u) u.setUser_id("2222"); main int k =1; a1(k); UserInfo u = new UserIn
6、fo("dd","dd","ddd"); a2(u); 6、 重载和重写 重载overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同) 重写override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法。7、接口和抽象类的区别: 抽象类可以有部分实现的方法 接口的所有方法都是抽象的 抽象类可以实现接口&
7、#160;接口支持多继承 类只能继承一个类,但可以实现多个接口 接口属性默认 public static final 8、 集合,map相关问题 常见的集合有List 和 Set List接口的实现类有ArrayList,LinkedList 和vector ArrayList数组方式存储数据, 查询执行的快,增删数据慢,线程不安全 LinkedList双向链表方式实现存储,查询执行慢,增删数据快,线程不安全 Vector 数组方式存储数据,使用了synchronized关键字,实现同步,线程安全,总体性能比ArrayList差。 Set 接口下有hashSet和treeSethas
8、hSet不允许集合中有重复的值,不能保证原生的排列顺序,顺序可能会发生变化,不是同步的,集合元素可以是null,但是只能放一个null。treeSet可以确保集合元素处于排列状态,支持两种排列方式,自然排序和定制排序。 Map集合提供的是key和value的映射。Map中不能包含相同的key,每个key只能映射一个value。 Map接口的实现类有:hashMap和hashTable HashMap是Hashtable的轻量级实现(非线程安全的实现),它们都实现了Map接口。 它们的区别: 1)HashMap类没有分类或排序,它允许一个null键和多个null值。 2)Hashtable类似于
9、HashMap,但是不允许null值和null键,因为它有synchronized关键字,所以它是同步的。 3)Hashtable继承自Dictionary类,而HashMap是java1.2引进的Map 接口的一个实现。1. List,Map,Set三个接口存储元素时各有什么特点?1) List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下表)来访问List中的元素,这类似于Java的数组。2) Set是一种不包含重复元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2)=fals
10、e,Set最多有一个null元素。3) Map接口:Map没有继承Collection接口,Map提供Key到Value的映射9.异常 a.分类:一般异常和运行时异常 b.常见的一般异常和运行时异常 3种 一般异常:io文件流异常,中断异常,jdbc异常,SQLException 运行时异常:runtime exception 编译通过:ClassCastException 类型转换异常WebServiceException web服务异常ArithmeticException 算术异常IndexOutOfBoundsException 索引越界DOMException dom解析异常Null
11、PointerException 空指针数组下标越界异常,数据格式转换异常, c.异常处理技术.并解释throw throws Try catch finally 。try 块中发生异常 ,在catch块中对异常进行捕获和处理。throw:语句用在方法体内,表示抛出异常,由方法体内的语句处理; 抛出的是一个异常的实例。(一定抛出了某种异常)throws:语句用在方法声明后面,表示再抛出异常,由该方法的调用者来处理。 声明这个方法会抛出这种类型的异常。(可能性)/*Throw是抛出异常,后面接异常对象。Throws方法抛出异常的声明 Throws出现在方法函数头,而throw出现在函数体。Thr
12、ows表示出现异常的一种可能性,并不一定会发生;throw则是抛出异常,执行throw则一定抛出了某种异常。两者抛出的异常,不是由函数去处理异常,真正的处理异常由函数的上层调用处理。*/10. java特性 oop解释/java5新特性 Java特性/oop特性: (1)封装 封装是保证软件部件具有优良的模块性的基础, 封装的目标就是要实现软件部件的“高内聚、低耦合”,防止程序相互依赖性而带来的变动影响。将对象封装成一个高度自治和相对封闭的个体,对象状态(属性)由这个对象自己的行为(方法)来读取和改变。 在面向对象的编程语言中,对象是封装的最基本单位。 (2)继承 继承是子类自动共享父类数据和
13、方法的机制,这是类之间的一种关系,提高了软件的可重用性和可扩展性。 (3)多态 引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定, 即一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。 (4)抽象 抽象就是找出一些事物的相似和共性之处,然后将这些事物归为一个类 Java5新特性:泛型,枚举型,自动拆装箱,可变参数。 a.一个类文件中可以放几个类 一个类文件中可以放多个类,但只能有一个public类,并且public的类名必须与文件名一致。* b.内部类有几种 定义在方法内部、外部的,静态内部类,匿名内部类 2
14、)heap和stack有什么区别? stack(栈):stack的空间是由操作系统自由分配和释放的,stack空间有限。 heap(堆):heap的空间是手动申请和释放的,heap常用new 关键字来分配,空间大。 Java的内存分为两类,一类是栈内存,一类是堆内存。栈内存是指程序进入一个方法时,系统会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量,当这个方法结束时,分配的栈会释放,栈中的变量也随之释放。堆是与栈作用不同的内存,一般用于存放不放在当前方法栈中的那些数据,它不会随着方法的消失而消失。方法中的局部变量使用final修饰后,放在堆中,而不是栈中。 b.GC是什么?
15、 为什么要有GC? GC是垃圾收集的意思(Gabage Collection),忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,java提供的GC功能可以自动 监测对象是否超过作用域从而达到自动回收内存的目的。 c.垃圾回收的优点和原理。并考虑2种回收机制。 优点:垃圾回收可以有效的防止内存泄漏,有效的使用可以使用的内存。 原理:垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。 机制:分代复制垃圾回收,标记垃圾回收,增量垃圾回收。d.垃圾回收器的基
16、本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收? 垃圾回收器的原理:GC采用有向图的方式记录和管理堆中的所有对象。通过这种方式确定哪些对象是“可达的”,哪些对象是“不可达”。当GC确定一些对象为“不可达”时,GC就有责任回收这些内存空间。 可以。 程序员可以手动执行System.gc(),通知GC运行,但是java语言规范并不保证GC一定会执行。11. String创建几个对象的问题/StringBuffer/StringBuilder (1) String类提供了类型不可变的对象,因此每次对String类型进行改变时都相当于生成了一个新的String对象。S
17、tring类是final类故不可以继承。 (2)StringBuffers来动态构造字符数据,长度可变。(同步的,线程安全)(append/insert) String覆盖了equals方法和hashCode方法,StringBuffer没有覆盖equals方法和hashCode方法, (3)StringBuilder是一个可变的字符序列(是5.0新增的),不同步,比StringBuffer要快。 /* a.String和StringBuffer的区别: String类型和StringBuffer类型的主要性能区别其实在于String是不可变的对象,因此在每次对String类型进行改变的时候其
18、实都等同于生成了一个新的String对象,然后将指针指向新的String对象;使用StringBuffer类,每次结果都会对StringBuffer对象本身进行操作,而不是生成新的对象,再改变对象引用。b.StringBuffer和StringBuilder的区别: StringBuffer与StringBuilder两个基本上差不多,只是StringBuffer是线程安全的,可以不需要额外的同步用于多线程中。 StringBuilder是非同步的,运行于多线程中就需要使用者单独同步处理,但是速度就比StringBuffer快的多,共同点:都是可变字符序列,可以通过append、insert进
19、行字符串的操作。*/12. final, finally, finalize final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承,内部类访问局部变量必须定义成final类型。 finally是异常处理语句结构的一部分,表示总执行 finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法。 13.排序算法 三种排序法:冒泡排序,选择排序,插入排序 冒泡排序: for(int i=0;i<arr.length-1;i+) for(int j=0;j<arr.length-1-i;j+) if(arrj>arrj+1)
20、int temp=arrj; arrj=arrj+1; arrj+1=temp; for(int i=0;i<arr.length;i+) System.out.print(arri); 选择排序: for(int i=0;i<arr.length-1;i+) int minIndex=i; for(int j=i+1;j<arr.length;j+) if(arrj<arrminIndex) minIndex=j; int temp=arri; arri=arrminIndex; arrminIndex=temp; 插入排序: for(int i=1;i<arr
21、.length;i+) if(arri<arri-1) int pos=-1; for(int j=0;j<i;j+) if(arrj>arri) pos=j; break; int temp=arri; for(int k=i-1;k>=pos;k-) arrk+1=arrk; arrpos=temp; 14. 线程相关 a.什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。 b.线程和进程的区别: 线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。 c.如何实现(多)线程? 继承Thread类和实
22、现Runnable接口。d.Thread类中的start()和run()方法有什么区别? Start()方法被用来启动新创建的线程,start()内部调用了run()方法,这和直接调用run()方法的效果不一样。当你调用run()方法的时候,只会在原来的线程当中调用,没有新的线程启动。start()方法才会启动新线程。f.实现线程同步的方法?1) 有synchronized关键字的同步方法,2) 有关键字synchronized修饰的同步代码块 3) 使用特殊域变量(volatile)实现线程同步 4) 使用重入锁实现线程同步 5) 使用局部变量实现线程同步。 g.sleep()和wait()
23、有什么区别? Sleep就是正在执行的线程主动让出cpu,让cpu去执行其他的线程,等sleep指定时间过后,cpu才会回到这个线程上来继续往下执行。如果当前线程进入同步锁,sleep方法不会释放锁,即使sleep让出了cpu,但其他被同步锁挡住的线程仍无法执行。Wait是指在一个已经进入到同步锁的线程内,让自己暂时让出同步锁,以便其他正在等待此锁的线程可以得到同步锁运行。调用wait方法的线程就会解除wait状态和程序再次得到锁后继续向下运行。 15、 xml操作相关xml提供一种描述结构化数据的方法,是一种简单,与平台无关并被广泛采用的标准,xml文档可以承载各种信息. 1)xml有哪些解
24、析技术?区别是什么? 有DOM,SAX,STAX。 区别:DOM:处理大型文件时其性能下降的非常厉害,这个问题是由DOM的树结构所造成的,这种结构占内存较多,而且DOM在解析文件之前必须把整个文件装入内存,它适合对XML随机访问。SAX:不限于DOM,SAX是事件驱动型的XML解析方式。它顺序读取xml文件,不需要一次全部装在整个文件,当遇到文件开头,文档结束,或者标签开头,标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理xml文件。 适合对文件顺序访问。STAX:Streaming API forXML 2) XML文档定义有几种形式?区别? 两种形式:dtd和sche
25、ma 本质区别:schema本身是xml,可以被XML解析器解析。 16、 设计模式 单例模式,工厂模式,代理模式(懒加载,饿汉模式,优化模式) 单例模式: 私有的构造器;一个类只有一个实例;提供一个全局访问点。单例的特点:使类在程序的生命周期任何时刻都只有一个实例,然后单例的构造函数是私有的外部程序如果想访问这个单例类,就必须通过getInstance()来请求得到这个类的实例。 public class singleton private static Singleton singleton; /private static readonly object syncobject=new object(); private Singleton() public static Singleton getInst
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- wifi模块通讯协议书
- 2025标准车辆买卖合同范本
- 2025租房合同简化版下载
- 溜槽安装技术协议书
- 水果代理协议书
- 2025年短视频创作者直播时长保证合同协议
- 2025合同协议无缝钢管委托加工合同
- 2025标准长期租赁合同模板「」
- 2025借款房产抵押合同示范文本
- 2025科技有限公司股权投资合同书
- 2023年中级软考-多媒体应用设计师考试题含答案
- 干法乙炔工艺操作规程
- GB/T 36195-2018畜禽粪便无害化处理技术规范
- 11466现代企业人力资源管理概论第10章
- 护理敏感质量指标推动护理质量改善培训课件
- 挂篮施工安全事故的案例课件
- 尺寸检验记录表
- 《智能区域自动气象站建设规范》
- 《动力气象学》全套教学课件
- 指导培养青年教师记录表
- 交通安全情景剧剧本
评论
0/150
提交评论