- 博客(113)
- 收藏
- 关注
原创 ServerSocket 类的方法
创建非绑定服务器套接字。如果 ServerSocket 构造方法没有抛出异常,就意味着你的应用程序已经成功绑定到指定的端口,并且侦听客户端请求。服务器应用程序通过使用 java.net.ServerSocket 类以获取一个端口,并且侦听客户端请求。
2023-06-07 00:24:50
294
原创 Socket 编程
连接建立后,通过使用 I/O 流在进行通信,每一个socket都有一个输出流和一个输入流,客户端的输出流连接到服务器端的输入流,而客户端的输入流连接到服务器端的输出流。Socket 类的构造函数试图将客户端连接到指定的服务器和端口号。TCP 是一个双向的通信协议,因此数据可以通过两个数据流在同一时间发送.以下是一些类提供的一套完整的有用的方法来实现 socket。在服务器端,accept() 方法返回服务器上一个新的 socket 引用,该 socket 连接到客户端的 socket。
2023-06-07 00:24:19
201
原创 Java 网络编程
TCP(英语:Transmission Control Protocol,传输控制协议) 是一种面向连接的、可靠的、基于字节流的传输层通信协议,TCP 层是位于 IP 层之上,应用层之下的中间层。:UDP (英语:User Datagram Protocol,用户数据报协议),位于 OSI 模型的传输层。由于UDP缺乏可靠性且属于无连接协议,所以应用程序通常必须容许一些丢失、错误或重复的数据包。java.net 包中 J2SE 的 API 包含有类和接口,它们提供低层次的通信细节。
2023-06-07 00:23:46
214
原创 Java 序列化
Java 提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中数据的类型。将序列化对象写入文件之后,可以从文件中读取出来,并且对它进行反序列化,也就是说,对象的类型信息、对象的数据,还有对象中的数据类型可以用来在内存中新建对象。整个过程都是 Java 虚拟机(JVM)独立的,也就是说,在一个平台上序列化的对象可以在另一个完全不同的平台上反序列化该对象。如果你想知道一个 Java 标准类是否是可序列化的,请查看该类的文档。
2023-06-07 00:22:06
152
原创 序列化对象
ObjectOutputStream 类用来序列化一个对象,如下的 SerializeDemo 例子实例化了一个 Employee 对象,并将该对象序列化到一个文件中。该程序执行后,就创建了一个名为 employee.ser 文件。该程序没有任何输出,但是你可以通过代码研读来理解程序的作用。当序列化一个对象到文件时, 按照 Java 的标准约定是给文件一个 .ser 扩展名。
2023-06-07 00:21:04
73
原创 Java HashSet
HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。您必须在多线程访问时显式同步对 HashSet 的并发访问。HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。HashSet 中的元素实际上是对象,一些常见的基本类型可以使用它的包装类。HashSet 是无序的,即不会记录插入的顺序。HashSet 允许有 null 值。HashSet 实现了 Set 接口。
2023-06-07 00:19:16
79
原创 Java 数据结构
Java工具包提供了强大的数据结构。以上这些类是传统遗留的,在Java2中引入了一种新的框架-集合框架(Collection),我们后面再讨论。
2023-06-07 00:16:46
78
原创 Java 数据结构
Java工具包提供了强大的数据结构。以上这些类是传统遗留的,在Java2中引入了一种新的框架-集合框架(Collection),我们后面再讨论。
2023-06-07 00:15:55
68
原创 Java 泛型
Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。使用 Java 泛型的概念,我们可以写一个泛型方法来对一个对象数组排序。然后,调用该泛型方法来对整型数组、浮点数数组、字符串数组等进行排序。假定我们有这样一个需求:写一个排序方法,能够对整型数组、字符串数组甚至其他任何类型的数组进行排序,该如何实现?泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
2023-06-06 14:28:49
74
原创 finally关键字
finally 关键字用来创建在 try 代码块后面执行的代码块。无论是否发生异常,finally 代码块中的代码总会被执行。在 finally 代码块中,可以运行清理类型等收尾善后性质的语句。finally 代码块出现在 catch 代码块最后,语法如下:try{ // 程序代码 }catch(异常类型1 异常的变量名1){ // 程序代码 }catch(异常类型2 异常的变量名2){ // 程序代码 }finally{ // 程序代码 }
2023-06-06 14:28:04
157
原创 异常方法
Catch 语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查。如果发生的异常包含在 catch 块中,异常会被传递到该 catch 块,这和传递一个参数到方法是一样。使用 try 和 catch 关键字可以捕获异常。try/catch 代码块放在异常可能发生的地方。
2023-06-06 14:27:55
86
原创 throws/throw 关键字
在Java中, throw 和 throws 关键字是用于处理异常的。throw 关键字用于在代码中抛出异常,而 throws 关键字用于在方法声明中指定可能会抛出的异常类型。
2023-06-06 14:27:23
609
原创 多重捕获块
一个 try 代码块后面跟随多个 catch 代码块的情况就叫多重捕获。多重捕获块的语法如下所示:try{ // 程序代码 }catch(异常类型1 异常的变量名1){ // 程序代码 }catch(异常类型2 异常的变量名2){ // 程序代码 }catch(异常类型3 异常的变量名3){ // 程序代码 }上面的代码段包含了 3 个 catch块。可以在 try 语句后面添加任意数量的 catch 块。如果保护代码中发生异常,异常被抛给第一个 catch 块。
2023-06-06 14:26:51
77
原创 异常处理
比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error;如果你用System.out.println(11/0),那么你是因为你用0做了除数,会抛出 java.lang.ArithmeticException 的异常。这些异常有的是因为用户错误引起,有的是程序错误引起的,还有其它一些是因为物理错误引起的。异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。
2023-06-06 14:26:44
85
原创 Java Object 类
Object 类位于 java.lang 包中,编译时会自动导入,我们创建一个类时,如果没有明确继承一个父类,那么它就会自动继承 Object,成为 Object 的子类。Java Object 类是所有类的父类,也就是说 Java 的所有类都继承了 Object,
2023-06-06 14:26:10
70
原创 Exception 类的层次
Exception 类是 Throwable 类的子类。除了Exception类外,Throwable还有一个子类Error。异常类有两个主要的子类:IOException 类和 RuntimeException 类。错误一般发生在严重故障时,它们在Java程序处理的范畴之外。在 Java 内置类中(接下来会说明),有大部分常用检查性和非检查性异常。所有的异常类是从 java.lang.Exception 类继承的子类。一般地,程序不会从错误中恢复。Error 用来指示运行时环境发生的错误。
2023-06-06 14:25:46
111
原创 使用 SimpleDateFormat 格式化日期
SimpleDateFormat 是一个以语言环境敏感的方式来格式化和分析日期的类。SimpleDateFormat 允许你选择任何用户自定义日期时间格式来运行。
2023-05-19 13:19:15
203
原创 虚函数
Java 中其实没有虚函数的概念,它的普通函数就相当于 C++ 的虚函数,动态绑定是Java的默认行为。如果 Java 中不希望某个函数具有虚函数特性,可以加上 final 关键字变成非虚函数。虚函数的存在是为了多态。
2023-05-19 13:17:06
52
原创 获取当前日期时间
public class DateDemo { public static void main(String[] args) { // 初始化 Date 对象 Date date = new Date();// 使用 toString() 函数显示日期时间 System.out.println(date.toString());
2023-05-19 13:16:44
132
原创 重载(Overload)
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。最常用的地方就是构造器的重载。
2023-05-19 13:15:50
123
原创 Java 重写(Override)与重载(Overload)
例如: 父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是 IOException 的父类,抛出 IOException 异常或者 IOException 的子类异常。因此在上面的例子中,之所以能编译成功,是因为 Animal 类中存在 move 方法,然而运行时,运行的是特定对象的方法。在上面的例子中可以看到,尽管 b 属于 Animal 类型,但是它运行的是 Dog 类的 move方法。
2023-05-19 13:14:12
47
原创 方法的重写规则
重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。例如:如果父类的一个方法被声明为 public,那么在子类中重写该方法就不能声明为 protected。子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法。构造方法不能被重写。
2023-05-19 13:13:42
97
原创 Java的三种技术架构:
让java jdk\bin目录下的工具,可以在任意目录下运行,原因是,将该工具所在目录告诉了系统,当使用该工具时,由系统帮我们去找指定的目录。Java Platform Enterprise Edition,开发企业环境下的应用程序,主要针对web程序开发;Java Platform Standard Edition,完成桌面应用程序的开发,是其它两者的基础;java程序的运行环境,java运行的所需的类库+JVM(java虚拟机)。java的开发和运行环境,java的开发工具和jre。
2023-05-19 13:12:12
200
原创 classpath的配置:
负责的是编译的部分,当执行javac时,会启动java的编译器程序。如果没有定义环境变量classpath,java启动jvm后,会在当前目录下查找要运行的类文件;如果classpath的值结尾处有分号,在具体路径中没有找到运行的类,会默认在当前目录再找一次。如果classpath的值结果出没有分号,在具体的路径中没有找到运行的类,不会再当前目录找。一般不指定分号,如果没有在指定目录下找到要运行的类文件,就报错,这样可以调试程序。如果指定了classpath,那么会在指定的目录下查找要运行的类文件。
2023-05-19 13:11:42
1036
原创 类与接口
从设计层面来说,抽象类是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。备注:Java8中接口中引入默认方法和静态方法,以此来减少抽象类和接口之间的差异。行为模型应该总是通过接口而不是抽象类定义,所以通常是优先选用接口,尽量少用抽象类。选择抽象类的时候通常是如下情况:需要定义子类的行为,又要为子类提供通用的功能。现在,我们可以为接口提供默认实现的方法了,并且不用强制子类来实现它。抽象类是用来捕捉子类的通用特性的。接口是抽象方法的集合。都包含抽象方法,其子类都必须覆写这些抽象方法。
2023-05-18 11:49:21
43
原创 面向对象五大基本原则是什么
高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。抽象不应该依赖于具体实现,具体实现应该依赖于抽象。就是你出国要说你是中国人,而不能说你是哪个村子的。比如说中国人是抽象的,下面有具体的xx省,xx市,xx县。你要依赖的抽象是中国人,而不是你是xx村的。就比如一个手机拥有打电话,看视频,玩游戏等功能,把这几个功能拆分成不同的接口,比在一个接口里要好的多。一个模块对于拓展是开放的,对于修改是封闭的,想要增加功能热烈欢迎,想要修改,哼,一万个不乐意。类的功能要单一,不能包罗万象,跟杂货铺似的。
2023-05-18 11:48:40
57
原创 面向对象的特征有哪些方面
所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问。继承:继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。
2023-05-18 11:47:25
167
原创 什么是多态机制?Java语言是如何实现多态的?
所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。对于Java而言,它多态的实现机制遵循一个原则:当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。继承:在多态中必须存在有继承关系的子类和父类。
2023-05-18 11:46:56
456
原创 面向对象概述
面向对象是模型化的,你只需抽象出一个类,这是一个封闭的盒子,在这里你拥有数据也拥有解决问题的方法。需要什么功能直接使用就可以了,不必去一步一步的实现,至于这个功能是如何实现的,管我们什么事?优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护。面向对象的底层其实还是面向过程,把面向过程抽象成类,然后封装,方便我们使用的就是面向对象了。面向过程是具体化的,流程化的,解决一个问题,你需要一步一步的分析,一步一步的实现。
2023-05-18 11:45:42
42
原创 在 Java 中,如何跳出当前的多重嵌套循环
在Java中,要想跳出多重循环,可以在外面的循环语句前定义一个标号,然后在里层循环体的代码中使用带有标号的break 语句,即可跳出外层循环。
2023-05-18 11:45:38
375
原创 流程控制语句
continue 跳出本次循环,继续执行下次循环(结束正在执行的循环 进入下一个循环条件)return 程序返回,不再执行下面的代码(结束当前的方法 直接返回)1. break ,continue ,return 的区别及作用。break 跳出总上一层循环,不再执行循环(结束当前的循环体)
2023-05-18 11:44:47
36
原创 static的独特之处
就是说,一个类的静态成员,它是属于大伙的【大伙指的是这个类的多个对象实例,我们都知道一个类可以创建多个实例!】,所有的类对象共享的,不像成员变量是自个的【自个指的是这个类的单个实例对象】…在该类被第一次加载的时候,就会去加载被static修饰的部分,而且只在类第一次使用时加载并进行初始化,注意这是第一次用就要初始化,后面根据需要是可以再次赋值的。被static修饰的变量或者方法是独立于该类的任何对象,也就是说,这些变量和方法不属于任何一个实例对象,而是被类的实例对象所共享。赋值的话,是可以任意赋值的!
2023-05-18 11:43:17
44
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人