Java基础面试.docx
- 文档编号:14997951
- 上传时间:2023-06-29
- 格式:DOCX
- 页数:20
- 大小:224.91KB
Java基础面试.docx
《Java基础面试.docx》由会员分享,可在线阅读,更多相关《Java基础面试.docx(20页珍藏版)》请在冰点文库上搜索。
Java基础面试
Java基础
1.在定义自己的方法时不能使用Java关键字eg:
throw但是可以使用Throw,java区分大小写。
2.Card c1=new Card();Card c2=c1;//c1 和c2指向了同一物理位置,所以无论中间处理过程如何,他们两的值将始终保持一致.
3.在内部类中如果子类需要调用父类的属性,父类属性应该设置为protect;
4.Class 类的实例表示正在运行的 Java 应用程序中的类和接口。
枚举是一种类,注释是一种接口。
每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。
基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象。
Class 没有公共构造方法。
Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。
常用方法:
.getClassName()
.newInstance(); eg:
A a=(A)Class.forName(“package.A”).newInstance()用此方法来实例化一个对象
5. Java.awt.List public List(int rows, boolean multipleMode)
创建一个初始化为显示指定行数的新滚动列表。
注意,如果指定了零行,则会按默认的四行创建列表。
还要注意,列表中的可视行数一旦创建就不能更改。
如果 multipleMode的值为 true,则用户可从列表中选择多项。
如果为 false,则一次只能选择一项。
6.FilterInputStream和FileInputStream同一个等级,包含其他一些输入流,重写了所有的InputStream方法,FilterInputStream 的子类可进一步重写这些方法中的一些方法,比如其子类的BufferedInoutStream建立了读数据的缓冲区 ,并且还可以提供一些额外的方法和字段.包含了。
FileInputStream 从文件系统中的某个文件中获得输入字节。
哪些文件可用取决于主机环境。
7、进制表示:
二进制数10110011可以写成(10110011)2,或写成10110011B
二进制数据 11 101 010 . 010 110 100 对应 八进制数据 ( 3 5 2 . 2 6 4 )8或352.264O(octonary ).
十六进制数4AC8可写成(4AC8)16,或写成4AC8H(hexadecimal十六进制)。
8.说出数据连接池的工作机制是什么?
J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。
客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。
如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。
当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。
9、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
switch中的参数只能是离散变量或枚举类型。
离散变量包括:
byte;int;short;char;枚举类型则需要自己定义,public enum{first,second,third};switch(expr1)中,expr1是一个整数表达式。
因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。
switch,long,string 都不能作用于swtich。
jdk7.0以后可以
10、初始化顺序:
静态变量——》静态语句块——》变量——》初始化块——》构造器
3. 1、父类--静态变量
4. 2、父类--静态初始化块
5. 3、子类--静态变量
6. 4、子类--静态初始化块
7. 5、父类--变量
8. 6、父类--初始化块
9. 7、父类--构造器
10. 8、子类--变量
11. 9、子类--初始化块
12. 10、子类--构造器
11、 垃圾回收的优点和原理。
并考虑2种回收机制。
垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。
GC采用有向图的方式记录和管理堆(heap)中的所有对象。
垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。
12.什么是OOA?
什么是OOD?
什么是OOP?
什么是类?
请对比类和对象间的关系?
OOA:
object-oriented analyze 面向对象分析,OOD:
object-oriented design 面向对象设计,OOP:
object-oriented program 面向对象编程
oo(object-oriented):
基于对象概念,以对象为中心,以类和继承为构造机制,来认识,理解,刻画客观世界和设计,构建相应的软件系统的一门方法;本意----模拟人类的思维方式,使开发,维护,修改更加容易 。
ooa(object-oriented analysis):
强调的是在系统调查资料的基础上,针对OO方法所需要的素材进行的归类分析和整理,而不是对管理业务现状和方法的分析-------其实就是进一步对oo进行细化,初步得出该oo的属性与方法(或者简单的理解:
在得出的文档中对接口的粗略定义)
ood(object-oriented design):
OO方法中一个中间过渡环节,其主要作用是对ooa分析的结果作进一步的规范化整理,以便能够被OOP直接接受------整理和定义oo的属性和方法
oop(object-oriented programming):
把组件的实现和接口分开,并且让组件具有多态性----(抽象,继承,封装,多态)面向接口编程
具有相同或相似性质的对象的抽象就是类,其内部包括属性和方法两部分,在面向对像的语言中累世兜里的程序单位。
因此,
对象的抽象是类,类的具体化就是对象,类是抽象的,不占用内存,而对象是具体的,占有内存空间。
例如:
类就是水果,对象就是苹果。
类具有属性是对对象状态的抽象,类具有操作方法是对对象行为的抽象;
13.脏数据:
在一个事物中还未提交的数据却被另一个事物所访问的数据;
14.Class.forName的作用?
为什么要用?
实例化一个类,eg:
A a=(A)Class.forName(“package.A”).newInstance();Class.forName()用来将这个类加载到jvm服务器,然后通过newInstance()方法实例化对象;这和A a=new A()(直接实例化);是一样的效果。
可以通过类名和包名动态的加载和创建Class对象(先将类加载到内存,然后再实例化对象);
15、什么情况下需要实现Java.long.Comparable interface?
16、请简单的描述Java程序运行机制 ?
JVM?
PATH?
JAVA的运行机制就是把JAVA源代码编译成适合本地平台运行的代码的过程。
首先,编写Java 源程序,然后由Java编译器将Java源程序编译为可执行的类文件,再通过JVM 虚拟机将类文件转换为符合当前平台特征的代码, 再由Runtime Envionment(解释器)解释运行. 在一台机器上用JAVA编写并翻译的程序不需要重新翻译就可以在另一台机器上得到执行。
Java虚拟机(JVM)就是将类文件转换成不同平台上应用的JAVA程序的解释设备JVM java virtual machine. 简单地讲, 就是把class文件变成字节码, 然后送到excution engin中执行 ,
PATH环境变量的作用是为DOS命令行提供运行程序的完整运行路径
JRE. java runtime environment 我们的helloworld必须在JRE(JAVA运行环境,JAVA运行环境又叫JAVA平台)里面, 才能跑起来。
所以, 显然地, JRE其实就是JDK + JVM
1. 按位或,逻辑或 | || ;按位与,逻辑与 & &&
2. java是从C++语言改进重新设计的;
3. constructor本身就是一个方法,constructor在一个对象被new时执行
4. abstract不能修饰字段
5. 形式参数可被视为localvariable,形式参数不能被字段修饰符修饰,形式参数在方法调用时真正调用的是参数的引用形式,参数可以是对象,对于形式参数只能用final修饰符,其它任何修饰符都会引起编译器错误。
6. javac.exe能指定编译结果至于那个目录;在编译程序时,所能指定的环境变量不包括classpath,javac一次课编译数个Java源文件。
7. 变量的名字可大小写混用,但首字符应小写。
词由大写字母分隔,限制用下划线,限制使用美元符($),因为这个字符对内部类有特殊的含义,但是还是可以用的intv$v=0; int_0_=5;
8. protect、static都不能用来修饰接口
9. callbyvalue(按值传递,Primitivetypes)callbyreference(按引用传递Object) Thetermcallbyvaluemeansthatthemethodgetsjustthevaluethatthecallerprovides.Incontrast,callbyreferencemeansthatthemethodgetsthelocationofthevariablethatthecallerprovides.Thus,amethodcanmodifythevaluestoredinavariablethatispassedbyreferencebutnotinonethatispassedbyvalue.
10. 类方法中不能用this;
11. 函数==过程==方法 在JAVA中这些都是隶属于类依靠类存在,Java中没有单独的过程与方法的存在
12. 能被java.exe成功运行的javaclass文件必须有main()方法;JDK包含了JavaAPI;能被appletviewer运行的Javaclass不能有main方法
13. Java程序中的起始类名称必须与存放该类的文件名相同
14. Classclass十分特殊。
它和一般classes一样继承自Object,其实体用以表达Java程序运行时的classes和interfaces,也用来表达enum、array、primitiveJavatypes(boolean,byte,char,short,int,long,float,double)以及关键词void。
当一个class被加载,或当加载器(classloader)的defineClass()被JVM调用,JVM便自动产生一个Classobject
15. Class和Applet是Java的类,Application和Servlet不是Java的类也不是Java接口
17. The abstract method method can only set a visibility modifier, one of public or protected,不能用static修饰
18. long temp=(int)3.9; 输出结果为3 temp%=2;System.out.print(temp);结果为1;
19. int[] a=new int[25]; System.out.print(a[24]); int,byte,long数组默认值为0;double和float 默认输出类型为0.0
String b=new String[25] System.out.print(b[24]); 字符串类型的默认值是null;
static String s; System.out.print("s"+s); 输出结果为snull;
Char类型的默认输出是”口”字形
也就是说在java中基本类型的默认值是0,引用类型会默认为null。
16. 修改servlet而不需要重新启动tomcat服务器和websphere服务器:
(1)修改serlet而不重新启动tomcat
修改
%TOMCAT_HOME%\conf\server.xml
大致如下:
其中reloadable就是配置是否自动reload的,把它设为true,如果没有这一项,加上。
(2)修改webshpere中的servlet而不重新启动服务:
修改..\WEB-INF下面的web.xml:
加入 WebAppExtension xmi: version="2.0" xmlns: xmi="http: //www.omg.org/XMI" xmlns: webappext="webappext.xmi" xmlns: webapplication="webapplication.xmi" xmlns: xsi="http: //www.w3.org/2001/XMLSchema-instance" xmi: id="WebApp_ID_Ext" reloadInterval="3" reloadingEnabled="true" fileServingEnabled="true" directoryBrowsingEnabled="true" serveServletsByClassnameEnabled="true" > 其中reloadInterval="3" reloadingEnabled="true" fileServingEnabled="true" directoryBrowsingEnabled="true" serveServletsByClassnameEnabled="true"是主要的,reloadInterval="3" reloadingEnabled="true" 是说修改后3秒自动重新载 入。 DNS(DomainNameSystem,域名系统) 每个IP地址都可以有一个主机名,DNS就是处理两者之间的转换,主机名由一个或多个字符串组成,字符串之间用小数点隔开。 有了主机名,就不要死记硬背每台IP设备的IP地址,只要记住相对直观有意义的主机名就行了。 这就是DNS协议所要完成的功能。 当DNS解析出现错误,例如把一个域名解析成一个错误的IP地址,或者根本不知道某个域名对应的IP地址是什么时,就无法通过域名访问相应的站点了,这就是DNS解析故障。 出现DNS解析故障最大的症状就是访问站点对应的IP地址没有问题,然而访问他的域名就会出现错误。 聚集索引: 一种索引,该索引中键值的逻辑顺序决定了表中相应行的物理顺序;(根据汉字拼音不通过目录直接查找)(主键本身就是一种索引) 非聚集索引: 种索引,该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同(相当于差一个陌生子时现在目录里查到地址后再找到该数)。 3.throws和throw的区别 publicTest()throwsRepletException{ try{ System.out.println("TestthisProject! ") }catch(Exceptione){ thrownewException( e.toString());} } throws是用来声明一个方法可能抛出的所有异常信息 throw则是指抛出的一个具体的异常类型。 通常在一个方法(类)的声明处通过 throws声明方法(类)可能抛出的异常信息,而在方法(类)内部通过 throw声明一个具体的异常信息。 throws通常不用显示的捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法; throw则需要用户自己捕获相关的异常,而后在对其进行相关包装,最后在将包装后的异常信息抛出。 4.java导致内存泄露的原因? 定义: 内存泄露是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成的内存空间的浪费称为内存泄露。 1)静态集合类引起内存泄露;2)当集合里面的对象属性被修改后,再调用remove()方法时不起作用 3)在释放对象的时候却没有记住去删除这些监听器;4)过多的connect请求 5)单例模式中引用了外部对象;6)内部类和外部模块等的引用 编译: javac: 将Java源文件编译成class字节码文件; 运行: java: 运行class文件; 表示符: 以字母(各种国家字母)、下划线、$开头;其余部分可以为数字; char的默认值为: \u0000 基本数据类型: 整数: byte(一个字节),short (2),int(4),long(8) 浮点数: float(4),double(8,默认的浮点数存储类型) 字符型char (2) 布尔Boolean (1) 引用类型: 四个字节(地址值) 接口之间可以多继承 方法的重写: =: 方法名称保持一致 》=: 子类权限大于等于父类权限 <=,<=: 自雷的返回类型小雨等于父类,子类的异常类型不能超过父类 多态: 条件: 继承+方法重写+父类指向子类的引用 栈: 1,存放局部变量2,不可以被多个线程共享3,空间连续速度快 堆: 1,,存放对象2,方法可以被多个线程共享3,空间不连续速度慢 GC: garbagecollection: 1,程序员不能调用垃圾回收器但是可以通过System.gc()建议回收 2,finallize: 释放不用的资源,但一般不使用; 常用的设计模式? 说明工厂模式: Java中的23种设计模式: Factory(工厂模式),Builder(建造模式), Factory Method(工厂方法模式),Prototype(原始模型模式),Singleton(单例模式), Facade(门面模式),Adapter(适配器模式), Bridge(桥梁模式), Composite(合成模式),Decorator(装饰模式), Flyweight(享元模式), Proxy(代理模式),Command(命令模式), Interpreter(解释器模式), Visitor(访问者模式),Iterator(迭代子模式), Mediator(调停者模式), Memento(备忘录模式),Observer(观察者模式),State(状态模式),Strategy(策略模式),Template Method(模板方法模式), Chain Of Responsibleity(责任链模式)。 java中实现多态的机制是什么: 方法的重写Overriding和重载Overloading是Java多态性的不同表现。 重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。 垃圾回收原理: GC采用有向图的方式记录和管理堆(heap)中的所有对象。 通过这种方式确定哪些对象是"可达的", //一个语句里面多次使用三元运算符-------在多个判断只输出一个值时使用 publicstaticvoidmain(String[]args){ intx=50; chargrade; grade=x>=90? 'A': x>=70? 'B': x>=60? 'C': 'D'; System.out.println("该分数的等级为: "+grade); } //输出: 3? ? ? ? ? ? publicintgetFoo(inti){ System.out.println(i); if(i==0)return0; returngetFoo(i/2)+1; } 栈内存 在方法中定义的一些基本类型的变量和对象的引用变量都在方法的栈内存中分配,当在一段代码中定义一个变量时,java就在栈内存中为这个变量分配内存空间,当超出变量的作用域后,java会自动释放掉为该变量所分配的内存空间。 堆内存 堆内存用来存放由new运算符创建的对象和数组,在堆中分配的内存,由java虚拟机的自动垃圾回收器来管理。 在堆中创建了一个数组或对象后,同时还在栈内存中定义一个特殊的变量。 让栈内存中的这个变量的取值等于数组或者对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量,引用变量实际上保存的是数组或对象在堆内存中的地址(也称为对象的句柄),以后就可以在程序中使用栈的引用变量来访问堆中的数组或对象 数组: 2.如对全部元素赋初值,则第一维的长度可以不给出。 例如: staticinta[3][3]={1,2,3,4,5,6,7,8,9};可以写为: staticinta[][3]={1,2,3,4,5,6,7,8,9}; charc[10];由于字符型和整型通用,也可以定义为intc[10]但这时每个数组元素占2个字节的内存单元。 数组编址方式: 二维数组在概念上是二维的,即是说其下标在两个方向上变化,下标变量在数组中的位置也处于一个平面之中,而不是象一维数组只是一个向量。 但是,实际的硬件存储器却是连续编址的,也就是说存储器单元是按一维线性排列的。 如何在一维存储器中存放二维数组,可有两种方式: 一种是按行排列,即放完一行之后顺次放入第二行。 另一种是按列排列,即放完一列之后再顺次放入第二列。 在C语言中,二维数组是按行排列的 Collection: 1、remove: 仅是将对象从collection里移除,但是他依旧存在内存空间 2、toArray();返回类型为Object[]; 3、booleanretainAll(Collection >c): 取交集; 4、l
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 基础 面试