Java 基础复习.docx

上传人:b****6 文档编号:12789587 上传时间:2023-06-08 格式:DOCX 页数:15 大小:22.29KB
下载 相关 举报
Java 基础复习.docx_第1页
第1页 / 共15页
Java 基础复习.docx_第2页
第2页 / 共15页
Java 基础复习.docx_第3页
第3页 / 共15页
Java 基础复习.docx_第4页
第4页 / 共15页
Java 基础复习.docx_第5页
第5页 / 共15页
Java 基础复习.docx_第6页
第6页 / 共15页
Java 基础复习.docx_第7页
第7页 / 共15页
Java 基础复习.docx_第8页
第8页 / 共15页
Java 基础复习.docx_第9页
第9页 / 共15页
Java 基础复习.docx_第10页
第10页 / 共15页
Java 基础复习.docx_第11页
第11页 / 共15页
Java 基础复习.docx_第12页
第12页 / 共15页
Java 基础复习.docx_第13页
第13页 / 共15页
Java 基础复习.docx_第14页
第14页 / 共15页
Java 基础复习.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Java 基础复习.docx

《Java 基础复习.docx》由会员分享,可在线阅读,更多相关《Java 基础复习.docx(15页珍藏版)》请在冰点文库上搜索。

Java 基础复习.docx

Java基础复习

Java基础复习

1、数据类型相关,包装类与对应的基础类型区别,装拆箱?

数据类型分为:

基本数据类型和引用数据类型。

基本数据类型:

byte,short,char,intlongfloatdoubleboolean 

原始类型包装类:

byteByte,shortShort,charCharacter,intInteger,longLong,floatFloat,doubleDouble,booleanBoolean

包装类的默认值为null,而基础类的默认值为0,基础类型不适合作为web层的表单数据的类型。

在hibernate中,将OID定义成int,在hbm映射文件中设置其unsaved-value属性为0。

装箱:

基本数据类型转换为其对应的包装数据类型的过程。

拆箱:

包装数据类型转换为对应的基本数据类型的过程。

inti=10;

Integerx=Integer.valueOf(i);(手动装箱)

Integer k=i;(自动装箱)

i=x.intValue();(手动拆箱)

i=x;(自动拆箱)

2、==和equals的区别?

基本数据类型时,它们之间的比较是用==,比较的是它们的值。

复合数据类型时,用==比较的时候,是比较他们在内存中的存放地址值。

(在object中的基类定义了一个equals方法,)在没有覆写equals方法的时候,使用equals比较的还是他们在内存中的存放位置的地址值,覆写了equals方法的时候,比较的是,他们存放的内容值。

3、静态成员实例成员及初始化的过程

 静态成员(也叫类成员)是属于类的,随着类的加载而存在,随着类的销毁而销毁,静态成员内是不能用this关键字。

 实例成员(也叫对象成员)是属于对象的,随着对象的创建而存在,随着对象的销毁而销毁。

初始化过程:

实例成员初始化过程:

默认初始化,实例初始化,初始化块,构造器。

静态成员初始化过程:

默认初始化,声明初始化,静态快。

静态变量和实例变量的区别?

语法上的区别:

静态变量前要加static关键字,而实例变量前则不加。

程序运行时的区别:

实例变量必须创建对象后才可以通过这个对象来使用。

静态变量则可以直接使用类名来引用。

 

4、访问修饰符

publicprotectedprivate

同一个类truetruetrue

同一个包truetruefals

子父类truetruefalse

不同包truefalsefalse

5、方法传参(基本数据类型和引用数据类型)

基本数据类型传参,采用的是值传递,它不会修改实参的值。

引用数据类型传参,采用的是引用传递,和值传递类似,传的是引用的一份拷贝,而非引用本身。

引用可以理解成java指针,它指向对象在堆里面分配的首地址。

 staticvoid a1(inti){

   i=10;

  }

  staticvoida2(UserInfou){

   u.setUser_id("2222");

  }

  main{

     intk=1;

     a1(k);

     UserInfou=newUserInfo("dd","dd","ddd");

     a2(u);

  }

6、重载和重写

重载overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)

重写override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法。

7、接口和抽象类的区别:

 抽象类可以有部分实现的方法

接口的所有方法都是抽象的

 抽象类可以实现接口

 接口支持多继承

类只能继承一个类,但可以实现多个接口

 接口属性默认publicstaticfinal

8、集合,map相关问题

常见的集合有List和Set

List接口的实现类有ArrayList,LinkedList和vector

ArrayList数组方式存储数据,查询执行的快,增删数据慢,线程不安全

LinkedList双向链表方式实现存储,查询执行慢,增删数据快,线程不安全

Vector数组方式存储数据,使用了synchronized关键字,实现同步,线程安全,总体性能比ArrayList差。

Set接口下有hashSet和treeSet

hashSet不允许集合中有重复的值,不能保证原生的排列顺序,顺序可能会发生变化,不是同步的,集合元素可以是null,但是只能放一个null。

treeSet可以确保集合元素处于排列状态,支持两种排列方式,自然排序和定制排序。

Map集合提供的是key和value的映射。

Map中不能包含相同的key,每个key只能映射一个value。

Map接口的实现类有:

hashMap和hashTable

HashMap是Hashtable的轻量级实现(非线程安全的实现),它们都实现了Map接口。

它们的区别:

1)HashMap类没有分类或排序,它允许一个null键和多个null值。

2)Hashtable类似于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)=false,Set最多有一个null元素。

3)Map接口:

Map没有继承Collection接口,Map提供Key到Value的映射

 

9.异常

a.分类:

一般异常和运行时异常

b.常见的一般异常和运行时异常3种

一般异常:

io文件流异常,中断异常,jdbc异常,SQLException

运行时异常:

runtimeexception编译通过:

ClassCastException类型转换异常

WebServiceExceptionweb服务异常

ArithmeticException算术异常

IndexOutOfBoundsException索引越界

DOMExceptiondom解析异常

NullPointerException空指针

数组下标越界异常,数据格式转换异常,

c.异常处理技术.并解释throwthrows

Trycatchfinally。

try块中发生异常,在catch块中对异常进行捕获和处理。

throw:

语句用在方法体内,表示抛出异常,由方法体内的语句处理;

抛出的是一个异常的实例。

(一定抛出了某种异常)

throws:

语句用在方法声明后面,表示再抛出异常,由该方法的调用者来处理。

声明这个方法会抛出这种类型的异常。

(可能性)

/*

Throw是抛出异常,后面接异常对象。

Throws方法抛出异常的声明

Throws出现在方法函数头,而throw出现在函数体。

Throws表示出现异常的一种可能性,并不一定会发生;throw则是抛出异常,执行throw则一定抛出了某种异常。

两者抛出的异常,不是由函数去处理异常,真正的处理异常由函数的上层调用处理。

*/

10.java特性oop解释/java5新特性

Java特性/oop特性:

(1)封装

封装是保证软件部件具有优良的模块性的基础,

封装的目标就是要实现软件部件的“高内聚、低耦合”,防止程序相互依赖性而带来的变动影响。

将对象封装成一个高度自治和相对封闭的个体,对象状态(属性)由这个对象自己的行为(方法)来读取和改变。

在面向对象的编程语言中,对象是封装的最基本单位。

(2)继承

继承是子类自动共享父类数据和方法的机制,这是类之间的一种关系,提高了软件的可重用性和可扩展性。

(3)多态

引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,

即一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。

(4)抽象

抽象就是找出一些事物的相似和共性之处,然后将这些事物归为一个类

Java5新特性:

泛型,枚举型,自动拆装箱,可变参数。

a.一个类文件中可以放几个类

一个类文件中可以放多个类,但只能有一个public类,并且public的类名必须与文件名一致。

*********

b.内部类有几种

定义在方法内部、外部的,静态内部类,匿名内部类

2)heap和stack有什么区别?

stack(栈):

stack的空间是由操作系统自由分配和释放的,stack空间有限。

heap(堆):

heap的空间是手动申请和释放的,heap常用new关键字来分配,空间大。

Java的内存分为两类,一类是栈内存,一类是堆内存。

栈内存是指程序进入一个方法时,系统会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量,当这个方法结束时,分配的栈会释放,栈中的变量也随之释放。

堆是与栈作用不同的内存,一般用于存放不放在当前方法栈中的那些数据,它不会随着方法的消失而消失。

方法中的局部变量使用final修饰后,放在堆中,而不是栈中。

b.GC是什么?

为什么要有GC?

GC是垃圾收集的意思(GabageCollection),忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的。

c.垃圾回收的优点和原理。

并考虑2种回收机制。

优点:

垃圾回收可以有效的防止内存泄漏,有效的使用可以使用的内存。

原理:

垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。

机制:

分代复制垃圾回收,标记垃圾回收,增量垃圾回收。

d.垃圾回收器的基本原理是什么?

垃圾回收器可以马上回收内存吗?

有什么办法主动通知虚拟机进行垃圾回收?

垃圾回收器的原理:

GC采用有向图的方式记录和管理堆中的所有对象。

通过这种方式确定哪些对象是“可达的”,哪些对象是“不可达”。

当GC确定一些对象为“不可达”时,GC就有责任回收这些内存空间。

可以。

程序员可以手动执行System.gc(),通知GC运行,但是java语言规范并不保证GC一定会执行。

11.String创建几个对象的问题/StringBuffer/StringBuilder

(1)String类提供了类型不可变的对象,因此每次对String类型进行改变时都相当于生成了一个新的String对象。

String类是final类故不可以继承。

(2)StringBuffers来动态构造字符数据,长度可变。

(同步的,线程安全)(append/insert)String覆盖了equals方法和hashCode方法,StringBuffer没有覆盖equals方法和hashCode方法,

(3)StringBuilder是一个可变的字符序列(是5.0新增的),不同步,比StringBuffer要快。

/*a.String和StringBuffer的区别:

String类型和StringBuffer类型的主要性能区别其实在于String是不可变的对象,因此在每次对String类型进行改变的时候其实都等同于生成了一个新的String对象,然后将指针指向新的String对象;使用StringBuffer类,每次结果都会对StringBuffer对象本身进行操作,而不是生成新的对象,再改变对象引用。

b.StringBuffer和StringBuilder的区别:

StringBuffer与StringBuilder两个基本上差不多,只是StringBuffer是线程安全的,可以不需要额外的同步用于多线程中。

StringBuilder是非同步的,运行于多线程中就需要使用者单独同步处理,但是速度就比StringBuffer快的多,

共同点:

都是可变字符序列,可以通过append、insert进行字符串的操作。

*/

12.final,finally,finalize

final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承,内部类访问局部变量必须定义成final类型。

finally是异常处理语句结构的一部分,表示总执行

finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法。

13.排序算法

三种排序法:

冒泡排序,选择排序,插入排序

冒泡排序:

for(inti=0;i

for(intj=0;j

if(arr[j]>arr[j+1]){

inttemp=arr[j];

arr[j]=arr[j+1];

arr[j+1]=temp;

}

}

}

for(inti=0;i

System.out.print(arr[i]);

}

选择排序:

for(inti=0;i

intminIndex=i;

for(intj=i+1;j

if(arr[j]

minIndex=j;

}

}

inttemp=arr[i];

arr[i]=arr[minIndex];

arr[minIndex]=temp;

}

插入排序:

for(inti=1;i

if(arr[i]

intpos=-1;

for(intj=0;j

if(arr[j]>arr[i]){

pos=j;

break;

}

}

inttemp=arr[i];

for(intk=i-1;k>=pos;k--){

arr[k+1]=arr[k];

}

arr[pos]=temp;

}

}

14.线程相关

a.什么是线程?

线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。

b.线程和进程的区别:

线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。

c.如何实现(多)线程?

继承Thread类和实现Runnable接口。

d.Thread类中的start()和run()方法有什么区别?

Start()方法被用来启动新创建的线程,start()内部调用了run()方法,这和直接调用run()方法的效果不一样。

当你调用run()方法的时候,只会在原来的线程当中调用,没有新的线程启动。

start()方法才会启动新线程。

f.实现线程同步的方法?

1)有synchronized关键字的同步方法,

2)有关键字synchronized修饰的同步代码块

3)使用特殊域变量(volatile)实现线程同步

4)使用重入锁实现线程同步

5)使用局部变量实现线程同步。

g.sleep()和wait()有什么区别?

Sleep就是正在执行的线程主动让出cpu,让cpu去执行其他的线程,等sleep指定时间过后,cpu才会回到这个线程上来继续往下执行。

如果当前线程进入同步锁,sleep方法不会释放锁,即使sleep让出了cpu,但其他被同步锁挡住的线程仍无法执行。

Wait是指在一个已经进入到同步锁的线程内,让自己暂时让出同步锁,以便其他正在等待此锁的线程可以得到同步锁运行。

调用wait方法的线程就会解除wait状态和程序再次得到锁后继续向下运行。

15、xml操作相关

xml提供一种描述结构化数据的方法,是一种简单,与平台无关并被广泛采用的标准,xml文档可以承载各种信息.

1)xml有哪些解析技术?

区别是什么?

有DOM,SAX,STAX。

区别:

DOM:

处理大型文件时其性能下降的非常厉害,这个问题是由DOM的树结构所造成的,这种结构占内存较多,而且DOM在解析文件之前必须把整个文件装入内存,它适合对XML随机访问。

SAX:

不限于DOM,SAX是事件驱动型的XML解析方式。

它顺序读取xml文件,不需要一次全部装在整个文件,当遇到文件开头,文档结束,或者标签开头,标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理xml文件。

适合对文件顺序访问。

STAX:

StreamingAPIforXML

2)XML文档定义有几种形式?

区别?

两种形式:

dtd和schema

本质区别:

schema本身是xml,可以被XML解析器解析。

16、设计模式

单例模式,工厂模式,代理模式(懒加载,饿汉模式,优化模式)

单例模式:

私有的构造器;一个类只有一个实例;提供一个全局访问点。

单例的特点:

使类在程序的生命周期任何时刻都只有一个实例,然后单例的构造函数是私有的外部程序如果想访问这个单例类,就必须通过getInstance()来请求得到这个类的实例。

publicclasssingleton{

privatestaticSingletonsingleton;

//privatestaticreadonlyobjectsyncobject=newobject();

privateSingleton(){

}

publicstaticSingletongetInstance(){

if(singleton==null){

singleton=newSingleton();

}

returnsingleton;

}

}

多线程的时候,使用同步块,将此方法进行同步,就成了懒汉模式。

饿汉模式,去掉同步块,在该类初始化的时候对单例对象

优化模式:

借助私有静态成员内部类进行桥接。

工厂模式:

用于模块与模块之间需要创建很多个相似对象的时候,我们将使用工厂模式,对这些对象的产生进行管理。

对对象的创建进行专门集中的管理。

简单工厂:

方法工厂:

因产品的增加而带来工厂的变化,基于接口编程进行解耦合。

不足:

当产品按系列增加的时候会使工厂急剧增多。

从而产生抽象工厂--按系列进行管理。

17、流(序列化)

1)Java中有几种类型的流?

主要的有字节流,字符流

2)分别继承于哪些抽象类?

字节流继承于InputStream,OutputStream

字符流继承于InputStreamReaderOutputStreamWriter

3)字节流和字符流的区别?

字符流是字节流的包装,字符流则是直接接受字符串,它内部将字符串转为字节,写入到设备中。

字符向字节转换时注意编码问题。

4)序列化:

什么是序列化:

为了方便对象在不同的磁盘读写和网络传输。

是将一个类对象转化成一个字节流,便于传输的过程。

序列化前提:

实现serializable接口。

随笔:

18、说出常见的类,包和接口

常见的类:

FileReaderFileWriter,StringIntegerBufferReadBufferWrite

常见的包:

java.langjava.iojava.utiljava.sqljavax.servletorg.apachestruts.actionorg.hibernate

常见的接口:

ListMapDocumentNodeListServletHttpServletRequestHttpServletResponse

 

 

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2