java基础面试
文章平均质量分 73
学习快乐小王子
这个作者很懒,什么都没留下…
展开
-
成员变量与局部变量
局部变量和成员变量定义 局部变量和成员变量他们的定义不同,在不同的位置可能就是不同的变量,根据声明的位置不同: 局部变量 定义在方法体{}中,形参上,代码块{}中。 存放在 栈 中,方法执行完就没了。 成员变量 在类中,但是在方法外。 类变量: 有static修饰,存放在方法区中,整个类共享。 实例变量: 没有static修饰,存放在堆中,实例自己拥有。 案例 public class VariableCase { static int s; int i; int j;原创 2021-12-11 13:42:00 · 154 阅读 · 0 评论 -
方法参数传递机制
Java中方法传递机制,到底是值传递还是引用传递???这个要必要深究一下。 同样,先说 结论 ①当形参是基本数据类型的时候,是值传递。 ②当实参是引用数据类型的时候,传递的是地址值,同时,**还需要注意:String 和 包装类型的值是不可变的。**比如:String str = “word”; 这个word是在字符串常量池中,不可改变,如果进行了一些操作,是会创建出新的字符串。 案例 public class Case { public static void main(String[] args原创 2021-12-08 19:23:07 · 508 阅读 · 0 评论 -
类加载过程 --父子类构造方法、静、非静代码块/变量加载顺序问题
概述 弄清楚父子类的加载过程,各个类中静态/非静态变量、静态/非静态代码块、构造方法、普通方法等的加载过程对于推断最终的结果非常重要。 结论 先给出总的结论。 类初始化过程 (1)一个类要创建实例需要先加载并初始化该类。 main()方法所在的类需要先加载并初始化。 (2)一个子类要初始化需要先初始化父类。 (3)一个类初始化就是执行<clinit>()方法。 <clinit>()方法包括:静态变量和静态代码块,他们的加载顺序同执行顺序。且只执行一次。 总的来说,类加载的时候先加载父原创 2021-12-08 11:37:29 · 1032 阅读 · 0 评论 -
设计模式 -- 单例模式
单例设计模式 分为两种: 1. 饿汉式 不管需不需要这个对象,只要类加载了,就把他创建出来。 不存在线程安全问题。 写法1: /** * 单例模式 --> 饿汉式 * 在类加载的时候就创建出这个对象,不管需不需要用到 * * (1)构造器私有化 * (2)使用类型进行调用 */ public class Singleton1 { //构造器私有化 private Singleton1(){} //使用静态变量提供这个类的实例 --> 这里的修饰符是publ原创 2021-12-07 21:37:19 · 122 阅读 · 0 评论 -
数值计算i++,++i原理剖析
数值计算 学习java虚拟机是怎么计算两个数的,特别是有i++ 和 ++i 这些场景的时候。 总结 赋值“=” 是最后计算的,右边所有的计算完成才会进行赋值。 =右边的数按照从左到右的顺序压入到操作数栈中。 不同运算符计算的顺序按照运算符的优先级。 自增(i++,++i),自减(i–,--i)都是直接修改变量的值,不会经过操作数栈。 赋值前的临时结果也放在操作数栈中。 题目: public static void main(String[] args) { int i = 1;原创 2021-12-07 17:17:01 · 946 阅读 · 0 评论