
Java SE篇
文章平均质量分 82
深入了解 Java 语法知识
小扳
有一天,小扳手走进了一家五金店。它看到了各种各样的工具,有锤子、钳子、螺丝刀等等。小扳手觉得自己在这里太小了,不起眼,很容易被忽视。
展开
-
初识JAVA篇-JAVA文件的执行
首先我先要了解JDK,JVM,javac,简单粗暴的来说,JDK是一个工具箱,里面包含了javac(编译器:用于将Java源代码编译成字节码文件(.class文件)。它是Java开发中的重要工具之一。例如,要编译名为"HelloWorld.java"的Java源代码文件,可以在命令行中输入以下命令: javac HelloWorld.java(重点)它用于将Java源代码文件(以.java为扩展名)编译成Java字节码文件(以.class为扩展名),以便能够在Java虚拟机(JVM)上运行。原创 2023-09-21 10:05:33 · 637 阅读 · 3 评论 -
初识JAVA篇-类型转换
竟然报错了,明明是short是该表达式中类型最高的,但是结果类型居然是int类型。那么不得不补充一下重要的知识点了。原因是为了防止两个范围较小的数据加起来越界了,容易发生截断。在接下来我们继续聊聊什么是强制类型转化,跟自动类型转换相反,简单粗暴的来说就是大范围的变量转换成小范围的变量,这个情况发生不能是自动的,是人自己来“干扰的”。但是如果直接转换的话会发生报错。原创 2023-09-23 21:01:23 · 177 阅读 · 5 评论 -
初识JAVA篇-数组
对于字符类型的数组,输出它的变量名不是哈希值,而是数组的内容。这是因为Java中的字符类型数组被重载了toString()方法,该方法会返回数组的内容,而不是默认的哈希值。这样设计是为了方便开发者查看数组的内容,而不需要手动遍历数组来获取每个元素的值。其实这个重载也可以自己定义的。原创 2023-09-22 10:20:24 · 142 阅读 · 5 评论 -
初识JAVA篇-深入理解数组与数组传参
数组的使用与数组如何传参,如何使用数组传参,形参与实参的区别原创 2023-09-22 12:14:22 · 364 阅读 · 9 评论 -
初识JAVA篇-运算符
JAVA简单的运算符使用原创 2023-09-21 17:32:50 · 120 阅读 · 2 评论 -
初识JAVA篇-递归
想要实现递归需要三个条件:一个自己调用自己的方法,还需要一定的递出去的结束条件,不然程序会崩掉(死循环了),最后一个就是根据的需要回归的时候需要返回什么。首先我们先来想想,运用递归的思维,先递出,再回归,完成这两个动作,先得到1,再得到2,再得到3,最后得到4。斐波那契数列的前几个数字依次为:0、1、1、2、3、5、8、13、21、34、55、89、144、...每次递归的时候,这个方法只执行一部分内容,就去执行其他的内容了,而归的时候把剩余的内容再执行完,递的次数与归的次数是一致的。原创 2023-09-21 21:07:45 · 187 阅读 · 5 评论 -
初识JAVA篇-this关键字+构造器+封装
this关键字与构造方法的讲解与使用。接下来好好聊聊封装:是面向对象的三大特性中的其一。它指的是将数据和对数据的操作封装在一个类中,通过访问修饰符来控制对数据的访问。封装可以隐藏对象的内部细节,只暴露必要的接口,提高代码的安全性和可维护性。通常情况下,类的属性都应该使用private修饰符进行封装,通过public方法提供对属性的访问和修改。这样可以保证属性的安全性,同时也可以在方法中添加逻辑判断、数据验证等操作,提供更精确的控制。原创 2023-09-26 17:53:20 · 203 阅读 · 9 评论 -
初识JAVA篇-标识符
同理,方法名的命名方式与类名大致相同:标识符中可以包含字母,数字,下划线,$符号,值得注意的是不能以数字开头,也不能是关键字,且严格区分大小写。上面就是定义了一个方法,然后调用找个方法,看到了为了区分类名,采取了不同的命名方式,是代码看起来更加规范,总之小驼峰就是第一个单词的首字母为小写,后面的单词首字母为大写。好,现在说一下类名的命名规则:标识符中可以包含字母,数字,下划线,$符号,值得注意的是不能以数字开头,也不能是关键字,且严格区分大小写。3.初步了解变量名,现在先用简单的类型来命名,比如。原创 2023-09-21 09:48:24 · 213 阅读 · 2 评论 -
初识JAVA篇-类与对象+深层次的了解类与对象在计算机中的存储原理
先是通过javac编译器生成.class字节码文件,.class在方法区中加载,先是main方法被调用,在栈区上运行,在main方法中有创建了两个引用对象,在堆区上开辟了空间,这两个对象根据自定义的类这个模板定义出来了,用对象名.就可以访问到成员变量和成员方法了,利用这点就可以对成员变量进行赋值了,调用这个成员方法需要用到类地址。这点不需要我们额外去做什么,跟用成员一样,直接对象名.就可以访问到了,只是我们要认识到,这个成员方法并不在堆上。原创 2023-09-26 11:38:47 · 222 阅读 · 6 评论 -
初识JAVA篇-数据类型
补充:简单补充一下“常识”,内存中最小的单位为bit ,即一个bit存放一个1/0,一个字节有八个bit位。在JAVA中不存在所谓的 无符号数字!以上就是int 类型的数据存放的二进制示例图,其余的整型类型基本一样,就不多赘述了。因为每个数据的类型存放的大小都不一样,那么我们作为合格的程序猿,需要合理的数据放在合理的内存上,合理利用。一共有八种类型,将这些概括起来的话可以分为四种类型:整型,浮点型,字符类型,布尔类型。但是注意浮点数的存储与整型的存储不一样,浮点数的存储比较复杂,我们就不过多的探讨了。原创 2023-09-21 12:23:37 · 190 阅读 · 4 评论 -
初识JAVA篇-多态是面向对象的重要特性之一
第一个方面是对象多态,同一种类型可以有多种对象。比如说:先定义一个Person父类,再定义两个子类为Teacher,Student 然后用Person类型定义出两个变量,再用这两个变量分别去new一个对象Teacher 和Student,这样一种类型可以有两种不同的对象,这就是对象多态了。 第二个方面是行为多态,由于对象多态,不同对象的行为不一样,会出现虽然是同一个类型定义的变量去访问相同的行为,但是new出来的对象不同,所以会出现不同的行为,这就是行为多态。原创 2023-10-06 22:33:06 · 167 阅读 · 11 评论 -
初识JAVA篇-字符串与集合
忽略大小写来比较字符串的内容是否相同。原创 2023-09-28 12:02:25 · 138 阅读 · 3 评论 -
初识JAVA篇-继承是面向对象重要的特性之一
继承:JAVA中提供了一个关键字extends,用这个关键字可以让一个类与另外一个类建立起父子关系。继承的特点:在内存中的存放原理:继承的意义: 权限修饰符:就是用来限制类中的成员(变量、方法、构造器、代码块......)能够被访问的范围。 JAVA中支持单继承不支持多继承,但是支持多层继承:重点介绍:重写什么是重写注意原创 2023-10-06 19:56:31 · 271 阅读 · 6 评论 -
初识JAVA篇-深入理解String
字符串的两个重点内容,深层理解字符串,了解常量字符串。结合代码还有图片来看:一开始的时候 String str = "回"; 先会在字符串常量池中查找有没有这个“回”,如果没有就会把这个字符串放到里面,如果有这个字符串 就直接放回该字符串的地址。然后再到 str += "家";先是识别"家"这个字符串在不在常量字符串上,由于这个是一个运算表达式,运算的结果不会放在字符串常量中,回放到普通的堆上存储,接着到这个:str += "咯!"; 同理,先是识别"咯!"在不在常量字符串上,由于是一个运算表达式,开辟空间原创 2023-09-27 21:33:20 · 202 阅读 · 7 评论 -
初识JAVA篇-static修饰成员变量与成员方法
首先在方法区中先加载Test.class还有Student.class类相关的成员方法main与相关成员变量age,由于对象还没有创建,所以堆区上还没有这个空间,还有类变量name,类变量属于类,只有类创建了,类变量会随着类创建而产生,类变量会直接在堆区上开辟一个空间,这个类变量会指向这个空间,默认是null,然后调用main方法,在栈区上运行,如果是类.成员变量的方式来直接访问类变量,会通过static String name 指向改变这个名字。如果是创建对象来间接来访问类变量,先是通过s1来找到堆上的空原创 2023-10-05 19:51:36 · 239 阅读 · 3 评论 -
进阶JAVA篇-Object类与Objects类、包装类的常用API(一)
API中文名为:应用程序编程接口,就是JAVA已经帮我们写好了一些常用的程序,如方法、类等,我们直接拿来用就可以解决一些问题,这样就可以提高开发效率。原创 2023-10-11 21:22:04 · 512 阅读 · 16 评论 -
进阶JAVA篇- Date 类与 SimpleDateFormat 类、Calendar 类常用的API(五)
Date 类是 Java 中表示日期和时间的类,它存储了自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数。它提供了一些方法来获取和设置日期和时间,例如 getYear()、getMonth()、getDate()、getHours()、getMinutes()、getSeconds() 等。Date 类是 Java 中表示日期和时间的类,它存储了自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数。它提供了一些方法来获取和设置日期和时间,例如 getYear()原创 2023-10-14 13:33:39 · 436 阅读 · 18 评论 -
进阶JAVA篇-关键字final
运行后代码报错:其书写的规则为单词全为大写,两个单词以上的话需要用下划线(_)相隔开来。需要注意的是,定义出变量之后必须马上初识化,不然会报错。 其值在初始化后不能再被修改。这意味着final变量只能被赋值一次,并且不能再被重新赋值。 代码如下:报错原因:很显然,我再赋值了一次,它就会提醒我们这个不能再赋值了 。还有一点需要注意,对于基本数据类型来说,用final修饰变量的时候,是不能改变该变量的数值。但对于引用数据类型来说,用final修饰一般来说,用static final来修饰成员变量原创 2023-10-08 10:49:53 · 167 阅读 · 4 评论 -
进阶JAVA篇- Math 类和 System 类、 Runtime 类的常用API(三)
代表数学,是一个工具类,里面提供的都是对数据进行操作的一些静态方法,属于类方法,直接用类名去调用方法。获取传入的数据的绝对值,传入的数据类型可以是 int ,double ,long,float 类型。System 代表程序所在的系统,也是一个工具类,提供了一些静态方法,直接用类名去调用方法。比较两个数的大小,max() 方法返回大的值,min() 方法返回小的值。返回java虚拟机中内存总量,返回来的是字节数,用 long 类型来接收。四舍五入,传进去的是浮点型,返回出来的是整型或者长整型。原创 2023-10-13 12:18:20 · 357 阅读 · 6 评论 -
进阶JAVA篇-抽象类与接口
我们可以理解为接口是一种特殊的抽象类,它只能包含抽象方法和常量,不能包含非抽象方法。通过关键字interface去定义接口,接口的内容只能是常量,还有抽象方法,所以这个接口是不能去创建对象的,接口是被类通过implements关键字实现的,实现接口的类是实现类。一个类可以去实现多个接口,这个类必须得写完父类的抽象方法,否则实现类必须定义为抽象类。e.fun();void fun();@OverrideSystem.out.println("重写fun");接口中的变量的修饰是默认加上了。原创 2023-10-08 12:39:53 · 174 阅读 · 15 评论 -
进阶JAVA篇- ZoneId 类与 ZoneDateTime 类、Instant类的常用API(七)
ZoneId 类、ZonedDateTime 类和 Instant 类是 Java 8 中用于处理时区和时间戳的类。of(String zoneId):根据时区标识符创建 ZoneId 对象。getAvailableZoneIds():获取所有可用的时区标识符。getRules():获取此时区的规则,用于处理夏令时等时区变化。systemDefault():获取系统默认的时区。ofOffset(String prefix, ZoneOffset offset):根据偏移量创建 ZoneId 对象。原创 2023-10-15 16:53:32 · 1469 阅读 · 4 评论 -
进阶JAVA篇-异常处理:解读与解决编程中的意外情况
自定义异常是指根据特定的需求和场景,自行定义的异常类。通过自定义异常,可以提供更具体和可读性的异常信息,以便于开发人员在程序出现错误时能够更好地理解和调试问题。简单的来说就是 Java 无法为世界上的所有问题都提供异常类来代表,如果企业自己的某种问题,相通过异常来表示,那就需要自己来定义异常类了。因为有两种类型的异常,所以方式会稍微不同,但是情况大部分都是一样的。先定义一个类继承,然后重写有参数的构造器,最后通过new自定义的类并且在构造器中传入需要报错的信息,再通过关键字throw抛出这个对象。原创 2023-10-18 20:28:01 · 393 阅读 · 18 评论 -
进阶JAVA篇-StringBuilder类与StringBuffer类的常用API(二)
最本质的原因就是,StringBuilder 类型的字符串 对字符串操作之后都会返回对象本身,不会创建新的对象,而 String 类型的字符串 每一次对字符串操作之后都会在栈区上 new 一个新的String 类型的对象,所以操作 String 类型的字符串 的效率不如操作 StringBuilder 类型的字符串。原创 2023-10-12 12:06:34 · 475 阅读 · 9 评论 -
进阶JAVA篇- DateTimeFormatter 类与 Period 类、Duration类的常用API(八)
DateTimeFormatter 类用于格式化和解析日期时间对象,可以将日期时间对象转换为字符串,也可以将字符串转换为日期时间对象。它提供了一系列的预定义格式化模式,也支持自定义格式化模式。Period 类用于表示日期之间的差距,可以表示年、月、日之间的差距。它可以用于计算和操作日期对象之间的差距,例如计算两个日期之间相差几天、几个月、几年等。Duration 类用于表示时间之间的差距,可以表示小时、分钟、秒、毫秒、纳秒之间的差距。它可以用于计算和操作时间对象之间的差距,例如计算两个时间之间相差几小时、几原创 2023-10-15 20:56:53 · 427 阅读 · 14 评论 -
进阶JAVA篇-深入了解内部类
是类的五大成分之一(成员变量,成员方法,构造器,内部类,代码块),如果在一个类内部定义一个类,这就是内部类。当一个类的内部,包含完整的事务,而这个事务又没有必要单独设计,就可以在内部定义一个类。比如,内部类是车的发动机,外部类是一整辆车,发动机可以在车的内部是一个完整的事务,但又没有必要单独设计出来。为了更好的了解这个匿名内部类,在介绍匿名内部类之前,先设定一个情景,先定义一个接口Animal,有一个run()方法,再定义两个子类Dog,Cat分别重写接口的run方法,再用一个函数输出这两个重写的方法。原创 2023-10-09 19:34:41 · 503 阅读 · 17 评论 -
进阶JAVA篇- BigDecimal 类的常用API(四)
/先定义了两个基本数据类型,我们知道//0.1 + 0.2 在double 类型运行是不精确的//由基本数据类型转变为引用类型//利用自动装箱,在等号后面可以直接写基本数据类型,它会自动装箱//将Double类型转变为String类型//利用Double类型实例方法toString()//利用构造器传进字符串来创建对象,//由字符串类型转变为BigDecimal类型//BigDecimal类中的实例方法 add()方法,//将两个BigDecimal类型相加。原创 2023-10-13 17:47:42 · 440 阅读 · 18 评论 -
进阶JAVA篇-深入了解枚举与抽象枚举
在JAVA中,枚举是一种特殊的类,用于定义一组常量。Java中的枚举类型是通过使用关键字"enum"来定义的。枚举类中的第一行只能写一些合法的标识符(名称),多个名称需要逗号相隔开来,这些名称本质是常量,每个常量都会记住一个枚举类的对象。枚举类里面除了第一行的常量之外,其余跟一般的类所具有的成员(变量、方法、构造器、代码块、内部类)都有具有。X,Y,Z;System.out.println("调用枚举类中的方法");return age;先来看第一个“红框”用关键字final。原创 2023-10-10 17:08:26 · 1346 阅读 · 19 评论 -
进阶JAVA篇- Lambda 表达式与 Lambda 表达式的省略规则
Lambda表达式通常由参数列表、箭头符号和函数体组成。参数列表定义了该函数接受的输入参数,箭头符号表示函数体的开始,函数体则定义了函数的具体实现。Lambda表达式可以作为一个整体被传递给其他函数或方法,也可以直接被调用。Lambda表达式的优点是简洁、灵活,能够减少冗余代码并提高代码的可读性。它常用于函数式编程、集合操作、事件处理等场景,可以替代传统的匿名内部类或单独定义一个函数的方式。需要注意的是,省略规则只适用于特定的情况,如果Lambda表达式的参数列表为空或多于一个参数,或者函数体包含多条语句,原创 2023-10-17 17:05:05 · 1552 阅读 · 30 评论 -
进阶JAVA篇- LocalDate 类与 LocalTime 类、LocalDateTime 类的常用API(六)
LocalDate类、LocalTime类和LocalDateTime类是Java 8中引入的日期时间API。它们提供了处理日期、时间和日期时间的功能。以下是它们的常用API:now():获取当前日期。of():根据指定的年、月、日创建一个LocalDate实例。getYear()、getMonth()、getDayOfMonth():获取年、月、日。plusDays()、plusMonths()、plusYears():在当前日期上增加指定的天数、月数、年数。minusDays()等等原创 2023-10-15 14:18:46 · 940 阅读 · 29 评论 -
进阶JAVA篇-如何理解作为参数使用的匿名内部类与 Arrays 类的常用API(九)
通过使用匿名内部类作为参数,我们可以在调用 Arrays 类的方法时,实时定义和重写接口或抽象类的方法,以满足具体的需求。这样可以避免创建额外的命名类,使代码更加简洁使用匿名内部类作为参数与 Arrays 类的常用API可以实现一些灵活的操作,比如在排序方法中,可以通过传入匿名内部类来定义自定义的比较规则;在查找方法中,可以通过传入匿名内部类来指定自定义的查找条件等等。和便捷。使用匿名内部类作为参数与 Arrays 类的常用API可以实现一些灵活的操作,比如在排序方法中,可以通过传入匿名内部类来定义自定义的原创 2023-10-17 15:12:25 · 490 阅读 · 11 评论 -
进阶JAVA篇- Collection 类的常用的API与 Collection 集合的遍历方式
Collection 类是 Java 集合框架中的一个顶级接口,它定义了一些常用的方法来操作集合中的元素。下面是 Collection 类的一些常用的 API:这些是 Collection 类中的一些常用的方法,通过这些方法可以对集合中的元素进行增删改查等操作。具体使用时可以根据实际需求选择适合的方法来操作集合。Collection 集合有多种遍历方式,常用的有以下几种:使用迭代器(Iterator)遍历:通过调用集合的 iterator() 方法获取一个迭代器对象,然后使用 while 循环和 hasNe原创 2023-10-19 20:50:55 · 1256 阅读 · 40 评论 -
进阶JAVA篇- Java 综合基本语法实践(习题一)
第一道题:集合的灵活运用、第二道题:基础编程能力、 第三道题:手写 ArrayList 集合(模拟实现 ArrayList 核心API)、第四道题:二分查找的应用、 第五道题:手写单链表(模拟实现 LinkedList 集合的核心API)原创 2023-10-28 20:33:53 · 4172 阅读 · 59 评论 -
进阶JAVA篇- Map 系列集合的遍历方法与常用API
使用keySet()方法遍历:通过Map的keySet()方法获取所有的键,然后使用for-each循环遍历键,并通过get()方法获取对应的值。使用entrySet()方法遍历:通过Map的entrySet()方法获取所有的键值对的Entry对象,然后使用for-each循环遍历Entry对象,通过getKey()和getValue()方法获取键和值。使用forEach()方法遍历(Java 8+):通过Map的forEach()方法,传入一个BiConsumer函数接口来遍历键值对。原创 2023-10-23 19:39:01 · 971 阅读 · 31 评论 -
进阶JAVA篇- Collcetions 工具类与集合的并发修改异常问题
Collections是Java提供的一个工具类,位于java.util包中。它提供了一系列静态方法,用于对集合进行常用的操作,如排序、查找、替换、填充等。总之,Collections工具类提供了一系列方便实用的方法,可以简化集合的操作。在使用Collections工具类时,需要注意其方法的参数和返回值类型,以及对集合的线程安全性和可修改性的影响。原创 2023-10-21 21:24:30 · 821 阅读 · 24 评论 -
进阶JAVA篇-了解 File 文件的常用API
在Java中,文件是指计算机中存储数据的一种数据存储单元。Java提供了许多类和接口来处理文件操作,最常用的是java.io.File类。File类代表文件或目录的抽象表示。它可以用于创建、删除、重命名、复制和移动文件或目录。File类的实例可以表示磁盘上的实际文件或目录,也可以表示虚拟文件或目录。原创 2023-10-29 21:27:50 · 924 阅读 · 32 评论 -
JavaSE 再续篇-面试题:this 与 super 关键字的区别
"this" 关键字用于引用当前对象,可以用来访问当前对象的属性和方法。例如:this.name 表示访问当前对象的name属性。"super" 关键字用于调用父类的属性和方法,可以在子类中使用super关键字来访问父类的构造方法、属性和方法。例如:super.method() 表示调用父类的方法。总的来说,"this"是引用当前对象,而"super"是引用父类的对象。原创 2023-11-07 15:39:03 · 507 阅读 · 35 评论 -
进阶JAVA篇-深入了解 List 系列集合
在 Java 中,List 类是 Java 集合框架中的一种接口,它是一种有序的、可重复的集合,用于存储多个元素。List 接口是 Collection 接口的子接口,它定义了一系列方法来操作和访问列表中的元素,所以 List 接口继承了Collection 接口的方法。ArrayList 集合是基于数组实现的,简单来说,ArrayList 集合就是一个可变长度的数组。因此可以解释为什么 ArrayList 集合具有有序、可重复、有索引的特性,是因为数组都具备这些特性。根据该集合的数据结构为双链表。原创 2023-10-21 11:48:59 · 897 阅读 · 25 评论 -
进阶JAVA篇-深入了解 Stream 流对象的创建与中间方法、终结方法
Stream(流)是一种数据处理的概念,它可以用来处理集合、数组或输入/输出等数据源的元素序列。流可以看作是一个从源到目标的元素序列,可以通过一系列连续的操作对其进行处理。流的操作可以分为两种类型:中间操作和终端操作。中间操作是对流进行处理并返回一个新的流,而终端操作是对流进行最终的处理并返回一个结果或副作用。原创 2023-10-24 15:40:24 · 4828 阅读 · 52 评论 -
进阶JAVA篇-深入了解 Set 系列集合
Set 类是 Java 中的一个集合类,它实现了 Set 接口。Set 是一个不允许包含重复元素的集合,它是通过哈希表实现的,不保证元素的顺序。HashSet 是 Java 中的一个集合类,它实现了 Set 接口。HashSet 基于哈希表实现,不保证元素的顺序,且不允许包含重复元素。简单来说,继承了 Set 的特性:无序、不可重复、无索引。TreeSet 是 Java 中的一个集合类,它实现了 Set 接口,是一个有序的集合。TreeSet 底层是通过红黑树来实现的,可以保证元素的有序性。原创 2023-10-21 17:15:46 · 407 阅读 · 9 评论 -
高阶JAVA篇-深入了解字符集
常见的编码和解码算法包括ASCII、UTF-8、UTF-16、GBK等。不同的编码和解码算法适用于不同的字符集和应用场景,选择合适的编码和解码算法可以确保字符的正确传输和处理字符集的编码和解码是将字符转换为对应的编码值,或将编码值转换为对应的字符的过程。编码是将字符转换为对应的编码值的过程。在编码过程中,需要使用字符集中定义的编码规则,将每个字符映射到对应的编码值。不同的字符集使用不同的编码规则,例如ASCII字符集使用7位二进制数表示每个字符,UTF-8字符集使用1到4个字节表示不同的字符。原创 2023-10-31 16:27:15 · 2682 阅读 · 57 评论