admin 管理员组文章数量: 1086019
java核心概念
1 java的8种基本数据类型
- byte-1:Byte
- short-2:Short
- int-4:Integer
- long-8:Long
- float-4:Float
- double-8:Double
- char-2:Character
- boolean-1:Boolean
2 jdk和jre的区别
- jdk:java开发工具包,是完整的java软件开发包,包含jre和jvm。
- jre:java运行时环境,包括java虚拟机,还有一些插件。
3 static关键字的意义,java中是否可以覆盖static的方法
- 意义:static修饰的成员变量或者是成员方法是静态的,在类加载的时候就加载了,不需要创建实例(对象)访问。
- static修饰的方法不能被覆盖,因为static修饰的方法是静态的,覆盖是动态的。
4 是否可以在static环境中访问非static变量
不能,static变量属于类,在类加载的时候就加载了,但是非static变量属于对象,类加载的时候还没有创建对象。
5 java中的构造函数,构造函数的重载,构造函数的复制?
- java通过构造函数创建对象,在没有提供构造函数的情况下会生成一个默认的空参构造函数
- 构造函数的重载和方法的重载类似,每个构造器都有不同的参数列表
- java不支持复制构造函数
6 java支持多继承吗
- java的类不支持多继承
- java的接口支持多继承
7 接口和抽象类的区别
-
接口
- 接口中所有的方法都是抽象的
- 接口可以多继承
- 接口中声明的变量默认都是final修饰的
- 接口中的成员函数默认都是public的
- 接口不能被实例化
-
抽象类
- 抽象类中可以包括抽象方法和非抽象的方法
- 抽象类只能单继承
- 抽象类可以包含非final修饰的变量
- 抽象类成员函数可以是private,protected,public
- 抽象类也不能被实例化,但是抽象类具有main方法可以被调用
8 值传递和引用传递
- 值传递:是针对基本类型的变量而言,传递的是该变量的副本,不影响原变量
- 引用传递:传递的是该变量的地址,影响原变量
9 java集合类框架的基本接口
- Collection:代表一组对象,每一个对象都是它的子元素
- Set:不包含重复元素的Collection
- List:有顺序的Collection,可以包含重复元素
- Map:key-value映射
10 Iterator和Listiterator的区别
- iterator:可以遍历Set和List集合,只能向前遍历
- ListIterator:只能遍历List,可以向前向后遍历,实现了Iterator接口
11 java创建对象的四种方式
-
new关键字
-
反射
- Class.newInstance
- Constructor.newInstance
-
clone :实现Cloneable接口,复用clone方法
-
反序列化
12 解决hash冲突
-
链地址法:hashMap使用的方法
-
在哈希法:提供多个哈希函数,第一个重复换一个函数在计算
-
建立公共溢出区:
-
开放定址法:
-
线性探测法
当a和b的hash值冲突,a正常计算hash值,b的hash值为a后面最近的未被占用的hash值
f(key) = (f(key)+<1,2,3…m-1>) % m
-
二次探测法:避免线性探测造成的堆积
f(key) = (f(key)+(或-)<12,22,32…m2>) % m
-
13 throw和throws的区别
- throw:在程序中抛出一个异常
- throws:在方法体中声明要抛出的异常
14 Class.forName()方法的作用,反射
初始化参数指定的类,返回Class对象,将目标类加载到内存中.
15什么是servlet
severlet是客户端请求并产生动态网页内容的java类.
14 x.equals(y)==true,但是hash code不同,是否正确
正确。如果是在hashSet或者是HashMap中则不对。
15 乐观锁和悲观锁的理解
乐观锁:比较乐观,认为别人不会在自己操作的时候修改数据,不会上锁,在修改提交更新数据的时候会判断别人有没有更新数据,如果别人没有修改更新,当前对象对数据操作成功,否则根据不同的实现方式执行不同的操作.可以提高吞吐量.
悲观锁:每次对数据进行操作都会上锁,悲观的认为每次自己拿数据别人都会对数据进行修改.java的synchronized的实现是基于悲观锁的
16 线程池
线程池是为了解决线程大量爆发的问题而设计的,通过几个有限的线程给大量的操作去服务,目的是减少创建和销毁线程的时间,提高程序效率,对于执行时间比较长的线程并不是很建议使用线程池,线程池不能很好的控制线程的状态.
17 静态变量和普通变量的区别
1-静态变量就是static变量,是所有对象共享的,在程序第一次加载的时候会初始化,只有一个副本(所有对象共享)<初始化顺序是按照定义顺序来的>
2-普通变量是随着对象的创建而产生的,在创建对象的时候会初始化(每个对象创建不同的副本).
18 java有哪些锁
- 悲观锁和乐观锁
- 悲观锁:每次操作数据都会上锁,适合写操作多的场景
- 乐观锁:判断其他事务是否会就改数据,如果修改了就拒绝更新,适合读操作多的场景
- 公平锁和非公平锁
- 公平锁:根据顺序访问数据
- 非公平锁:随机获取锁访问数据
- 共享锁和独享锁
- 共享锁:读锁,可以查看数据,不能修改数据
- 独享锁:排它锁,同时只能被一个事务占用
- 可重入锁和不可重入锁
- 可重入锁:递归锁,外层事务对数据进行锁定,内层的事务可以继续访问数据
- 不可重入锁:事务中的某个方法获取锁,其他锁阻塞
- 自旋锁
- 如果锁被其他事务获取,就一直循环判断等待,一直到获取到锁
19 面向对象的特征
- 抽象:把显示中的一个事物抽象成Java的对象
- 继承:继承是为了提高代码的复用性,子类可以继承父类公有的方法和属性
- 封装:就是把数据通过设置权限的方式封装起来,达到保护的目的。
- 多态:是指不同的对象对同一消息做出响应。
20 &和&&的区别
- &是位运算符,表示按位与运算
- &&是逻辑位运算符,表示逻辑与
21 java序列化和反序列化
- 序列化:将对象转化为字节序列的过程
- 反序列化:将字节序列转化为对象
22 序列化的实现
让目标对象的类实现Serrializabale接口
23 如果对象里面部分数据不想被序列化如何处理
在字段前加transient关键字
transient private String username;//不参加序列化
24 String、StringBuffer和StringBuilder的区别?
- String:作为字符串操作基本类型,String提供了长度不可变的字符串。
- StringBuffer:提供长度可变的字符串,线程安全,但是效率低一些。
- StringBuilder:提供长度可变的字符串,线程不安全,但是效率要高一些。
25 重载(Overload)和重写(override)的区别
- 重载:发生在同一个类中,方法名相同,参数列表不同,与返回值类型无关
- 重写:发生在不同的类中,子类重写父类的方法,实现接口重写接口的方法;方法名相同,参数列表不同,返回值类型相同或为其子类,访问权限不能严与父类。
26 abstract class 和interface 有什么区别?
- abstract class(抽象类):可以有抽象方法和普通方法,抽象方法要被子类重写,除非子类是抽象类,可以有自己的属性,只能单继承。方法的修饰符可以是任意的。
- interface(接口):只能有抽象方法,可以多继承,所有方法都需要被实现类实现,定义的属性默认都是
java public static final
修饰的。方法的修饰符默认是public的
27 final在Java中的作用
- final修饰的类叫最终类,类不能被继承。
- final修饰的方法不能被重写。
- final修饰的变量叫常量,常量必须初始化,值不能被改变。
28 final、finally和finalize的区别
- final:修饰符,修饰类为最终类不能被继承,修饰方法不能被重写,修饰变量为常量不能被修改。
- finally:try-catch-finally,默认会执行的模块
- finalize:Java垃圾回收机制中的方法,在执行垃圾回收的时候调用回收对象的该方法。
29 如何决定使用HashMap还是TreeMap?
- TreeMap<key,value>的key值是要求实现Comparable,所有TreeMap默认按照Key值升序排序,基于红黑树.继承自AbstractMap
- HashMap<key,value>的key是基于hashCode(),分布是散列的,不支持排序,是基于数组和链表的.继承自SortedMap
结论:在需要有序的时候使用TreeMap,否则建议使用HashMap(效率高)
30 单例模式的几种写法
30.1 饱汉模式
// 饱汉
// UnThreadSafe
public class Singleton1 {private static Singleton1 singleton = null;private Singleton1() {}public static Singleton1 getInstance() {if (singleton == null) {singleton = new Singleton1();}return singleton;}
}
- 绝对的线程安全
// 饱汉
// ThreadSafe
public class Singleton1_1 {private static Singleton1_1 singleton = null;private Singleton1_1() {}public synchronized static Singleton1_1 getInstance() {if (singleton == null) {singleton = new Singleton1_1();}return singleton;}
}
- DCL0.1
// 饱汉
// UnThreadSafe
public class Singleton1_2 {private static Singleton1_2 singleton = null;public int f1 = 1; // 触发部分初始化问题public int f2 = 2;private Singleton1_2() {}public static Singleton1_2 getInstance() {// may get half objectif (singleton == null) {synchronized (Singleton1_2.class) {if (singleton == null) {singleton = new Singleton1_2();}}}return singleton;}
}
- 性能好
// 饱汉
// ThreadSafe
public class Singleton1_3 {private static volatile Singleton1_3 singleton = null;public int f1 = 1; // 触发部分初始化问题public int f2 = 2;private Singleton1_3() {}public static Singleton1_3 getInstance() {if (singleton == null) {synchronized (Singleton1_3.class) {// must be a complete instanceif (singleton == null) {singleton = new Singleton1_3();}}}return singleton;}
}
30.2 饿汉模式
// 饿汉
// ThreadSafe
public class Singleton2 {private static final Singleton2 singleton = new Singleton2();private Singleton2() {}public static Singleton2 getInstance() {return singleton;}
}
30.3 Holder模式
// Holder模式
// ThreadSafe
public class Singleton3 {private static class SingletonHolder {private static final Singleton3 singleton = new Singleton3();private SingletonHolder() {}}private Singleton3() {}public static Singleton3 getInstance() {return SingletonHolder.singleton;}
}
30.4 枚举模式
// 枚举
// ThreadSafe
public enum Singleton4_1 {SINGLETON("enum is the easiest singleton pattern, but not the most readable") {public void testAbsMethod() {print();System.out.println("enum is ugly, but so flexible to make lots of trick");}};private String comment = null;Singleton4_1(String comment) {this.comment = comment;}public void print() {System.out.println("comment=" + comment);}abstract public void testAbsMethod();public static Singleton4_1 getInstance() {return SINGLETON;}
}
31 java中的注释
- 单行注释
- 多行注释
- 文档注释 : 一般用于注释类和方法
//这是一个单行注释/*
这是一个多行注释
*//**
*这是一个文档注释
*/
32 引用数据类型
- String
- 数组
- 对象
33 静态代码块,构造代码块,局部代码块
- 静态代码块,在类加载的时候加载,只加载一次;
- 构造代码块,在方法外部,每次创建对象都会加载一次;
- 局部代码块,在方法内部,每次调用方法加载.
- 执行顺序: 静态代码块->构造代码块->构造方法->局部代码块
本文标签: java核心概念
版权声明:本文标题:java核心概念 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1686559674a10278.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论