
java基础
文章平均质量分 79
该专栏将会以java核心卷1为基础更新文章
秃头披风侠.
因为热爱
展开
-
【java基础】Socket网络编程
这个类表示一个Internet协议(IP)地址,我们可以通过ip或者域名来构建这个类// 通过ip构建InetAddress InetAddress inetAddress1 = InetAddress . getByAddress(new byte [ ] {// 通过域名构建InetAddress InetAddress inetAddress2 = InetAddress . getByName("www.baidu.com");原创 2023-04-05 18:11:37 · 1388 阅读 · 0 评论 -
【java基础】使用Path和Files类,更方便的操作路径和文件
Path是一个接口,里面定义了许多操作路径的便捷方法。获取Path是通过Paths类里面的get方法这个方法会将我们传入的字符串通过路径分隔符连接起来,上面的path连接后的内容如下a\b\c.txtPath里面的方法大家根据需要进行使用即可,都很简单。基本包含了所有对路径的操作Files里面方便的方法还有很多,这里只说明了几个常用的方法,感兴趣可以直接再去看一下官网文档。原创 2023-04-03 17:13:23 · 3844 阅读 · 2 评论 -
【java基础】对象序列化和反序列化详解
在上面,我们知道看transient关键字标识之后不会被序列化,于是b字段就为null,这里我们使用自定义序列化机制来解决这个问题。序列化机制为单个的类提供了一种方式,去向默认的读写行为添加验证或任何其他想要的行为。之后,数据域就再也不会被自动序列化,取而代之的是调用这些方法。我们只需要在A类中添加这2个方法,然后编写对应的方法即可out . writeUTF("我是B--通过自定义方式实现序列化");} }原创 2023-04-03 14:35:25 · 2429 阅读 · 0 评论 -
java中的UTF-16编码详解,什么是码点?什么是字符?
对于UTF-16,他是变长的,在0~65535使用2个字节进行存储,其余使用4个字节进行存储。[0xD800,0xDFFF]中的码点未定义任何字符,专用于UTF-16的代理项对应大于等于65536的Unicode,会进行代理,最终变为2个小于65536的值0xD800和0xDC00相差了0x0400,也就是 0100 0000 0000, 刚好比 0011 1111 1111多1,也就是说高位代理项和低位代理项不会重复。系统仅凭一个字符就能够判断是高位代理项还是低位代理项。原创 2023-04-02 23:03:51 · 2303 阅读 · 0 评论 -
【java基础】输入/输出流基本介绍
InputStream和OutputStream算是所有二进制输入/输出的父类,而Reader和Write算是所有字符输入/输出的父类。它们的子类提供了各种形式的输入/输出方法,我们使用它们可以很轻松的完成输入/输出操作。原创 2023-04-02 16:25:22 · 1607 阅读 · 1 评论 -
【java基础】一篇文章彻底搞懂Optional
在java中,我们要学习一个类,第一步要做的应该就是去了解该类的继承关系以及有些上面方法,在有需要时还应当查看一些源代码中的注释。下面我们就来看看Optional的类图以及该类中的方法和字段我们再来看看该类上面的注释翻译过来就是一个容器对象,它可能包含也可能不包含非null值。如果存在一个值,isPresent()将返回true,get()则返回该值。提供了取决于所包含值是否存在的其他方法,如orElse()(如果值不存在,则返回默认值)和ifPresent()(当值存在时执行代码块)。原创 2023-03-27 16:54:26 · 1719 阅读 · 0 评论 -
【java基础】Stream流的各种操作
Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。与集合相比,流提供了一种可以让我们在更高概念级别上指定计算任务的数据视图注意:学习Stream必须要十分清晰的了解lamdba表达式,如果lambda不清楚,请参考一篇文章彻底搞懂lambda表达式。原创 2023-03-21 17:15:35 · 3377 阅读 · 0 评论 -
【java基础】BitSet基本说明和使用
Java平台的BitSet类用于存储一个位序列(它不是数学上的集,如果称为位向量或位数组可能更为合适)。如果需要高效地存储位序列(例如,标志),就可以使用位集。由于位集将位包装在字节里,所以使用位集要比使用Boolean对象的ArrayList高效得多。说人话就是使用位来存储boolean信息,0表示假,1表示真。BitSet由于使用bit位来存储信息,所以占用空间会比boolean数组使用空间更小,并且带有去重功能。该数据结构的一个应用就是10亿个手机号码去重(面试造火箭)原创 2023-03-16 14:22:56 · 4224 阅读 · 2 评论 -
【java基础】HashMap源码解析
HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。HashMap 是无序的,即不会记录插入的顺序。HashMap 继承于AbstractMap,实现HashMap使用K-V的形式存储数据,Map的扩容机制是按照2倍进行的,当达到阈值时就会扩容。当hash冲突严重时,链表会转换为红黑树,当树元素个数很少时,又会退化为链表。原创 2023-03-11 16:26:32 · 1482 阅读 · 0 评论 -
【java基础】LinkedList源码解析
在java中,LinkedList就是使用双向链表存储元素,既然是链表,那么也就知道了该数据结构擅长添加和删除。对于需要频繁添加和删除的,我们应该使用LinkedList而表示ArrayList在开始介绍LinkedList之前,我们先来看一下该类的属性/**= null)/**= null)这三个属性就分别表示集合元素个数,头节点,尾节点。然后需要查看的就是类图,这是必不可少的!!!对于上面的类图,大家自行查看即可。原创 2023-03-11 10:11:09 · 956 阅读 · 0 评论 -
【java基础】ArrayList源码解析
ArrayList是使用数组存储元素的的集合,能够自动进行扩容。ArrayList的类图如下该类拥有许多操作集合的方法,在这篇文章中将会debug几个常见的方法。这里先将ArrayList的成员属性以及注释列出来/**/**/**/*** @serial对于ArrayList,就理解为一个简单的数组即可,该数组会自动扩容(一般为1.5)。原创 2023-03-11 09:05:33 · 3068 阅读 · 0 评论 -
【java基础】集合基础说明
集合就是存储用来存储一系列数据的一种数据结构。在这篇文章中会介绍集合的一些基本概念。我感觉对于java集合没有什么好说明的,这些内容应该属于数据结构,如果学习过数据结构,那么自己都可以写出这些集合,所以在后面介绍集合的文章中,将不会说明集合的基本概念,只会对源码进行debug,然后说明常用方法。原创 2023-03-09 13:52:10 · 787 阅读 · 0 评论 -
【java基础】泛型的通配符(extends,super,?)
这一节感觉自己都有点模糊,java核心卷在泛型这章讲的真的是晦涩难懂,如果上面有说错的地方,欢迎大家私信或者评论区指出。关于泛型的更多知识,参考以下内容泛型程序设计基础类型擦除、桥方法、泛型代码和虚拟机泛型的限制及其继承规则泛型的通配符(extends,super,?泛型程序设计基础类型擦除、桥方法、泛型代码和虚拟机泛型的限制及其继承规则泛型的通配符(extends,super,?原创 2023-03-06 17:19:31 · 1516 阅读 · 0 评论 -
【java基础】泛型的限制及其继承规则
对于上面的限制,大家不用全部背下来,再使用泛型的时候慢慢理解就好了关于泛型的更多知识,参考以下内容泛型程序设计基础类型擦除、桥方法、泛型代码和虚拟机泛型的限制及其继承规则泛型的通配符(extends,super,?泛型程序设计基础类型擦除、桥方法、泛型代码和虚拟机泛型的限制及其继承规则泛型的通配符(extends,super,?原创 2023-03-06 17:17:33 · 3488 阅读 · 3 评论 -
【java基础】类型擦除、桥方法、泛型代码和虚拟机
在最后,对于java泛型的转换,我们需要记住以下几点虚拟机中没有泛型,只有普通的类和方法所有的类型参数都会替换为它们的限定类型会通过合成桥方法来保持多态为保持类型安全性,必要时会插入强制类型转换关于泛型的更多知识,参考以下内容泛型程序设计基础类型擦除、桥方法、泛型代码和虚拟机泛型的限制及其继承规则泛型的通配符(extends,super,?泛型程序设计基础类型擦除、桥方法、泛型代码和虚拟机泛型的限制及其继承规则泛型的通配符(extends,super,?原创 2023-03-06 17:18:52 · 962 阅读 · 0 评论 -
【java基础】泛型程序设计基础
泛型类就是有一个或多个类型变量的类。下面我就通过MyTool这个类来进行说明} }上面的MyTool这个类就是一个泛型类,在这个类中引入了一个类型变量T,用尖括号()括起来的,放在类名后面。这个T就是我们在创建对象的时候指定的。MyTool < String > myTool = new MyTool < >("这是自定义泛型类");我们在尖括号()里面写的类型就会成为T的类型,这里里面写的类型为String,那么T就是代表String。原创 2023-03-06 17:16:36 · 925 阅读 · 0 评论 -
【java基础】断言(assert)
如果要在java种使用断言,需要在程序运行时使用或者启用断言,因为断言默认是关闭的。我们一般都是在IDEA运行程序,于是我们就要配置vm选项,下面是具体步骤进入配置面板如果没有VM这个输入框,那么勾选Add VM option选项就行了搞好后点击apply,然后退出即可,这样做后我们就成功启用了当前配置类的断言功能。原创 2023-03-04 15:27:57 · 1237 阅读 · 0 评论 -
【java基础】异常处理(Exception)
对于一个程序,总是有bug的。如果我们的程序遇到一个错误就终止了,那么肯定是不合理,程序发生错误时,应该有一种通用的解决方式才合理。好在java给我们提供了一整套处理异常的机制,下面就来进行介绍对于创建自定义异常类,想必大家看完上面应该都已经会了,我们只需要继承Exception或者RuntimeException就行了。继承RuntimeException就是非检查型异常,继承Exception就是检查型异常定义检查型异常自定义非检查型异常。原创 2023-03-04 11:51:35 · 1798 阅读 · 0 评论 -
【java基础】内部类、局部内部类、匿名内部类、静态内部类
内部类就是定义在另一个类中的类。我们使用内部类的原因主要有以下两点我们使用内部类可以访问外部类的所有属性,语法就是 外部类.this.xx对于内部类里面的方法和属性可以和外部类重复,访问内部属性使用this,访问外部使用 outerClass.this。如果内部类和外部类的变量和方法没有冲突,我们可以直接使用名称进行访问,编译器会先寻找内部类,然后寻找外部类关于内部类有一些注意事项如下。原创 2023-03-03 15:15:48 · 993 阅读 · 0 评论 -
【java基础】一篇文章彻底搞懂lambda表达式
对于lambda表达式,我们再里面还不能够定义与外部变量相同的参数名称,例如下面代码int i = 1;int i = 0;});我们再lambda里面定义了与外部变量同名的i变量,这时候IDEA就会给出以下提示如果运行就会报错对于函数式接口的定义想必大家已经很清楚了,只需要在接口有且只有抽象方法就是一个函数式接口。下面就是自定义的一个函数式接口对于函数式接口,我们可以使用@FunctionalInterface进行标识。这样做有2个优点,如下。原创 2023-03-02 20:02:43 · 2837 阅读 · 1 评论 -
【java基础】接口(interface)
接口用来描述类应该做什么,而不是指定它们具体应该怎么做。在java中,接口不是类,而是对希望符合这个接口的类的一组需求。java只能继承一个类,但是可以实现多个接口。接口的定义如下接口定义其实就是和类定义相似的。只不过把class换成了interface我们在interface可以定义方法,就像抽象类那样定义未实现的方法即可。类实现接口时就必须重写方法或者自己成为抽象类void run();原创 2023-03-01 21:21:54 · 1244 阅读 · 0 评论 -
【java基础】一篇文章彻底搞懂java反射
反射库(reflection library)提供了一个丰富且精巧的工具集,可以用来编写能够动态操纵Java代码的程序。使用反射,Java可以支持用户界面生成器、对象关系映射器以及很多其他需要动态查询类能力的开发工具。能够分析类能力的程序称为反射(reflective)。反射机制的功能极其强大,反射机制主要功能如下在运行时分析类的能力。在运行时检查对象实现泛型数组操作代码。利用Method对象由于反射内容非常的多,这篇文章只做基本的介绍,以及讲解最常见的操作和一般在什么地方进行使用。原创 2023-02-28 09:13:22 · 733 阅读 · 0 评论 -
【java基础】枚举类(enum)
在java中有一种特殊的类型就是枚举类,对于一个有限的有固定值的集合,我们就可以考虑使用枚举类来进行表示,例如服装的大小为 小,中,大,超大。一个颜色集合为红色,蓝色,黄色,绿色。原创 2023-02-26 19:09:42 · 2890 阅读 · 2 评论 -
【java基础】包装类,自动装箱和自动拆箱
有时,需要将int这样的基本类型转换为对象。所有的基本类型都有一个与之对应的类。例如,Integer类对应基本类型int。通常,这些类称为包装器(wrapper)。这些包装器类有显而易见的名字:Integer、Long、Float、Double、Short、Byte、Character和Boolean(前6个类派生于公共的超类number)。包装器类是不可变的,即一旦构造了包装器,就不允许更改包装在其中的值。同时,包装器类还是final,因此不能派生它们的子类。原创 2023-02-26 17:25:31 · 1466 阅读 · 0 评论 -
【java基础】抽象类和抽象方法
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。个人理解就是,抽象类可能含有没有被实现的方法(抽象方法),抽象类不能被实例化,也就是不能够通过new关键字进行创建。抽象类不一定有抽象方法,有抽象方法一定是抽象类。都是使用abstract进行标识抽象类可以不含有抽象方法。原创 2023-02-26 15:09:17 · 1031 阅读 · 0 评论 -
【java基础】方法重载和方法重写
对于方法重载,返回值是可以不一样的,只要保证参数列表的个数或者类型不同就行。java在调用方法时会自动选择最精确匹配的方法。可以发现,方法匹配就是按照最相似来进行匹配的。这样就可以证明了java在执行方法时,如果存在多个满足条件的方法,那么就会选择匹配类型最相近的那个。方法重写就是在子类中我们可以写一个和父类方法签名一样的方法,相当于。重写的返回类型还可以不一样,只需要是被重写方法返回类型的子类型即可。方法重载就是可以在一个类里面定义多个相同名称的方法,只需要。对于方法重写,访问修饰符可以进行扩大。原创 2023-02-26 14:43:32 · 813 阅读 · 0 评论 -
【java基础】static和final关键字的作用及其用法详解
对于外部类和静态内部类可以相互访问静态变量和方法,静态内部类可以直接通过字段名或者方法名访问外部类中的static字段、方法,如果出现命名冲突,那么就需要使用外部类名.静态字段(方法)进行访问。对于静态内部类,我们简单一点理解就是静态内部类和外部类没有关系即可,都只能互相访问静态字段和方法,静态内部类的创建并不需要外部类的实例化。上面的B继承了A,并且重写了A类中的show方法,但是A类中show方法使用final修饰,这时,编译器提示以下信息。对于类的字段使用final修饰,必须在定义的时候就进行赋值。原创 2023-02-26 09:42:45 · 1422 阅读 · 0 评论 -
【java基础】多态、编译类型、运行类型、强制类型转换、动态绑定关系梳理
其实上面这些东西说白了都是一个东西,就是对象调用方法会根据实际运行类型来开始查找方法进行调用,找不到再去父类查找。父类可以引用子类对象,我们只能将对象强转为对象的实际的运行类型或者对象运行类型的父类。原创 2023-02-25 23:57:24 · 658 阅读 · 0 评论 -
【java基础】继承(extends)
java的继承简单一点说就是一个类对另一个类的扩展,是is-a的关系。利用Employee(员工类)和Manager(经理类)来举例,Manager继承了Employee,也就是对Employee的扩展,Manager是一个特殊的Employee,但是Employee却不是Manager。他们直接就存在is-a的关系。继承的关键字是extends对于Employee类,我们一般称为超类,父类或者基类。对于Manager类,我们一般称为子类,派生类或者孩子类。原创 2023-02-25 18:36:43 · 1132 阅读 · 1 评论 -
【java基础】值传递,址传递,引用传递
想必很多人在学习java之前就已经学习过c语言了吧,里面就值传递和址传递,在java中是否也存在类似的特性呢?下面通过几个例子来进行说明方法不能修改基本数据类型的参数方法可以改变对象的参数方法不能让一个对象参数引用到一个新的对象大家需要记住的是java不存在指针,不能够进行引用传递,参数传递都是值传递,基本类型参数就是传递当前值,对象就是传递地址。原创 2023-02-25 10:02:29 · 835 阅读 · 0 评论 -
【java基础】自定义类
什么是类这里就不过多赘述了,这里来介绍关于类的几个名词类是构造对象的模板或蓝图由类构造对象的过程称为创建类的实例封装就是将数据和行为组合在一个包中,并对对象的使用者隐藏具体的实现方式对象的数据称为实例字段操作数据的过程称为方法下面再来说明一些对象的三个主要特性对象的行为(behavior)一可以对对象完成哪些操作,或者可以对对象应用哪些方法?对象的状态(state)一当调用那些方法时,对象会如何响应?对象的标识(identity)一如何区分具有相同行为与状态的不同对象?原创 2023-02-25 09:38:37 · 2165 阅读 · 0 评论 -
【java基础】数组
说完了多维数组,现在来说一下不规则数组,还是以二维数组为例,我们知道二维数组相当于n个一维数组,当然,java并没有要求所有一维数组长度是一样的,于是我们就可以在创建二维数组的时候不指定一维数组的长度,而是动态指定不一样的长度,下面就是一个例子。我们先使用二维数组来举例,二维数组就相当于是有n个一维数组,如果是3*4的二维数组,那么就相当于是有3个一维的,大小为4的数组,总元素为12个。上面的代码我们就创建了不规则的数组,下面我们来输出每一个一维数组的长度看一下。不规则数组使用不多,一般都是规则的。原创 2023-02-23 13:38:28 · 849 阅读 · 1 评论 -
【java基础】大数处理 BigInteger、BigDecimal的使用
我们都知道,在java中整数最大的也就是long型,浮点数最大的也就是double。它们的精度都是有限的,如果遇到更大或者要求小数点后精确到1000位该怎么做呢?在java中有无限精度的数据类型吗?当然是有的,java提供了BigInteger和BigDecimal。这两个类可以处理包含任意长度数字序列的数值。BigInteger类实现任意精度的整数运算BigDecimal实现任意精度的浮点数运算。原创 2023-02-23 13:01:12 · 1063 阅读 · 0 评论 -
【java基础】循环语句、中断控制语句
要使用首先需要定义标签, 自己写一个标签名称,后面紧跟一个冒号,标签需要放到希望跳出的循环前面,下面代码就是一个简单应用。break语句可以跳出循环语句,相当于提前终止循环,使用很简单,在循环体里面执行到break就会跳出该循环体。该方式也可以使用在任意代码块,不止是循环,但是不建议使用,因为可能会导致程序结构混乱。在java中有3种循环,分别是while循环,for循环,for each循环。for循环也被叫做确认循环,因为for循环一般都是确认循环次数的。for循环由3部分构成。for循环的格式如下。原创 2023-02-23 12:43:52 · 727 阅读 · 0 评论 -
【java基础】条件判断,if、switch
在java中进行条件判断,使用的是if,条件判断的形式为 if (condition) statement,statement可以是一条语句,也可以是一个代码块,代码块里面可以有多条代码,一个代码块被看做一个整体,将会执行。if-else的语法是 if (condition) statement1 else statement2,条件为真执行if下的语句,否则执行else下的语句。这种其实就是对if-else的嵌套,就是在else代码块里面又是if判断语句,形式如下。原创 2023-02-23 11:14:54 · 766 阅读 · 0 评论 -
【java基础】控制台输入输出
在java中,如果想要获取控制台的输入内容,我们需要Scanner这个类。创建一个Scanner对象,创建的时候传入System.in这个标准输入流。java控制台输出很简单,使用System.out输出流即可。然后我们使用Scanner的方法就行了。下面的代码就会创建一个Scanner。下面是常用的3中输出方式。原创 2023-02-23 10:58:00 · 2762 阅读 · 0 评论 -
【java基础】String字符串
从概念上来讲,java字符串就是Unicode字符序列,由多个字符构成。在java类库中提供了字符串类String,每个用双引号(“”)括起来的字符串都是String类的一个实例。原创 2023-02-23 00:02:56 · 1068 阅读 · 0 评论 -
【java基础】java八大基本数据类型和运算符
a++和++a的区别为在进行运算的时候,a++会在运算之后将a的值加1,而++a会将a的值加1后进行运算, a–和–a也是类似的。boolean类型被编译为int类型,等于是说JVM里占用字节和int完全一样,int是4个字节,于是boolean也是4字节。java中内码(运行内存)中的char使用UTF16的方式编码,一个char占用两个字节,自增 a++、++a都表示将a的值加1. a–、–a表示将a的值减1。二元运算符 +=,-=,*=,/=,%=。|表示或,&表示与,^表示异或,~表示取反。原创 2023-02-22 20:18:57 · 718 阅读 · 0 评论 -
java数组排序,升序和降序
对于数组的排序一直很疑惑,尤其是如何对数组进行降序排列,例如要对int[]类型的数组降序排列,这里来进行说明。原创 2023-02-22 00:12:44 · 11294 阅读 · 0 评论 -
【java基础】安装java环境
通过上面的术语可以发现运行java程序只需要jre就行了,但是我们的目标并不是运行java程序,而是编写java程序,所以我们需要下载JDKJDK 8下载地址为https://www.oracle.com/cn/java/technologies/downloads/#java8-windows下载之后选择安装路径后直接安装即可。安装完成之后进入到安装目录里面,然后进入jdk目录下一步就是设置一个名字叫做JAVA_HOME的环境变量,值就是jdk目录然后编辑Path,将JAVA_HOME加入到里面。原创 2023-01-25 14:49:06 · 1040 阅读 · 0 评论