零基础学Java
个人学习Java的经历记录
简单即真理
爱好技术,喜欢破解,极客主义,开源主义
展开
-
logback 中SizeAndTimeBasedRollingPolicy 的maxFileSize不生效的问题
当我将其设置成<maxFileSize>1KB</maxFileSize>的时候死活不生效。就是不给我按照大小分割。将logback的日志信息打印如下:Archive files will be limited to [1 KB] each.明明是生效了啊,怎么回事呢?原来,是这个1KB设置的太小了,logback"来不及切割",因为我其实就想测一下这个按照大小分割的功能,所有设置了1KB。按照前人经验,得设置成10MB,才能看出来。因此我直接写了个循环,把log原创 2021-01-20 00:24:44 · 10369 阅读 · 1 评论 -
28 关于JAVA多态中认识的一个误区
问题再现有下面三个JAVA代码,其中内容如下问:输出的结果是0还是1?// Father.javapackage demo01;public class Father { public int num=0; public void method(){ System.out.println("我是父类中的方法"); }}// Son.javapackage demo01;public class Son extends Father{ pu原创 2020-09-12 22:55:55 · 99 阅读 · 0 评论 -
27 log4j2发送Syslog日志出现乱码错误
乱码是个啥我们说的乱码,大部分其实都是中文乱码。例如这次我遇到的,“北京” 两个汉字变成了 “鍖椾含”出现乱码的原因我们知道,电脑屏幕显示的汉字其实是由一个个像素点构成的。而一个汉字其实对应一个字符码。推导一下,每一个字符码对应一种像素点的组合方式。如下图:解码与编码我们可以这样理解,把字符码变成像素点的过程就叫做"解码"那么反之,像素点变成字符码的过程叫做"编码"字符集那么,咱们解码和编码不能瞎搞吧,0x666我解码成"好",过几天我又解码成"你",这样肯定是不行的。我们需要一原创 2020-09-10 22:28:40 · 3689 阅读 · 0 评论 -
26 为什么JAVA中的外部类不用private或者protected修饰
1 不用private修饰原因:private修饰的变量或者方法都只能在本类中可见。假设private可以修饰类,也就是说任何类都无法再访问到这个类。不就相当于,在一个包里面,只有一个类,那个类是(default)的。所以,没有必要再去用一个private修饰符。2 不用protected修饰符protected修饰的类或者方法只能在本包或者子类中可以访问。假设有一个不同包的子类要访问父类中的某个protected修饰的变量。第一步是先要把这个类导入进来。假设有一个类是可以用protec原创 2020-08-15 16:01:45 · 1248 阅读 · 0 评论 -
25 JAVA中的局部变量,只声明不赋值在内存中的样子
上面的一段话,用代码描述如下:public class Demo01 { public static void main(String[] args) { int a; System.out.println(a); }}结果呢?都无法通过编译。。。更不要谈 内存了。有人说,你可以把代码这么改,如下:public class Demo01 { public static void main(String[] args) {原创 2020-08-09 21:24:04 · 1047 阅读 · 0 评论 -
24 关于自动类型转换以及向上转型的一点思考
自动类型转换: 基本类型向上转型: 多态我学习的时候,对于自动类型转换很容易理解。但是对于向上转型总得思索一番。我看很多视频提供了一个依靠自动类型转换来方便记忆的办法:double a = 30;// a=30.0,自动发生所以:Fu f = new Zi(); // 自动发生。他们将 Fu f 类比于 double a;new Zi() 类比于 int 30。我思索了一下,总觉得有点问题。double a是double 类型,比int 类型范围要大的多。但是父类 f 要比 子.原创 2020-08-04 23:05:19 · 204 阅读 · 1 评论 -
23 Interface类的成员变量
Interface类的成员变量其实也是常量。因为成员变量是由 public static final修饰的。由于final(不可更改)关键字,所以虽然成员变量都有初始值。但是此处必须在声明的时就赋值,否则与final关键字矛盾!因为初始值必然是要被重新赋值的。常量的书写方式,必须都是大写,用下划线分割。public interface MyInterface { public static final String MY_GIRL_FRIEND = "杨幂";}...原创 2020-07-29 18:57:03 · 599 阅读 · 0 评论 -
22 构造方法这继承中的特点
已知,在创建子类对象的时候,是先创建父类对象,再创建子类对象。由此得出,在子类的构造方法中,必然又一个super.父类构造方法哪怕不写,编译器也会默认加上。验证本帅哥的猜想,Fu.javapublic class Fu { public Fu(){ System.out.println("这是父类构造方法"); }}Zi.javapublic class Zi extends Fu{ public Zi(){ System.out.原创 2020-07-25 18:27:05 · 86 阅读 · 0 评论 -
21 Override的几个注意点
1 使用注解帮忙检测如果我们不确定自己写的方法是不是正确的覆盖了,可以在方法前面添加Override帮助我们检查。2 返回值的范围要小于等于父类被覆盖的方法举一个形象的例子:王总是个父类,有一个方法earnMoney。返回值是long。小王总,也有个earnMoney的方法,但是小王总之所以会赚钱是因为老王总的投资。所以小王总挣得钱不会比老王总还要高。因此返回值类型要么是long,要么是long之下的,不可能float,double。因为这方法是继承自老王总的,只能传承,不能发扬光大。3 方法原创 2020-07-25 17:01:45 · 286 阅读 · 0 评论 -
20 重写和重载的区别
Override(覆盖)也叫重写(我认为这样翻译不太好,还是叫覆盖好),发生在继承中,子类的方法名称,参数列表和父类一样。Overload(重载)方法名称一样,参数列表不一样。原创 2020-07-25 16:32:35 · 108 阅读 · 0 评论 -
19 轻松一点理解静态成员方法不能访问非静态成员变量
书本上上的回答:因为内存中是先有静态内容,再有非静态内容。上面这个解释太抽象了。很难记得住,还是举个例子比较好。新建一个类:Coder类public class Coder { /** * 定义布尔型成员变量 "头秃" * 定义静态成员变量 "职业" */ boolean 头秃; static String 职业 = "写代码";}我们知道,程序员不一定都秃顶,但职业肯定是写代码。所以 【头秃】 是非静态的,由具体对象决定;【职业】是.原创 2020-07-22 22:34:31 · 810 阅读 · 1 评论 -
18 JAVA中的static
简单的理解一下一个类共有的,与对象无关的,就可以用static。图示如上图所示,人类这个类。每个人都是这个类的对象。每个人都是独一无二的。但是作为同属 人 “类” 不管哪一个独立的对象,我们都是直立行走的。从节省内存考虑,完全没有在new 一个新的人类对象的时候,都要新增一个直立行走这个属性。所以此时,这里的“直立行走”就可以使用static来修饰。...原创 2020-07-22 18:34:29 · 92 阅读 · 0 评论 -
17 JAVA中的字符
需求:键盘输入一个字符串,统计其中大写字母,小写字母,数字和其他字符出现的次数大体思路代码参考import java.util.Scanner;/** * 键盘输入一个字符串 * 统计字符串中的大写字母,小写字母,数字,其他 * <p> * 分析: * 1. 用到scanner类 * 2. 获取输入的字符串 * 3. 对字符串中对每一个字符进行分析 * 4. 四个变量作为结果返回 */public class Demo01 { public stat.原创 2020-07-21 23:24:06 · 150 阅读 · 0 评论 -
16 Java中的分割
/** * 字符串切割 * public String[] split(String regex) * <p> * 注意,参数是一个正则表达式,需要加两个 \\ */public class Demo05 { public static void main(String[] args) { String str1 = "aaa,bbb,ccc"; String[] array1 = str1.split(","); for (i原创 2020-07-16 21:33:34 · 168 阅读 · 1 评论 -
15 字符串格式的小数转换成int类型
“100.0” --> 100大家觉得没问题。但是“100.6” --> 100 还是 101呢?电脑并不知道,因此下面代码会报错/** * String 类型的 100.0 不能直接被转换成python */public class Demo01 { public static void main(String[] args) { String str1 = "100.3"; // 自动拆箱 int a = Integer原创 2020-07-16 15:10:35 · 2556 阅读 · 2 评论 -
14 Java中equals使用的小技巧
/** * public boolean equals(Object obj) * Object类型可以接收任何对象 * 推荐写法 * 常量.equals(变量) * public boolean equalsIgnoreCase(String str) */public class Demo03 { public static void main(String[] args) { String str1 = "abc"; System.out.prin原创 2020-07-14 23:27:58 · 181 阅读 · 0 评论 -
13 JAVA中的String(1)
/** * 3+1 String的构造方法 * 1. 空 * 2. char[] * 3. byte[] byte是数字 * 4. 字面值 * <p> * 注意: * String不能更改,但是可以共享 */public class Demo01 { public static void main(String[] args) { String str1 = new String(); System.out.println("第一种字符原创 2020-07-14 22:01:34 · 153 阅读 · 0 评论 -
12 Java中的ArrayList
import java.util.ArrayList;/** * 1. size() 获取ArrayList里面的元素个数 * 2. add() 有返回值,对于ArrayList来说,这个方法一定会执行成功 * 因此返回值是true * 3. get(int index) index是从0开始的 * 4. remove(int index) 会返回被remove的元素 */public class LearnArrayList { public static void main(S原创 2020-07-08 22:51:24 · 130 阅读 · 0 评论 -
11 JAVA的匿名对像
Personpublic class Person { String name; // 成员变量默认的修饰符是default,只能在当前类或者同一个包中访问 public void showName() { System.out.println("我是" + this.name); }}Demo01Anonymous/** * 匿名对象 * 普通标准格式 * 类名称 变量 = new 类(); * * 匿名:new 类() * 注意事项,每一次原创 2020-07-06 22:34:11 · 162 阅读 · 0 评论 -
10 JAVA中的局部变量和成员变量
/** * 局部变量和成员变量 * * 1. 定义的位置不一样 * 局部变量定义在方法之中 * 成员变量定义在类中 * * 2. 作用范围不一样 * 局部变量只能在方法的内部 * 成员变量作用在整个类 * * 3. 默认值不一样 * 局部变量没有默认值,局部变量要使用,必须先要初始化 * 成员变量有默认值 * * 4. 生命周期不一样 * 一般情况下 * 局部变量,随着方法入栈诞生,方法在栈内存中出栈之后就没了 * 成员变量,随着对象被创建诞生,随着对象被垃圾回收而消失原创 2020-07-02 23:57:55 · 102 阅读 · 0 评论 -
09 JAVA对内存的划分
栈(Stack)存放的都是方法中定义的局部变量局部变量: 方法的参数,或者是方法体中定义的变量方法都在栈中运行堆(Heap)凡是new出来的东西都在堆中存放堆里面存放的东西都有地址值堆内存的数据都有默认值如果是整数,默认为0 (byte/short/int/long)如果是浮点数,默认为0.0(double/float)如果是字符,默认为 ‘\u0000’如果是布尔,默认为false如果是引用类型,默认为null方法区(Method Area)存储.class原创 2020-06-30 18:13:16 · 98 阅读 · 0 评论 -
08 JAVA编译器对常量的优化二
/** * 编译器对常量的优化二 * 对于byte/short/char来说,当这三种数据类型进行计算的时候 * 会自动提升成int类型 * 编译器对于常量的计算,是自动完成的,不会放到jvm中去运行 */public class Demo02 { public static void main(String[] args) { byte result = 13; }}...原创 2020-06-30 08:23:18 · 148 阅读 · 0 评论 -
07 JAVA编译器对常量的优化(一)
/** * 编译器对常量优化一 * 对于byte/short/char来说,如果右边是常量 * 那么编译器会对其进行一个优化,自动强转 * */public class Demo01 { public static void main(String[] args) { byte a = 30; // 实际上编译器会改成 byte a = (byte)30; }}...原创 2020-06-30 08:03:46 · 169 阅读 · 0 评论 -
06 JAVA三元运算符
/** * 什么是三元运算符 * 一元运算符: 只需要一个数据参与,例如 !、自增、自减 * 二元运算符: +... * 三元运算符: 三个数据参与 * <p> * 数据格式: * 变量类型 变量名称 = 表达式A ? 表达式B : 表达式C * <p> * 注意事项: * 类型要一致 * 一定要用上 */public class Demo10DataType { public static void main(String[] args) {原创 2020-06-27 19:46:53 · 124 阅读 · 0 评论 -
05 JAVA强制类型转换
简单的就不说了,说一下易错点:也就是下面的第三点/** * 强制类型转换 * 1.特点: 代码需要进行特殊的格式处理,不能自动完成 * 2.特点: 范围小的类型 范围小的变量名 = (范围小的类型) 范围大的数据; * 注意事项: * 1. 强制类型转换一般不推荐使用,会发生精度丢失,数据溢出 * 2. byte/short/char都可以发生数学运算,例如"+" * 3. byte/short/char在进行计算的时候,首先被提升成为int类型,再进行计算 */public原创 2020-06-23 21:25:04 · 145 阅读 · 0 评论 -
04 JAVA基本数据类型的自动类型转换
自动类型转换注意两点即可:1. 是自动发生的2. 触发条件:由可表示数据范围小的向可表示数据范围大的转换时看代码/** * 数据类型转换 * 自动转换(隐式): * 触发条件: 数据范围由小到大 * 特点: 自动完成 */public class Demo01DataType { public static void main(String[] args) { // 普通的正常写法 long num1 = 100L;原创 2020-06-22 10:30:21 · 454 阅读 · 0 评论 -
03 JAVA基本数据类型
四大类:整数型 byte、short、int、long浮点型 float、double字符型 char布尔型 boolean八大种数据类型关键字最小单位内存占用可表示数字的范围字节型byte1个字节-128~127短整型short2个字节-32768~32767整型int(默认)4个字节-231 ~ 231-1长整型long8个字节-263 ~ 263-1单精度浮点数float4个字节1.4E-45~3.40282原创 2020-06-20 00:03:36 · 112 阅读 · 0 评论 -
02 一张图理解JDK、JRE、JVM之间的关系
三者关系如图:原创 2020-06-19 23:20:21 · 248 阅读 · 0 评论 -
01 两张图搞定Java语言的跨平台特性
我学java赚了很多钱,要分别去韩国,日本,泰国旅游。但是我不懂这三个国家的语言。所以,我准备请三个翻译。让他们把我的普通话,翻译成当地的语言。我说的普通话,就相当于我编写的java程序。这三个国家的翻译就相当于三种jvm虚拟机。所以说,java跨平台的特性这种说法并不严谨。只能说,java对开发人员来讲是跨平台。因为,甲骨文公司已经把各种平台的jvm给你做好了。我们可以体会一下这种设计思想。...原创 2020-06-08 00:15:02 · 349 阅读 · 0 评论 -
SpringBoot初体验之idea新建项目
目录新建项目为啥没有官网下载安装重启 idea出现了新建项目点击新建,怎么没有Spring Initializr,那我咋新建?我的图片教程图片为啥没有查了一下资料,原来这玩意得先去下载一个插件。实际上我觉得这种工具类的东西,让人更加方便了,但是也更加愚笨了,按照道理,就算用文本文档也应该可以创建一个springboot项目的。先不管了,我是新手,先去下载插件吧。下载失败了,没办法,这个市场太垃圾。基本上啥都转不出来。如下图。官网下载官网下载现在新版的选择第一个就成安装重启原创 2020-06-05 15:05:49 · 182 阅读 · 0 评论 -
关于java.io.File类中getParent()方法的疑惑
目录疑惑的地方原来是这样疑惑的地方public class TestFile_02 { public static void main(String[] args) { String separator = File.separator; String testDir = separator+"Users"+separator+"pythonbug"+separator+"a.txt"; File f = new File(testDir);原创 2020-05-27 23:43:42 · 429 阅读 · 0 评论 -
Java的StringBuffer初识
目录可变常用方法apend例子insert例子delete例子可变例子:public class StringBuffer_01 { public static void main(String[] args) { StringBuffer strb = new StringBuffer("123"); strb.append("abc"); System.out.println(strb); }}图解:我们可以看到,这与Str原创 2020-05-24 16:40:12 · 149 阅读 · 0 评论 -
Java中的String(1)
目录String不可变一个例子字符串常量的优化是对象的情况下常用的方法String不可变摘自JDK1.8 API文档Strings are constant; their values cannot be changed after they are created.这玩意被创造出来之后就是不可变的了。如下代码:public class String_01 { public static void main(String[] args) { // 1 String是不原创 2020-05-18 00:20:20 · 513 阅读 · 0 评论 -
Producer可以创建topic却无法send消息
1 问题描述创建的Java Producer API发送数据,但是consumer的时候却无法看到发送的数据。不过可以成功创建topic。2 机器简介我有四台linux集群(不是虚拟机,都是单独的物理机,四台树莓派):hostnamebroker-listIP地址power1broker0192.168.31.2slaves1broker1192.168...原创 2020-02-06 13:16:30 · 2360 阅读 · 0 评论 -
Java中的常量命名規則
這裏的常量特指被final修飾的常量。如果是單個字母,需要大寫。如果是單詞組合,需要用下劃線分開並且都大寫。一定要注意規範。例子如下:public class FinalDemo { public static void main(String[] args) { final int N = 65;//this is the upper case final double PI = 3....原创 2018-03-21 23:53:13 · 1304 阅读 · 0 评论 -
Java中的char
第一:char會把數字轉換成Unicode對應的字符顯示出來例如:第二:char類型的字符如果跟int類型的數據用"+"連接,會被轉換成Unicode對應的數值進行計算。原创 2018-03-19 21:58:04 · 1876 阅读 · 1 评论