
Java基础
Java侠客
深漂Java高级开发工程师
7年Java开发经验,分享工作经验以及Java相关专业知识
帮助想要入门的,初中级的同学,少走弯路
希望能够结识热爱编程的朋友,一起学习一起进步
小楼昨夜又东风,聊聊编程,聊聊人生
展开
-
Java中==和equals的区别
==运算符: 1, 可以使用在基本数据类型变量和引用数据类型中 2, 如果用在基本数据类型的比较中,比较两个变量保存的数据是否相等(不一定要类型相同,Java运算符会存在自动类型提升) 如果用在引用数据类型变量中,比较的是两个变量的地址值 比如 int i = 10, double y = 10.0,那么i==y会等于true equals方法的使用: 1,是一个方法,不是运算符 2,只能用在引用数据类型中 3,object类中equals方法的定义,即类中不复写equals方法时的默认行为:原创 2022-04-08 09:41:28 · 497 阅读 · 0 评论 -
Java中不会触发类初始化的几个操作
一,Java中不会触发类初始化的几个操作: 1,通过子类引用父类的静态字段,不会导致子类初始化 2,通过数组定义来引用类,不会触发此类的初始化 3,常量在编译阶段会存入调用类的常量池中,本质上没有直接引用到定义常量的类,因此不会触发定义常量的类的初始化。 4,当调用目标类的静态变量或静态方法时,不会触发该类的代码块或构造方法的执行 二,final类型的成员变量一定要初始化,可以在构造方法或者代码块中初始化final字段: //构造方法初始化 class Person { pu...原创 2022-04-07 09:46:07 · 700 阅读 · 0 评论 -
Java中方法重写的权限修饰符
子类重写的方法的权限修饰符不小于父类被重写的方法的权限修饰符,子类不能重写父类中被private修饰的方法 1,对于返回值:父类是void,子类一定是void 如果父类是基本数据类型,子类只能是同样的基本数据类型 2,如果父类是A类型,则子类返回的只能是A类或者A类的子类 3,子类重写的方法抛出的异常类型不能大于父类被重写的方法抛出的异常类型 解释:在编译的时候的异常是父类定义的,如果子类抛出的异常比父类的大,在运行的时候执行的是子类的方法,就会有代码风险 4,子类和父类中的同名同参数的方法要么原创 2022-04-06 17:44:02 · 1185 阅读 · 0 评论 -
Java中的多态
在 Java 中实现多态有 3 个必要条件: 1,满足继承关系 2,要有重写 3,父类引用指向子类对象,编译看左边,运行看右边 对象的多态性只适用于方法,不适用于属性,属性的编译和运行都看左边 多态是运行时行为: 重载是早绑定(静态绑定),编译期就确定了 重写是晚绑定(动态绑定),运行时才确定 重载不认为是多态,因为在编译期就确定了 多态的举例: Object obj = 1; System.out.println(obj); 输出的结果是1,我们都知道Ob..原创 2022-04-06 09:44:41 · 316 阅读 · 0 评论 -
Java中Long缓存
Long 最被我们关注的就是 Long 的缓存问题,Long 自己实现了一种缓存机制,缓存了从 -128 到 127 内的所有 Long 值,如果是这个范围内的 Long 值,就不会初始化,而是从缓存中拿,缓存 初始化源码如下: private static class LongCache { private LongCache(){} // 缓存,范围从-128到127,+1是因为有个0 static final Long cache[] = new Long[-(-128)原创 2022-04-05 14:32:40 · 1471 阅读 · 0 评论 -
Java中的非法向前引用
非法向前引用的例子: 那么为什么类似于i= "1234";这样的代码可以呢?这是因为Java对其中的某些情况做了“特许”,其中有一条就是“通过简单名称引用的变量可以出现在左值位置,但不能出现在右值的位置”,所以前面的代码可以,但System.out.println(i);不行,因为这是一个右值引用。 其目的是避免循环初始化和其他非正常的初始化行为。 什么是循环引用,看一下下面这个例子: privateinti=j; privateintj=i; 如果没有前面说的强制检查,那么这两句代原创 2022-04-05 10:58:01 · 392 阅读 · 0 评论 -
Java中的this关键字
通常情况下,调用当前对象的属性或方法,省略this关键字,特殊情况下,比如方法(或者构造器)的形参和类的属性同名时,我们必须显示调用this. String name; public JTest(String name){ this.name = name; } this调用构造器 1,我们在类的构造器中,可以显示的使用“this(形参列表)”方式,调用指定的本类的其他构造器 2,构造器中不能通过this(形参列表)方式调用自己 3,如果一个类中有n个构造器,那么最多有n-1个构造器原创 2022-04-04 10:05:52 · 296 阅读 · 0 评论 -
面向对象和面向过程的区别
面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做 面向对象:强调具备了功能的对象,以类/对象为最小单位,考虑谁来做 举例说明:人把大象塞到冰箱里 1:面向过程设计,开发三个函数 1)把冰箱门打开 2)抬起大象,塞进冰箱 3)把冰箱门关闭 2:面向对象设计,设计三个类,每个类有具体功能 class 人{ 打开(冰箱){ 冰箱.开门(); } } class 冰箱{ 开门(); } class 大象{ 进入(); } ...原创 2022-04-02 16:12:23 · 115 阅读 · 0 评论 -
Java数组初始化和工具类的使用
1,一维数组的初始化方式 1,int[] a = new int[]{1,2}; 2,int[] b = new int[2]; 3,int[] c = {1,2};//类型推断 2,二维数组的初始化方式 1,int[][] k = new int[i][j]; 2, int[][] m = new int[3][]; 3,int[][] n = new int[3][2]; 动态初始化 int[][] k = {{},{},{},{}}; int[][] k = new int[][]{{},{原创 2022-04-02 12:03:25 · 826 阅读 · 0 评论 -
Scanner类中next()方法和nextLine()方法的区别
Scanner类中next()方法和hasNext()方法的区别 从键盘输入值 Scanner scanner = new Scanner(System.in); String next = scanner.next(); System.out.println(next); next()方法只有扫描到有效字符后才会结束输入(用户没有输入的时候不会结束);next()方法会自动去掉空白(例如回车、空格等),也不能得到带有空格的字符串;输入hello world,结果只会出来hello,空格以及后面的w原创 2022-04-02 09:59:30 · 562 阅读 · 0 评论 -
BigDecimal精度丢失问题
使用BigDecimal的构造函数进行封装Double、Float型数值的时候,实际创建的值与我们期望的值会出现误差,因此在进行运算时会出现精度的丢失。如何避免:使用new BigDecimal(String); public BigDecimal(double val) 1.此构造方法的结果有一定的不可预知性。有人可能认为在 Java 中写入 new BigDecimal(0.1) 所创建的 BigDecimal 正好等于 0.1,但是它实际上等于 0.10000000000000000555111原创 2022-04-01 09:44:22 · 1107 阅读 · 0 评论 -
Java中为什么局部变量需要显式设置初始化值?
对于成员变量而言,其赋值和取值访问的先后顺序具有不确定性。 比如在下面的代码中,name的赋值可以发生在调用dumpField方法之前,也可以发生在调用dumpField方法之后。这是在运行时发生的,在编译器来看确定不了的。 编辑切换为居中 添加图片注释,不超过 140 字(可选) 对于没把握的事情,javac是不会去做的,这种事情交给运行时的JVM就可以了。 编辑切换为居中 添加图片注释,不超过 140 字(可选) 而对于局部变量来说,其访问的先后顺序是确定的 假使局部变量可以原创 2022-03-31 09:32:12 · 439 阅读 · 0 评论 -
Java数据类型
1,java数据类型 基本数据类型: 整型:byte/short/int/long(默认为int类型,默认值为0) 浮点型:float/double(默认为double类型,默认值为0.0) 字符型:char(默认值为‘\u0000’) 布尔型:boolean(boolean值占4个字节,boolean数组占1个字节,默认值为false) 引用类型:引用类型的默认值为null 类(class) 接口(interface) 数组(array) 2,浮点数叫法的由来: 浮点类...原创 2022-03-30 09:57:57 · 164 阅读 · 0 评论 -
JVM,Jdk和Jre的关系
JRE中包含了JVM和Java的标准类库,比如我们常用的Java lang包下面的类就是放在标准类库中 JDK包含了JRE和一些开发工具集,比如我们常用的java,javac等命令 我们安装JDk的时候,会默认包含jre ...原创 2022-03-29 15:00:35 · 4755 阅读 · 0 评论 -
Java中设置Path、classpath、JAVA_HOME的作用?
Path:Windows系统在dos命令行中执行命令的时候,会先从当前路径去找,如果找不到,就会到path路径下查找,如果没有设置Path,那么执行java命令的时候只能进到jdk的安装目录里面才能执行,因为设置了Path,所以我们可以在系统的任意路径下面执行java命令 CLASSPATH:作用是指定类搜索路径,要使用已经编写好的类,前提是能够找到它们了,JVM就是通过CLASSPATH来寻找类的.class文件。我们需要把jdk安装目录下的lib子目录中的dt.jar和tools.jar设置.原创 2022-03-29 13:58:36 · 709 阅读 · 0 评论