Android面试题Java基础篇,由本人整理汇总,后续将继续推出系列篇,如果喜欢请持续关注和推荐,更多精彩内容可以关注微信公众号(Android高级编程):android-tech
系列文章目录:
一个语言的编译过程
Java 中内部类为什么可以访问外部类
因为内部类创建的时候,需要外部类的对象,在内部类对象创建的时候会把外部类的引用传递进去
java类加载过程:
静态方法跟静态代码块有什么区别
静态方法属于类,用类名.就能直接调用,静态代码块是类加载的时候就会调用的
关键字final和static是怎么使用的
final:
static:
String,StringBuffer,StringBuilder区别
StringBuffer跟StringBuider的区别
StringBuider非线程安全,执行速度快,单线程用这个类
Java中重载和重写的区别:
Java中实现多态的机制是什么?
答:方法的重写Overriding和重载Overloading是Java多态性的不同表现
说说你对Java反射的理解
JAVA反射机制是在运行状态中, 对于任意一个类, 都能够知道这个类的所有属性和方法; 对于任意一个对象, 都能够调用它的任意一个方法和属性。 从对象出发,通过反射(Class类)可以取得取得类的完整信息(类名 Class类型,所在包、具有的所有方法 Method[]类型、某个方法的完整信息(包括修饰符、返回值类型、异常、参数类型)、所有属性 Field[]、某个属性的完整信息、构造器 Constructors),调用类的属性或方法自己的总结: 在运行过程中获得类、对象、方法的所有信息。
说说你对Java注解的理解
元注解的作用就是负责注解其他注解。java5.0的时候,定义了4个标准的meta-annotation类型,它们用来提供对其他注解的类型作说明。
@Target
@Retention
@Documented
@Inherited
switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
switch能作用在byte、char、short和int上,JDK1.7后可以作用在String上。
”==”和equals方法究竟有什么区别?
==和equals都可以比较地址。==是运算符,equals是方法,方法可以通过重写改变其行为,如String的equals就是比较字符串内容。
构造方法能否被重写和重载?
构造方法不能被重写但是能被重载。
面向对象的特征有哪些?
封装、继承、多态和抽象。
抽象类和接口的区别?
内部类可以引用它的包含类的成员吗?有没有什么限制?
可以引用。如果需要指定当前类时要用外部类.this来引用。如果引用局部变量,需要将局部变量指定为final。
String s = new String(“xyz”);创建了几个String Object? 二者之间有什么区别?
2个对象。”xyz”创建在字符串常量池中,new String()创建在堆中。
try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
会在return前执行。
Integer与int的区别
Integer为包装类,int是基本数据类型。包装类拥有方法和属性,基本数据类型不具备。包装类可以通过intValue来转换成基本数据类型,也可以通过new Integer()将基本数据类型转换为包装类。在JDK1.5后,包装类和基本数据类型可以实现自动转换。
java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
java中有三种流,分别是字节流(InputStream、OutputStream)、字符流(Reader、Writer)、对象流(ObjectInputStream、 ObjectOutputStream)。
谈谈final,finally,finalize的区别?
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
java中只有值传递,如果传递的对象,实际也是传递该对象的地址。
用最有效率的方法算出2乘以8等於几
将2的二进制向左移3位,java中用<<来移位
是否可以从一个static方法内部发出对非static方法的调用?
不能,除非先创建非static方法所在类的对象。
什么是内部类?内部类的作用
内部类可直接访问外部类的属性
Java中内部类主要分为成员内部类、局部内部类(嵌套在方法和作用域内)、匿名内部类(没构造方法)、静态内部类(static修饰的类,不能使用任何外围类的非static成员变量和方法,不依赖外围类)
使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。 因为Java不支持多继承,支持实现多个接口。但有时候会存在一些使用接口很难解决的问题,这个时候我们可以利用内部类提供的、可以继承多个具体的或者抽象的类的能力来解决这些程序设计问题。可以这样说,接口只是解决了部分问题,而内部类使得多重继承的解决方案变得更加完整。
静态属性和静态方法是否可以被继承?是否可以被重写?以及原因?
可继承 不可重写 而是被隐藏
如果子类里面定义了静态方法和属性,那么这时候父类的静态方法或属性称之为"隐藏"。如果你想要调用父类的静态方法和属性,直接通过父类名.方法或变量名完成。
java的对象锁和类锁的区别
java的对象锁和类锁在锁的概念上基本上和内置锁是一致的,但是,两个锁实际是有很大的区别的,对象锁是用于对象实例方法,或者一个对象实例上的,类锁是用于类的静态方法或者一个类的class对象上的。我们知道,类的对象实例可以有很多个,但是每个类只有一个class对象,所以不同对象实例的对象锁是互不干扰的,但是每个类只有一个类锁。但是有一点必须注意的是,其实类锁只是一个概念上的东西,并不是真实存在的,它只是用来帮助我们理解锁定实例方法和静态方法的区别的