- 1.使用new关键字创建对象。
- 2.使用Class类的newInstance方法(反射机制)
- 3.使用Construcetor类的newInstance方法(反射机制)
- 4.使用clone方法创建对象
- 5.使用(反)序列化机制创建对象。
三十五、简述path和pathclass的区别?
path是系统变量,跟java无关,里面存放的是各种可执行的应用程序的路径。
ClassPath是java使用的,从字面上来理解,就是类的路径,主要是模仿path,将类文件的路径配置到classpath中实现在系统的任何位置可以对类文件进行编译和执行。
三十六、java的关键字中有没有goto?
goto是java中的保留字不是关键字的一员
三十七、static关键字是什么意思?java中是否可以覆盖要给private方法或者static方法?
static关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。
在java中static方法不能被覆盖,因为方法覆盖是基于运动时动态绑定的,而static方法是编译时静态绑定的,static方法跟类的任何实例都不相关。
三十八、构造器是否可以被overide?
Constructor(构造器)不能被继承,所以不能被override(重写),但是可以被overload(重载)
三十九、简述&和&&的区别?
&和&&都可以用作逻辑与的运算符,标识逻辑与(and)。
当运算符两边的表达式的结果都是true时,整个运算结果才位true,否则,只要由一方位false,则结果位false。
&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式&,还可以用作位运算符。
四十、垃圾回收机制。
GC是什么?为什么有GC?
GC是垃圾收集的意思。
是指JVM用于释放那些不再使用的对象所占用的内存,垃圾回收可以有效的防治内存泄漏,有效的使用可以使用的内存,java由GC,就不需要人工释放内存空间了。
在java中,对象什么时候可以被垃圾回收?
一般情况下,java中UI相爱那个可被回收的前提是:该对象不再被引用,然后垃圾回收器再回收的时候便会把这个对象清理掉。
java中会存在内存泄漏么?
会存在,内存泄漏是指程序分配的堆内存未释放或者无法释放的现象。
原因:长生命周期的对象持有短生命周期的对象的引用。
java中内存泄漏的发生场景:全局的集合变量,不正确的单例模式的使用。
java中内存泄漏产生的原因可能有哪些?
- 静态集合类引起的内存泄漏
- 当集合里面的对象属性被修改后,再调用remove()方法时不起作用。
- 监听器
- 各种连接
- 内部类和外部模块的引用。
- 单例模式
java中垃圾回收的目的?什么时候进行回收?
垃圾回收的目的时:识别并且丢弃应用而不再使用的对象来释放和重用资源。
如果对象的引用被置为null,垃圾收集器是否会立即释放对象占用的内存?
不会,会在下一个垃圾回收周期中,这个对象才是可以被回收的。
垃圾回收机制有集中方法:标记清除,复制,标记整理,分代收集算法。
四十一、讲一讲java内存的堆(heep)、栈(stack)和方法(method)
栈:调用方法时,将会在栈中开辟出一片内存,称为入栈(压栈)。栈内存放基本数据类型值和引用数据类型的地址,栈内存中的数据,没有默认初始值,需要手动设置,方法调用完成后,栈内存立即释放,称为弹栈。
堆:用于存放使用new创建的对象和数组,所有的对象都有内存地址值,数据都有默认初始化值,堆内存中的对象不再被引用时,jvm启动垃圾回收机制,进行自动清除。
方法区:与java堆一样,各个线程共享的区域,存储已经被java虚拟机加在的类信息,常量,静态变量,和编译器编译后的代码等。
四十二、++i、i++、+=这些运算符的含义?
++i:先自增,后赋值。
i++:先赋值,再自增
+=: a+=b =》a=a+b
四十三、super()和this()的区别?
this表示对象本身,用来调用当前类的属性,方法,也可以调用从父类继承而来的未被重写,非私有的方法。
super表示当前对象类的父类对象部分,用来调用父类里的属性方法。
this和super用来调用构造器方法。
- 不同点:super()从子类中调用父类的构造器,this()再同一类内调用其他构造方法。
- 相同点:super()和this()都必须再构造函数的第一行进行调用,否则就是错误。
四十四、replace和replaceAll的区别?
replace的参数是:char和charSwquence,即可以支持字符的替换,也支持字符串的替换(char和charsequence即字符串序列的意思,也就是字符串。)
replaceAll参数是:regex。即基于正则表达式的替换,比如:可以通过replaceAll("\d", "*")把一个字符串所有的数字字符都换成星号;
相同点:
- 都是全部替换,即把源字符串中的某一字符 或者字符串全部换成指定的字符或者字符串。
不同点:
- replaceAll支持正则表达式,因此会对参数进行解析(两个参数均是),如replaceAll("\d", "*"),而replace则不会,replace("\d","*")就是替换"\d"的字符串,而不会解析为正则
- “”在java中是一个转义字符,所以需要用两个代表一个。例如System.out.println( "\" ) ;只打印出一个""。但是“”也是正则表达式中的转义字符,需要用两个代表一个。所以:\\被java转换成\,\又被正则表达式转换成,因此用replaceAll替换“”为"\",就要用replaceAll("\\","\\\\"),而replace则replace("\","\\")。
如果只是想替换第一次出现的,可以使用replaceFirst(),这个方法也是基于规则表达式的替换,但与replaceAll()不同的是,只替换第一次出现的字符串。
四十五、静态变量和成员变量的初始化时机?
静态初始化只在Class独享首次被加载的时候进行一次。
成员变量初始化,在new对象的时候被初始化,在构造函数的隐式三步其中一步进行初始化,初始化完成以后才会执行构造器中的代码。
四十六、while循环和do循环有什么不同?
while结构在循环的开始判断下一个迭代是否应该继续。
dowhile结构在循环的结尾来判断是否继续下一轮迭代,do结构至少会执行一次循环体。
四十八、break和Continue?
break常用于循环中,含义:结束循环,跳出循环体。
其他应用场景:switch语句中,结束语句。
continue:结束本次循环,进入下一个循环中。
四十九、for循环和增强for哪一个遍历list集合更快?为什么?
ArrayList使用普通for循环效率更高,因为对于数组结构的数据来说,for循环采用的是下标访问。
但是linkedList是通过链表实现的,for循环每次获取第i个元素都必须从头开始进行遍历,foreach是通过iterator实现的遍历,而iterator遍历就是从头开始遍历的,遍历完只需要一次,所以增强for效率更高。for和foreach循环效率差不多。for循环更加好一点,但是对于链表来说foreach的效率更高。
五十、反射的原理及其应用?
原理:反射在程序运行时,能够动态的操作类的成员。
反射的前提:通过字节码获得class对象。
反射的操作:通过Class对象对构造Constructor,字段field,方法method进行动态操作。
本文地址:http://lanlanwork.gawce.com/quote/9193.html 阁恬下 http://lanlanwork.gawce.com/ , 查看更多