java面试题

java面试题
1、面向对象的特征有哪些方面?
面向对象的特征:抽象(abstract修饰)、继承(子类继承父类)、封装(简单例子就是讲对象属性私有化,外部类想访问这个类的属性只能通过get、set方法来访问)、多态性(方法重载、方法重写)。
2、访问修饰符public,private,protected,以及不写(默认)时的区别?

修饰符当前类同包子类其他包
public
protected
default
private

3、String 是最基本的数据类型吗?
不是,基本类型:byte、short、long、int、double、float、char、boolean。
4、short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?
(1)

short s1 = 1;//s1类型short
	  s1 = s1 + 1;//(s1+1)类型int,将int赋值给short应强转类型。

(错误);
(2)

short s1 = 1;//s1类型short
	  s1 += 1;//s1+=1相当于s1=(short)(s1+1)。

(正确)。
5、int和Integer有什么区别?
int是基本类型,Integer不是,它是int的包装类
6、float f=3.4;是否正确?
不正确,3.4是双精度的,double类型不能直接转为float类型,应强转。
7、&和&&的区别?
&是运算符,&&是逻辑与,当进行boolean判断时,&&会进行短路运算,,只要左边boolean值为false,整个条件判断就结束了,将不进行右边的逻辑判断了;有时某些情况下只能用&&而不能用&,例如

if(str!=null&&!("".equals(str))){}

8、解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。
栈空间操作快但是空间小

String str=new String("hello");//变量str放在栈上,new String()的对象放在堆上,"hello"这个字符串放在静态区

9、Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?
round是在数值上加0.5再向下取整,所以Math.round(11.5)是11.5+0.5=12,向下取整为12;而Math.round(-11.5)是-11.5+0.5=-11,向下取整为-11.
10、switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?
switch只能作用在byte、short、int、char、Enum(枚举类型)、String(jdk7开始支持)
11、用最有效率的方法计算2乘以8?

2<<3;//左移3位相当于乘以2的3次方

12、数组有没有length()方法?String有没有length()方法?
数组没有length()方法,有length属性;String有length()方法。
13、构造器(constructor)是否可被重写(override)?
构造器不能被继承,所以不能被重写,但可以被重载。
14、两个对象值相同(x.equals(y) == true),但却可有不同的hashcode,这句话对不对?
equals比较的就是hashcode,比较结果为true,即hashcode相同。
15、是否可以继承String类?
String类是final类,不可继承。
16、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
传递过去的是对象的值。
17、String和StringBuilder、StringBuffer的区别?
String引用的字符串内容是不可变的,StringBuilder和StringBuffer是可变的;(这个不好理解)

		String a="123456";
		System.out.println("a初始值:"+a);
		a="789";
		System.out.println("a变化后:"+a);
		/*
		a初始值:123456
		a变化后:789
		*/
		//并不是将内容123456变成了789,而是将a的引用从123456这个字符串对象变成了引用789这个字符串对象
		String b="123456";
		System.out.println("b初始值:"+b);
		b.replace('1', '8');
		System.out.println("b变化后:"+b);
		/*
		b初始值:123456
		b变化后:123456
		*/

StringBuilder实在单线程环境下使用的,StringBuffer是多线程环境下使用的,StringBuffer是被synchronized修饰的,线程安全,但效率低。
18、重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?
重载:在同一个类中,只是方法名相同,参数类型、参数个数之一或都不同,返回类型可同可不同

	public  void a() {
		
	}
	public int a(String b) {
		return 0;
	}
	public int a(int b){
		return 0;
	}
	public int a(int b,int c) {
		return 0;
	}
	public  void a() {
		
	}
	public int a() {
		return 0;
	}
	//这个不是方法重载,这个会编译报错,机器认定这两个方法是同一个方法

重写:发生在子父类的子类当中,子类对父类的方法进行修改,方法名,返回类型,参数个数、参数类型必须完全相同;

class A{
	public void a() {
		
	}
}
class B extends A{
	@Override
	public void a() {
		System.out.println("方法重写");
	}
}

19、描述一下JVM加载class文件的原理机制?
JVM中类的装载是由类加载器(ClassLoader)和它的子类来实现的,Java中的类加载器是一个重要的Java运行时系统组件,它负责在运行时查找和装入类文件中的类。类的加载是指把类的.class文件中的数据读入到内存中,通常是创建一个字节数组读入.class文件
20、抽象类(abstract class)和接口(interface)有什么异同?
两者都不能实例化,但是可以通过抽象类的子类进行实例化,通过接口的实现类进行实例化;某个类如果继承了抽象类或实现了接口,必须重写抽象类的所有抽象方法或接口中的所有方法。
抽象类可以有非抽象方法,而接口中全部是抽象方法;
抽象类中成员可以说private、public、默认、protected的,接口中全是public的。
抽象类中可以定义成员变量,接口中定义的成员都是常量。
21、Java 中会存在内存泄漏吗,请简单描述。
理论上Java因为有垃圾回收机制(GC)不会存在内存泄露问题(这也是Java被广泛使用于服务器端编程的一个重要原因);然而在实际开发中,可能会存在无用但可达的对象,这些对象不能被GC回收,因此也会导致内存泄露的发生。例如hibernate的Session(一级缓存)中的对象属于持久态,垃圾回收器是不会回收这些对象的,然而这些对象中可能存在无用的垃圾对象,如果不及时关闭(close)或清空(flush)一级缓存就可能导致内存泄露
22、GC是什么?为什么要有GC?
GC是垃圾收集的意思,垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。
23、String s = new String(“xyz”);创建了几个字符串对象?
两个对象,一个是静态区的”xyz”,一个是用new创建在堆上的对象。
24、接口是否可继承接口?抽象类是否可实现接口?抽象类是否可继承具体类?
都可以。
25、Java 中的final关键字有哪些用法?
final修饰的类不能被继承
final修饰的方法不能被重写
final修饰的变量为常量,值不能被修改
26、指出下面程序的运行结果。

class A {
	static {
		System.out.print("1");
	}
	public A() {
		System.out.print("2");
	}
}

class B extends A {
	static {
		System.out.print("a");
	}
	public B() {
		System.out.print("b");
	}
}

public class Test{
	public static void main(String[] args) {
		A ab = new B();//因为B继承A,所以先执行A的静态代码块,然后执行B的静态代码块,然后执行A的构造方法,再执行B的静态方法
		//结果:1a2b
		ab = new B();//一个类中静态代码块只执行一次,这里再次实例化B对象,所以还是先执行A构造方法再执行B构造方法
		//结果:2b
	}
}
//最终结果:1a2b2b

27、如何将字符串转换为基本数据类型? 如何将基本数据类型转换为字符串?
字符串转为基本数据类型:(1)调用基本类型包装类.parseXXX(String),如Integer.parseInt(“1”);(2)调用基本类型包装类.valueOf(String),如Integer.valueOf(“1”)
基本数据类型转换为字符串:(1)直接""+基本数据类型,如""+1;(2)String.valueOf(基本数据类型),如String.valueOf(基本数据类型)。
28、怎样将GB2312编码的字符串转换为ISO-8859-1编码的字符串?

String s1 = "你好";
String s2 = new String(s1.getBytes("GB2312"), "ISO-8859-1");

29、如何实现字符串的反转及替换?

		String str = "abcdefg";
		StringBuffer str1=new StringBuffer();
		for (int i = str.length() - 1; i >= 0; i--) {
			str1.append(str.charAt(i));
		}
		str=str1.toString();
		System.out.println(str);

30、比较一下Java和JavaSciprt。
java是静态语言,js是动态语言;
java是面向对象语言,js是脚本脚本;
java执行前需要编译,js不需要编译;
java使用变量前要声明变量类型,js可以不声明
31、try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,什么时候被执行,在return前还是后?
finally里的代码肯定会执行,在return钱执行。
32、列出一些你常见的运行时异常?
ClassCastException (类转换异常)
IndexOutOfBoundsException(下标越界异常)
NullPointerException(空指针异常)
SecurityException(安全异常)
IllegalArgumentException(非法参数异常)
33、List、Set、Map是否继承自Collection接口?
List、Set是继承Collection接口,Map不是。
34、Collection和Collections的区别?
Collection是接口,List、Set继承自它;
Collections是类,其中的方法可以对容器进行排序、搜索、线程安全化等操作。
35、List、Map、Set三个接口存取元素时,各有什么特点?
List存放元素有序,可重复;
Set存放元素无序,不可重复;
Map是以键值对的形式存取元素。
36、Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别?
sleep()是线程类(Thread)的方法只是让出机会给其他线程,并不会释放对象锁,指定时间后,线程自动恢复;
wait()是Object类的方法,调用该方法后,线程释放对象锁,只有等到调用notify()或notifyAll()方法后才会重新获得对象锁。
37、线程的sleep()方法和yield()方法有什么区别?
sleep()让出机会给其他线程不考虑优先级,低优先级的线程有机会运行,yield()只给同优先级或高优先级的线程让出机会;
sleep()执行后,线程进入阻塞状态,yield()方法执行后进入就绪状态;
sleep()方法抛出InterruptedException异常,yield()不抛出异常;
sleep()比yield()有更好的可移植性。
38、当一个线程进入一个对象的synchronized方法A之后,其它线程是否可进入此对象的synchronized方法B?
不能,其他线程只可进入该对象的非同步方法,当线程进入对象的同步方法后,该对象的锁就被该线程拿走了,其他线程想进入该同步方法只有等待对象锁。
39、请说出与线程同步以及线程调度相关的方法。
sleep()、wait()、notify()、notifyAll()
40、编写多线程程序有几种实现方式?
(1)继承Thread类
(2)实现Runnable接口
41、事务的ACID是指什么?
原子性(Atomic):事务要么都提交,要么都回滚;
一致性(Consistent):事务结束后系统状态是一致的;
隔离性(Isolated):并发执行的事务彼此无法看到对方的中间状态;
持久性(Durable):事务完成后所做的改动都会被持久化。
42、获得一个类的类对象有哪些方式?

String.class;
"hello".getClass();
Class.forName("java.lang.String")

43、Servlet的运行过程?
Web容器加载Servlet并将其实例化后,Servlet生命周期开始,容器运行其init()方法进行Servlet的初始化;请求到达时调用Servlet的service()方法,service()方法会根据需要调用与请求对应的doGet或doPost等方法;当服务器关闭或项目被卸载时服务器会将Servlet实例销毁,此时会调用Servlet的destroy()方法。
44、JSP有哪些内置对象?作用分别是什么?
request:封装客户端请求;
response:封装服务器端响应;
session:封装会话对象;
out:输出服务器响应的输出流对象;
page:页面本身;
exception:封装异常;
config:配置对象;
application:封装服务器运行环境对象;
pageContext:通过该对象可以获取其他对象。
45、讲解JSP中的四种作用域。
page:与页面相关的对象和属性;
request:客户机发出请求的对象和属性;
session:客户机与服务器建立会话的对象和属性;
application:与整个web相关的对象和属性。
46、转发(forward)和重定向(redirect)的区别?
转发:网址不变,请求服务器一次,服务器行为;
重定向:网址变化,请求服务器两次,客户机行为。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值