大家好,又见面了,我是你们的朋友全栈君。
1、面向对象与面向过程的区别?
面向过程的语言拥有封装、继承、多态的特性,使得整个代码灵活性高,比如Java,C++。容易维护,容易扩展。
面向过程的语言直接跟内存打交道,性能要更好,比如java是需要跟虚拟机做交互,先编译解释成机器码。再跟操作系统打交道。大多数面向过程的语言基本都是直接编译成机器码在操作系统上进行执行。所以性能更好。
但是java经过多年的发展,性能提升了很大,各位读者要记住java yyds!
2、成员变量和局部变量的区别
与c++不同的是java中没有全局变量的概念。
成员变量:也称为类变量,是定义在类中的变量。
局部变量:是定义在形参,或者是方法体内,或者是代码快中的变量。
**注意:静态代码块中只能给静态变量赋值
关于静态方法,静态变量的内容可以参考文章
https://blog.csdn.net/xxlovect/article/details/7455813
接上:关于成员变量与局部变量的赋值问题
如果一个变量被定义为static那么他就被称之为静态成员变量,简称为静态变量。如果是static,finnal修饰那么就称之为全局常量。
对于finnal修饰的变量,是在编译的时候就分配内存,对于其初始化,是在类加载过程中的链接环节里面的准备环节进行赋值。对于局部变量,系统不会为其分配初始值。除了final修饰的变量,其他变量是在链接阶段的准备环节进行默认赋值,在类加载过程中的初始化过程完成显式赋值。
对于类加载过程,博主会在后续更新一些jvm的知识总结,可以关注博主。
3、 关于try-catch-finanl
IDEA中可以使用快捷键Alt+Shift+Z 来对一块代码进行异常处理。
try模块用来捕获异常,catch模块处理异常,finally模块中的代码不管什么情况下都会执行(在正常捕获异常的情况下,或者没有异常的情况下)。
如果finnal中的代码不执行一定是做了一下三件事:
- 在 try 或 finally 块中用了 System.exit(int)退出程序。但是,如果 System.exit(int) 在异常语句之后,finally 还是会被执行。
- 线程死亡
- cpu死亡(close CPU)
4、在多线程中,线程的sleep(),yield(),wait(),join()有什么区别?
Thread.sleep():此方法使线程进入阻塞状态*,让cpu交出执行权,但是不会释放锁。
Thread.yield():此方法使线程进入可运行状态,让cpu交出执行权,同样不会释放锁。
Thread.wait():使线程从运行状态转为阻塞状态,释放线程的同步锁
Thread.join():此方法可以保证一个线程在Thread线程执行前结束(优先级大于自己的线程)。
5、推荐将数组转化为Arraylist的方式
图片来源:https://gitee.com/SnailClimb/JavaGuide/blob/master/docs/java/basis/Java%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86%E7%96%91%E9%9A%BE%E7%82%B9.md
6 遍历集合的方式
- 使用foreach
- 使用迭代器
- 使用用法如下图
在foreach中不能使用remove来移除元素,在迭代器方式中可以。
原理:如果要进行remove操作,可以调用迭代器的 remove 方法而不是集合类的 remove 方法。因为如果列表在任何时间从结构上修改创建迭代器之后,以任何方式除非通过迭代器自身remove/add方法,迭代器都将抛出一个ConcurrentModificationException,这就是单线程状态下产生的 fail-fast 机制。
fail-fast 机制 :多个线程对 fail-fast 集合进行修改的时,可能会抛出ConcurrentModificationException,单线程下也会出现这种情况,上面已经提到过。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/156826.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...