- 博客(250)
- 收藏
- 关注
原创 Java 序列化
为了演示序列化在 Java 中是怎样工作的,我将使用之前教程中提到的 Employee 类,假设我们定义了如下的 Employee 类,该类实现了Serializable 接口。Java 序列化是一种将对象转换为字节流的过程,以便可以将对象保存到磁盘上,将其传输到网络上,或者将其存储在内存中,以后再进行反序列化,将字节流重新转换为对象。序列化在 Java 中是通过 java.io.Serializable 接口来实现的,该接口没有任何方法,只是一个标记接口,用于标识类可以被序列化。
2025-04-05 08:51:23
508
原创 Java 泛型
和泛型方法一样,泛型类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。> 类型的,所以 name,age,number 都可以作为这个方法的实参,这就是通配符的作用。每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前(在下面例子中的 <E>)。
2025-04-05 08:47:28
110
原创 Java Object 类
Object 类位于 java.lang 包中,编译时会自动导入,我们创建一个类时,如果没有明确继承一个父类,那么它就会自动继承 Object,成为 Object 的子类。让当前线程处于等待(阻塞)状态,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过参数设置的timeout超时时间。Java Object 类是所有类的父类,也就是说 Java 的所有类都继承了 Object,子类可以使用 Object 的所有方法。获取对象的运行时对象的类。比较两个对象是否相等。
2025-04-05 08:42:58
67
原创 Java Iterator(迭代器)
使用迭代器遍历集合时,如果在遍历过程中对集合进行了修改(例如添加或删除元素),可能会导致 ConcurrentModificationException 异常,为了避免这个问题,可以使用迭代器自身的 remove() 方法进行删除操作。同时,在使用迭代器遍历集合时,不能直接修改集合中的元素,而是需要使用迭代器的 remove() 方法来删除当前元素。Java迭代器(Iterator)是 Java 集合框架中的一种机制,是一种用于遍历集合(如列表、集合和映射等)的接口。// 删除小于 10 的元素。
2025-04-05 08:39:24
185
原创 Java HashMap
HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。HashMap 是无序的,即不会记录插入的顺序。HashMap 继承于AbstractMap,实现了 Map、Cloneable、java.io.Serializable 接口。
2025-04-05 07:59:41
537
原创 Java HashSet
HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。HashSet 允许有 null 值。HashSet 是无序的,即不会记录插入的顺序。HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。您必须在多线程访问时显式同步对 HashSet 的并发访问。HashSet 实现了 Set 接口。HashSet 中的元素实际上是对象,一些常见的基本类型可以使用它的包装类。
2025-04-05 07:37:27
300
原创 Java LinkedList
链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。链表可分为单向链表和双向链表。一个单向链表包含两个值: 当前节点的值和一个指向下一个节点的链接。一个双向链表有三个整数值: 数值、向后的节点链接、向前的节点链接。Java LinkedList(链表) 类似于 ArrayList,是一种常用的数据容器。与 ArrayList 相比,LinkedList 的增加和删除的操作效率更高,而查找和修改的操作效率较低。
2025-04-05 07:34:13
548
原创 Java ArrayList
ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。ArrayList 继承了 AbstractList ,并实现了 List 接口。ArrayList 类位于 java.util 包中,使用前需要引入它,语法格式如下:// 引入 ArrayList 类// 初始化ArrayList 是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。
2025-04-05 07:32:22
557
原创 Java 集合框架
List接口是一个有序的 Collection,使用此接口能够精确的控制每个元素插入的位置,能够通过索引(元素在List中位置,类似于数组的下标)来访问List中的元素,第一个元素的索引为 0,而且允许有相同的元素。该类也是实现了List的接口,实现了可变大小的数组,随机访问和遍历元素时,提供更好的性能。虽然这些类都非常有用,但是它们缺少一个核心的,统一的主题。算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序,这些算法实现了多态,那是因为相同的方法可以在相似的接口上有着不同的实现。
2025-03-30 15:47:47
774
原创 Java 数据结构
该类在处理一组布尔值的时候非常有用,你只需要给每个值赋值一"位",然后对位进行适当的设置或清除,就可以对布尔值进行操作了。例如,枚举定义了一个叫nextElement 的方法,该方法用来得到一个包含多元素的数据结构的下一个元素。使用Vector类最主要的好处就是在创建对象的时候不必给对象指定大小,它的大小会根据需要动态的变化。Java 的 java.util 包中提供了许多这些数据结构的实现,可以根据需要选择合适的类。你可以把栈理解为对象的垂直分布的栈,当你添加一个新元素时,就将新元素放在其他元素的顶部。
2025-03-30 15:45:24
379
原创 Java 反射(Reflection)
Java 反射(Reflection)是一个强大的特性,它允许程序在运行时查询、访问和修改类、接口、字段和方法的信息。java.lang.reflect 是 Java 反射机制的核心包,提供了操作类及其成员(字段、方法、构造函数等)的类和接口。java.lang.reflect.Field:表示类的字段(属性)。提供了方法来获取类的字段、方法、构造函数等。java.lang.reflect.Method:表示类的方法。获取成员信息:通过 Class 对象,可以获取类的字段、方法、构造函数等信息。
2025-03-30 15:26:09
300
原创 java所有关键字的讲解
这时根据传入构造方法的name形参,栈中就会为其开辟一块名为name的空间,实参“mimi”传了进来,这时候栈中name的引用指向了data segment中的字符串常量“mimi”,因为this.name = name,所以自身成员变量的this.name也指向了data segment中的字符串常量“mimi”。第四步:构造方法执行完成后,为执行这个方法在栈中分配的形参变量的内存空间收回,name在栈中的空间消失(当然,为执行方法而在栈中分配的局部变量空间,方法执行完毕后都应该被收回了)
2025-03-30 15:25:02
482
原创 Java 包(package)
你可以分开来安排源码和类的目录。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。而且在实际开发中这样做是值得提倡的,当你自己完成类的实现之后,将相关的类分组,可以让其他的编程者更容易地确定哪些类、接口、枚举和注释等是相关的。这样,你可以将你的类目录分享给其他的编程人员,而不用透露自己的源码。编译的时候,编译器为包中定义的每个类、接口等类型各创建一个不同的输出文件,输出文件的名字就是这个类型的名字,并加上 .class 作为扩展后缀。
2025-03-30 15:20:57
332
原创 Java 枚举(enum)
enum 定义的枚举类默认继承了 java.lang.Enum 类,并实现了 java.lang.Serializable 和 java.lang.Comparable 两个接口。Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一年的 12 个月份,一个星期的 7 天,方向有东南西北等。每个枚举都是通过 Class 在内部实现的,且所有的枚举值都是 public static final 的。values(), ordinal() 和 valueOf() 方法。
2025-03-30 15:18:20
346
原创 Java 接口
正如EventListener接口,这是由几十个其他接口扩展的Java API,你可以使用一个标记接口来建立一组接口的父接口。这种情况是标记接口最初的目的,实现标记接口的类不需要定义任何接口方法(因为标记接口根本就没有方法),但是该类通过多态性变成一个接口类型。以上的程序片段是合法定义的子接口,与类不同的是,接口允许多继承,而 Sports及 Event 可以定义或是继承相同的方法。Hockey接口自己声明了四个方法,从Sports接口继承了两个方法,这样,实现Hockey接口的类需要实现六个方法。
2025-03-30 15:17:32
223
原创 Java 封装
在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。要访问该类的代码和数据,必须通过严格的接口控制。封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
2025-03-30 15:15:52
245
原创 Java 抽象类
尽管我们不能实例化一个 Employee 类的对象,但是如果我们实例化一个 Salary 类对象,该对象将从 Employee 类继承 7 个成员方法,且通过该方法可以设置或获取三个成员变量。在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。如果你想设计这样一个类,该类包含一个特别的成员方法,该方法的具体实现由它的子类确定,那么你可以在父类中声明该方法为抽象方法。
2025-03-30 13:58:54
360
原创 Java 多态
在编译的时候,编译器使用 Employee 类中的 mailCheck() 方法验证该语句, 但是在运行的时候,Java虚拟机(JVM)调用的是 Salary 类中的 mailCheck() 方法。当调用 s.mailCheck() 时,编译器在编译时会在 Salary 类中找到 mailCheck(),执行过程 JVM 就调用 Salary 类的 mailCheck()。Java中所有的方法都能以这种方式表现,因此,重写的方法能在运行时调用,不管编译的时候源代码中引用变量是什么数据类型。
2025-03-30 13:42:05
260
原创 Java 重写(Override)与重载(Overload)
例如: 父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是 IOException 的父类,抛出 IOException 异常或者 IOException 的子类异常。这样,在使用子类对象调用该方法时,将执行子类中的方法而不是父类中的方法。方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。
2025-03-30 13:37:58
389
原创 Java 继承
Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 B 类继承 A 类,C 类继承 B 类,所以按照关系就是 B 类是 C 类的父类,A 类是 B 类的父类,这是 Java 继承区别于 C++ 继承的一个特性。System.out.println("大家好!System.out.println("------SubClass2 类继承------");System.out.println("------SubClass 类继承------");
2025-03-30 13:36:49
395
原创 Java 异常处理
比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error,如果你用 System.out.println(11/0),那么你是因为你用 0 做了除数,会抛出 java.lang.ArithmeticException 的异常。运行时异常: 这些异常在编译时不强制要求处理,通常是由程序中的错误引起的,例如 NullPointerException、ArrayIndexOutOfBoundsException 等,这类异常可以选择处理,但并非强制要求。
2024-10-24 18:56:51
684
原创 Java 异常处理
在 Java 中你可以自定义异常。编写自己的异常类时需要记住下面的几点。所有异常都必须是 Throwable 的子类。如果希望写一个检查性异常类,则需要继承 Exception 类。如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。可以像下面这样定义自己的异常类:只继承Exception 类来创建的异常类是检查性异常类。下面的 InsufficientFundsException 类是用户定义的异常类,它继承自 Exception。
2024-10-24 18:52:05
611
原创 Java 方法
Java方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用一般情况下,定义一个方法包含以下语法:修饰符 返回值类型 方法名(参数类型 参数名){ ... 方法体 ... return 返回值;方法包含一个方法头和一个方法体。修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。方法可能会返回值。returnValueType 是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。
2024-10-24 00:00:00
1466
原创 Java Scanner 类
java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入。
2024-10-24 00:00:00
1791
1
原创 scratch超级马里奥教程
链接: https://pan.baidu.com/s/1OIPnw_c-owQ_wxEICPB8pg?作者也是刚会scratch,写了个超级马里奥,出教程啦!运行结果(运行后界面按空格!别急,素材也在末尾。
2024-10-20 13:20:04
845
原创 Java 流(Stream)、文件(File)和IO
Java 中的流(Stream)、文件(File)和 IO(输入输出)是处理数据读取和写入的基础设施,它们允许程序与外部数据(如文件、网络、系统输入等)进行交互。java.io 包是 Java 标准库中的一个核心包,提供了用于系统输入和输出的类,它包含了处理数据流(字节流和字符流)、文件读写、序列化以及数据格式化的工具。java.io 是处理文件操作、流操作以及低级别 IO 操作的基础包。java.io 包中的流支持很多种格式,比如:基本类型、对象、本地化字符集等等。一个流可以理解为一个数据的序列。
2024-10-20 11:39:52
949
原创 Java 日期时间
java.util 包提供了 Date 类来封装当前的日期和时间。Date 类提供两个构造函数来实例化 Date 对象。第一个构造函数使用当前日期和时间来初始化对象。Date( )第二个构造函数接收一个参数,该参数是从 1970 年 1 月 1 日起的毫秒数。Date 对象创建以后,可以调用下面的方法。
2024-10-13 06:59:34
679
原创 Java 数组
数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。Java 语言中提供的数组是用来存储固定大小的同类型元素。你可以声明一个数组变量,如 numbers[100] 来代替直接声明 100 个独立变量 number0,number1,....,number99。本教程将为大家介绍 Java 数组的声明、创建和初始化,并给出其对应的代码。
2024-10-13 06:58:23
908
原创 Java StringBuffer 和 StringBuilder 类
当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用 StringBuffer。
2024-10-10 00:00:00
1957
原创 Java String 类
字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。
2024-10-09 00:00:00
1671
原创 Java 修饰符
抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。一个类不能同时被 abstract 和 final 修饰。如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误。抽象类可以包含抽象方法和非抽象方法。
2024-10-03 00:00:00
844
原创 Java 变量命名规则
在 Java 中,不同类型的变量(例如实例变量、局部变量、静态变量等)有一些命名规则和约定。遵循一些基本规则,这有助于提高代码的可读性和维护性。变量名应该具有清晰的含义,能够准确地反映变量的用途。避免使用单个字符或无意义的缩写。在变量名中使用驼峰命名法,即将每个单词的首字母大写,除了第一个单词外,其余单词的首字母都采用大写形式。。不要使用 Java 关键字(例如,class、int、boolean等)作为变量名。Java 是大小写敏感的,因此变量名中的大小写字母被视为不同的符号。例如,
2024-10-02 00:00:00
388
原创 Java 修饰符
抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。一个类不能同时被 abstract 和 final 修饰。如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误。抽象类可以包含抽象方法和非抽象方法。
2024-10-01 07:38:20
982
原创 Java 变量命名规则
在 Java 中,不同类型的变量(例如实例变量、局部变量、静态变量等)有一些命名规则和约定。遵循一些基本规则,这有助于提高代码的可读性和维护性。变量名应该具有清晰的含义,能够准确地反映变量的用途。避免使用单个字符或无意义的缩写。在变量名中使用驼峰命名法,即将每个单词的首字母大写,除了第一个单词外,其余单词的首字母都采用大写形式。。不要使用 Java 关键字(例如,class、int、boolean等)作为变量名。Java 是大小写敏感的,因此变量名中的大小写字母被视为不同的符号。例如,
2024-10-01 07:35:57
355
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人