Java面试小结1
来源:互联网 发布:java中的set和get方法 编辑:程序博客网 时间:2024/05/17 02:16
Java 应用程序中的变量可以为以下两种类型之一:引用类型或基本类型。
1、对象是按引用传递的。
2、Java 应用程序有且仅有的一种参数传递机制,即按值传递。
3、按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本。
4、按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本。
String等类型特殊对待。
java equal()方法和==
1)对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;如果作用于引用类型的变量,则比较的是所指向的对象的地址。
2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。
java类的初始化顺序
1.父类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
2.子类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
3.父类的实例成员和实例初始化块,按在代码中出现的顺序依次执行。
4.执行父类的构造方法。
5.子类实例成员和实例初始化块,按在代码中出现的顺序依次执行。
6.执行子类的构造方法。
接口与抽象类的区别
第一点. 接口是抽象类的变体,接口中所有的方法都是抽象的。而抽象类是声明方法的存在而不去实现它的类。
第二点. 接口可以多继承,抽象类不行
第三点. 接口定义方法,不能实现(Java8新增加了默认方法),而抽象类可以实现部分方法。
第四点. 接口中基本数据类型为static而抽类象不是的。
第五点. 接口中不能含有静态代码块以及静态方法(Java8新增加了静态方法),而抽象类可以含有静态方法和静态代码块。
接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的
什么时候使用抽象类和接口
• 如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。
• 如果你想实现多重继承,那么你必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。
如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。
访问控制 private protected public default(同一包中)
bool和Boolean 区别
bool是基本数据类型
Boolean是是bool的封装类,有属性有方法,可以new。
java常量池
常量池在java用于保存在编译期已确定的,已编译的class文件中的一份数据。
用final修饰的成员变量表示常量,值一旦给定就无法改变!
final修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。
Java是一种动态连接的语言,常量池的作用非常重要,常量池中除了包含代码中所定义的各种基本类型(如int、long等等)和对象型(如String及数组)的常量值还,还包含一些以文本形式出现的符号引用,比如:
类和接口的全限定名;
字段的名称和描述符;
方法和名称和描述符。
Java中的常量池,实际上分为两种形态:静态常量池和运行时常量池。
所谓静态常量池,即*.class文件中的常量池,class文件中的常量池不仅仅包含字符串(数字)字面量,还包含类、方法的信息,占用class文件绝大部分空间。
而运行时常量池,则是jvm虚拟机在完成类装载操作后,将class文件中的常量池载入到内存中,并保存在方法区中,我们常说的常量池,就是指方法区中的运行时常量池。
java常量池技术 java中的常量池技术,是为了方便快捷地创建某些对象而出现的,当需要一个对象时,就可以从池中取一个出来(如果池中没有则创建一个),则在需要重复创建相等变量时节省了很多时间。常量池其实也就是一个内存空间,常量池存在于方法区中。String,StringBuffer,StringBuilder的区别及应用场景
String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象
而如果是使用 StringBuffer 类则结果就不一样了,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。所以在一般情况下我们推荐使用 StringBuffer ,特别是字符串对象经常改变的情况下。
StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。
String 字符串常量
StringBuffer 字符串变量(线程安全)tringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。
StringBuilder 字符串变量(非线程安全) StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。
1.如果要操作少量的数据用 String
2.单线程操作字符串缓冲区 下操作大量数据 StringBuilder
3.多线程操作字符串缓冲区 下操作大量数据 StringBuffer
数组
数组是一组相关数据的集合,数组按照使用可以分为一维数组、二维数组、多维数组
要使用java的数组,必须经过两个步骤:(1)声明数组,(2)分配内容给该数组,这两个步骤的语法如下:
线程与进程的区别
12.创建线程
1.实现Runnable接口
2.继承Thread类(也是实现了Runnable接口)
3.实现Callable接口
13.启动线程
14.线程池(优点,实现)
15.反射机制
动态加载类
Class.forName(“com.a.Test”).getConstructor().newInstance();
16.如果两个键的hashcode相同,你如何获取值对象
HashMap在链表中存储的是键值对,找到哈希地址位置之后,会调用keys.equals()方法去找到链表中正确的节点,最终找到要找的值对象
- Java面试小结1
- java面试小结
- java 面试小结
- Java面试小结(一)
- java面试小结
- java面试小结
- java基础面试知识点小结
- java技术面试基本问题小结
- 两年java面试问题小结
- Java面试中多线程问题小结
- Java集合知识点小结(面试)
- 【面试】京东高级Java工程师面试小结
- 【面试】去哪儿网Java工程师面试小结
- 【面试】京东高级Java工程师面试小结
- 面试小结
- 面试小结
- 面试小结
- 面试小结
- 倒计时js和html代码
- 重学SpringMVC入门第一课 2017.02.19
- 状态模式
- c++的分离式编译模式为什么不支持模版
- Bootstrap 面板
- Java面试小结1
- 图像处理基础(5):双边滤波器
- 解决ScrollView下嵌套ListView、GridView显示不全的问题
- hibernate一对多关系配置案例
- jvm笔记06:java内存模型和线程
- Leetcode 54 - Spiral Matrix(螺旋打印矩阵)
- MySQL常用函数
- try代码体抛出的异常,级别要小于等于catch住的异常类型
- Cocos2d-x动作Action