您的位置:首页 > 编程语言 > Java开发

关于java的一些相关知识点

2018-03-03 14:08 417 查看

1.JVM ClassLoader加载机制

1.启动类加载器 bootstraploader,在jvm与运行的时候加载java核心的api
2.用java程序实现的两个ClassLoader 扩展类Extclassloader和AppClassloader
3.类加载的过程中使用了父类委托机制,避免重复加载,安全,不不可以让自定义的String类来取代系统自带的核心类


2. jvm使用统一编码Unicode characters来表示

3. i++和++i的区别

i++  :先引用后增加
++i  :先增加后引用
i++  :先在i所在的表达式中使用i的当前值,后让i加1
++i  :让i先加1,然后在i所在的表达式中使用i的新值


java中使用了中间缓存变量的机制
所以i=i++;其实i值不变
temp=i;
i=i+1;
i=temp;
而i=++i;i值会改变
i=i+1;
temp=i;
i=temp;


4. length和length()的区别

String[] a = {"a", "b"};
System.out.println(a.length);
System.out.println(a[0].length());
length是数组长度,
length()是字符串长度


5.强制类型转换d

1.低级变量可以直接转化为高级变量,
byte b; int i = b; long c = i;
2.高级变量转化为低级变量,需要强制类型转换
int i; byte b = (byte)i;
3.系统默认的浮点数是double型
float z=1.0f 要加个f,不能直接写成float z = 1.0;
4.进制转换
int a = 078,错误的表达的方式,
0 是八进制,以0开头,由0~7组成的数
0x 是十六进制 ,以0x开头,由0~9,A~F或a~f组成的数
5.
short e = 1;e=e+1;是错误的,
因为e+1会变成int形式,而e还是short形式,所以编译错误。
6. java的移位操作是 32>>32还是32,没有变,因为32位是int整形变量,即一个循环,回到原来的位置


6.ASCII码表基本数值

0为48
A为65
a为97


7.final ,finally, finalize的区别

1.声明为final的变量,意味着不能再派生新的字类,
2.finally负责异常的最后资源的释放。
3.finalize是方法名,子类覆盖finalize()方法以整理系统资源或者
其他清理操作
4.try{}里面有一个return代码,则finally代码块会在return之前运行。


8.反射机制

反射主要指可以访问,检测和修改自身的状态或行为的一种能力,
它使java能够灵活地创建代码,这些代码可以在运行时装配,
无需在组件之间链接,反射允许在编写和执行时,
使程序代码能够装载到jvm的内部代码信息,
而不是源代码中选定的类协作的代码。

java的类反射Reflection是java开发语言的特征之一,
它运行将java程序对自身进行检查。并能操作程序的内部属性。


9.java传值和传引用

str=“aaa”;
先生成一个变量
对于基本类型变量,java是传值的副本,变量值不会改变
对于一切对象型变量,java是传引用的副本。


10.默认初始值

boolean 默认初始值为false;
static int 默认初始值为0;


11.字符串和整数的互换

String s = "11";
int a = Integer.parseInt(s);


12.垃圾收集器的标准

两个:
(1) 给对象赋予了空值null,以后再也没有调用过,
(2) 给对象赋予了新值,即重新分配了空间。


13.java是如何管理内存的

java通过new来创建对象,
然后通过垃圾收集器来管理,对象的释放由GC决定和执行的
GC为了能够正确释放对象,必须监控每一个对象的运行状态,包括对象的申请,
引用,被引用,赋值等,GC都需要进行监控。
对象不再引用,被GC回收。


14.java的内存泄露

1.对象是可达的,即在有向图中,存在通路与其相连,
2.对象是无用的,程序以后不会在使用这些对象。

(1)忘记“释放”之前分配的内存,有可能引起内存泄漏。


15.java创建对象的几种方法

(1)用new来创建对象
(2)运用反射手段,调用java.lang.class或者java.lang.reflect.Construction类
的newInstance()实例方法。
(3)调用对象的clone()方法
(4)运用反序列化手段,调用ObjectInpputStream的readObject方法


16.java的Collections针对集合的帮助类

- 排序 Collections.sort(list);
- 混排 Collections.shuffling(list);
- 反转 Collections.reverse(list);
- 使用指定元素替换列表中所有的元素 Collections.fill(li,"a");
- 返回最小值 Collections.min(list);
- 返回最大值 Collections.max(list);
- 查询指定元素在集合中出现的次数 static int frequency(Collection coll,Object o);


17.如何选择容器类

1. 在各种list中,默认是ArrayList;当插入删除频繁时,选用LinkList
2. 在各种Set中,HashSet通常优于HashTree(插入,查找),
当需要一个已 经排序的序列,用TreeSet


18.派生类调用父类构造函数

1. 派生类被构造时一定会先调用父类的构造函数
2. 若不指定,就会调用无参数的构造函数
3. 普通的类方法是可以和类名同名的,和构造方法唯一的区别是,构造方法没有返回值


19.继承与接口

1. 静态方法不能被覆盖
2. super调用继承父类构造函数
3. this指向当前对象
4. 接口的方法默认是public abstract
5. 接口的属性默认是public static final常量
6. final和abstract不能同时出现;


20.”==”和“equals”的区别

==判断符号左右两个变量是否指向同一地址
equals 判断两个object是否一样


21. 字符串的操作

String a= "ABCDEFG"
substring(3,5)是输出DE,substring
是包括前面不包括后面


22.java的常量池,被放到了堆空间

1.
String a = "aaa";
String b = "aaa";
a==b为true,因为"aaa"已经存储在常量池中
String a= "aaa";
String b = new String("aaa");
a==b为false,因为会new一个新对象
2.
int a=5;
Integer b=5;
a==b为true,因为这涉及到装箱和拆箱的过程,包装类。
3.
String s = "a"+"b"+"c"+"d";
就创建了一个对象,
对于常量,编译时直接存储它们的字面值,而不是它们的引用,在编译时直接
将它们的连接的结果提取出来变成了"abcd".
4.
String s = “hello”;
JVM先根据“hello”的内容来查找对象,如果没有找到,就在heap上创建新的对象,并将其赋给s1,否则使用已经存在的对象。
String s = new String("hello");
直接new一个新的对象,会产生内容相同而地址不同的String对象。


23.intern()方法

查找内容相同的字符串(equals())
String s1="hello";
String s2=new String("hello");
s2=s2.intern();   //查找内容相同的字符串并将其指向给s2,
所以s1和s2指向同一个s1;
s1==s2为true.


24.String和StringBuffer()方法的区别

1.
String result = "hello"+"world";
StringBuffer result = new String()
.append("hello").append("world");
使用"+"比StringBuffer好些,因为StringBuffer还有个append操作
2.
StringBuffer str = new StringBuffer();
for(i=0;i<5000;i++){
str.append("a");
}d
//StringBuffer内部实现的是char数组,默认初始长度为16;
//每当长度大于char数组的长度时,JVM会产生更大的数组,
//再将原来的数组复制到新的数组中。所以用StringBuffer,
//最好是给它指定合适的大小,
StringBuffer str = new StringBuffer(6000);
3.
使用"+="会多创造新的String对象,造成浪费


25.GC线程是否为守护线程

线程分为守护线程和非守护线程(用户线程)
只要当前JVM实例中还有一个非守护线程存在时,所有的守护线程就全部工作,
只有当最后一个非守护线程结束时,守护线程随着JVM一起结束,守护线程最
典型的时GC线程
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: