![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java入门
文章平均质量分 85
Link_Zero
Java爱好者
展开
-
反射机制三(反射机制的效率问题)
反射存在缺点:反射会大大降低程序的执行效率。接下来我们做个简单的 测试来直接感受一下反射的效率。Java 反射是要解析字节码,将内存中的对象进行解析,包括了一些动态类型,而 JVM 无法对这些代码进行优化。因此,反射操作的效率要比那些非反射操作低得多!原创 2024-05-02 09:53:08 · 438 阅读 · 0 评论 -
反射机制二(反射机制的常见操作)
反射机制的常见操作,实际上就是“Class 对象”的常用方法的使用。为了测试方便,我们先定义一个简单的 User 类。原创 2024-05-01 08:33:37 · 278 阅读 · 0 评论 -
反射机制一
Java 反射机制是 Java 语言一个很重要的特性,它是 Java “动态性”的重要体现。反射机 制可以让程序在运行时加载编译期完全未知的类,让我们的程序更加灵活、更加开放。但是,反射机制的不足就是会大大降低程序执行的效率。反射机制在实际开发中直接使用的并不多,但是很多框架底层都会使用到反射机制。因 此,理解反射机制对于大家后面学习更加深入的知识非常必要。原创 2024-04-30 08:47:10 · 833 阅读 · 0 评论 -
Swing 中的其他控件(用户注册案例)
我们将使用前边所学的控件模拟实现一个简单的用户注册的验证功能。需求如下:用户姓名必须填写,密码不能为空,兴趣爱好最少选择一项。验 证时如果哪一项没有通过,弹出对话框,显示对应错误;如果验证通过了,使用对话框显示 所有填入的信息。原创 2024-04-27 09:00:21 · 254 阅读 · 0 评论 -
Swing 中的其他控件(JTable)
但是表中数据有多行多列,所以, 每一行都是一个 Vector,总的数据也是 Vector,在总的 Vector 中压入大量行的 Vector 对象。我 们不建议直接对 JTable 直接添加数据,如同上面的下拉列表一样,JTable 也是使用 Model 的方式维护数据的,而且在添加数据时也不推荐使用数组的方式,大家都知道数组有太多局 限性,比如长度固定,在真实开发中,有可能我们根本不知道数据的长度,所以比较推荐使 用集合 Vector。JTable 使用专有的整数来表示它所对应的模型的行和列。原创 2024-04-26 11:13:14 · 943 阅读 · 0 评论 -
Swing 中的其他控件
但是如果添加 ItemListener,重写其 void itemStateChanged(ItemEvent e)方法,那 么只有选项改变时才会触发事件,比方已经选中的是“学士”,如果还是选中“学士”不会 触发事件,除非选择除“学士”以外的选项事件才能触发事件。另外,因为 Model 中压入的元素是 Object 类型,所以我们可以放入任何的引用 数据类型,比如压入任何的 JavaBean,这样取出的数据也是一个 JavaBean,放置 JavaBean 的好处是方便以后的处理。原创 2024-04-25 08:54:50 · 1048 阅读 · 0 评论 -
事件模型三(使用匿名内部类实现事件处理)
在内部类中还有一种特殊的类,就是匿名内部类,那么使用匿名内部类会发现代码精简 程度更高。使用外部类(自定义的一个独立于窗口类的监听实现类)实现事件。使用内部类实现事件。内部类配合使用适配器实现事件。匿名内部类实现事件。让窗口类实现事件监听接口,使其即为窗口又为事件监听类。但是这么多种事件处理的方式,我们究竟该如何取舍呢?那是否是代码越少,质量越高 呢?其实我们完成代码不是以代码的多少进行取舍,而是要综合考虑代码的可维护性、可重 用性、负载问题等等。原创 2024-04-24 08:32:37 · 785 阅读 · 0 评论 -
事件模型二(事件处理的实现方式)
这样写的好处在于 LoginFrame 甚至不需要定义 get 方法去获得文本框 对象,因为在内部类中可以直接访问,而且在实例化内部类的构造方法中连窗口对象都不需 要传入,因为当时我们传入窗口对象是为了访问该窗口本身或该窗口的成员,但是现在我们 的内部类可以直接访问窗口本身或该窗口的成员。如果用以上的方式实现事件处理时,代码量感觉太多,要在窗口类中添加监 听,并且传入窗口对象,在监听类中处理业务。适配器就是实现了接口事件的类,不过并不是真的实现,而只是空实现(即只有{}), 没有具体的方法体。原创 2024-04-23 09:07:26 · 762 阅读 · 0 评论 -
事件模型一(事件模型简介及常见事件模型)
对于采用了图形用户界面的程序来说,事件控制是非常重要的。一个源(事件源)产生一个事件并把它(事件对象)送到一个或多个监听器那里,监听 器只是简单地等待,直到它收到一个事件,一旦事件被接收,监听器将处理这些事件。一个事件源必须注册监听器以便监听器可以接收关于一个特定事件的通知。原创 2024-04-22 08:47:11 · 695 阅读 · 0 评论 -
GUI 编程(Swing 基础)
GUI 编程的实现,是由一系列图形化组件来完成的,这些 GUI 的构件被称为控件;在 Java 的早期版本中,GUI 控件由名为 AWT 的标准库来ᨀ供的。除了 GUI 组件外,AWT 还包括其它功能来支持图像绘画、处理剪切/复制类型的数据传 送,以及其它相关操作。便于用户输入的一组丰富的界面组件。将组件放置在适当位置的几中布局管理器事件处理模型。.图形和图像工具等等。要使用到该包中的类,则必须显式地声明如下语句:import java.awt.*;原创 2024-04-21 09:49:37 · 814 阅读 · 0 评论 -
GUI 编程(布局管理器)
如果使用坐标定位法(空布局),在一个比较复杂的界面上定位每个控件 的坐标是一个非常麻烦的工作,而且在界面大小发生改变时,控件的绝对位置也不会随之发 生改变。那么如果我们想让用户界面上的组件可以按照不同的方式进行排列怎么办?例如: 可以依序水平排列,或者按网格方式进行排列等,其实每种排列方案都是指组件的一种“布 局”,要管理这些布局,就需要布局管理器。管理布局的类由 java.awt 包来ᨀ供,布局管理器是一组实现 java.awt.LayoutManager 接 口的类,由这些类自动定位组件。原创 2024-04-18 18:29:12 · 853 阅读 · 0 评论 -
GUI 编程(常用基本控件)
它是一个单行的密码框控件,具体使用方式和 JTextField 大致一样,所以不再 赘述。JLabel 控件是最简单的 Swing 组件之一,用于在窗体上显示标签, JLabel 既可以显示 文本,也可以显示图像。在图形界面程序中,按钮可能是使用量最大的控件之一,javax.swing 包中 JButton 类就 是用来创建按钮的。JTextField 也是一个轻量级控件,它允许用户编辑单行文本。JButton 中还提供了很多设置按钮属性的方法,如设置按钮上的文本、按钮等,JLabel 常用的方法如下表。原创 2024-04-17 09:05:54 · 659 阅读 · 0 评论 -
网络编程四(UDP通信的实现)
UDP 协议与上节讲到的 TCP 协议不同,是面向无连接的,双方不需要建立连接便可通 信。UDP 通信所发送的数据需要进行封包操作(使用 DatagramPacket 类),然后才能接收 或发送(使用 DatagramSocket 类)。原创 2024-04-16 08:43:13 · 923 阅读 · 0 评论 -
网络编程三(TCP 通信的实现)
TCP 协议是面向的连接的,在通信时客户端与服务器端必须建立连接。在网络通讯中,第一次主动发起通讯的程序被称作客户端(Client)程序,简称客户端,而在 第一次通讯中等待连接的程序被称作服务器端(Server)程序,简称服务器。一旦通讯建立, 则客户端和服务器端完全一样,没有本质的区别。套接字 Socket 是一种进程间的数据交换机制。这些进程既可以在同一机器上,也可以在通过网络连接的不同机器上。换句话说,套接字起到通信端点的作用。原创 2024-04-15 09:52:30 · 996 阅读 · 0 评论 -
网络编程二(Java 网络编程中的常用类)
Java 为了可移植性,不允许直接调用操作系统,而是由 java.net 包来提供网络功能。Java 虚拟机负责提供与操作系统的实际连接。下面我们来介绍几个 java.net 包中的常用的类。原创 2024-04-14 11:33:17 · 480 阅读 · 0 评论 -
网络编程一(基本概念)
如今,计算机已经成为人们学习、工作、生活必不可少的工具。我们利用计算机可以和 亲朋好友网上聊天,也可以玩网游、发邮件等等,这些功能实现都离不开计算机网络。计算 机网络实现了不同计算机之间的通信,这必须依靠编写网络程序来实现。下面,我们将教大 家如何编写网络程序。原创 2024-04-13 08:55:10 · 1063 阅读 · 0 评论 -
多线程技术五(线程并发协作)
生产者和消费者共享同一个资源,并且生产者和消费者之间相互依赖,互为条 件。对于生产者,没有生产产品之前,消费者要进入等待状态。而生产了产品之后, 又需要马上通知消费者消费。对于消费者,在消费之后,要通知生产者已经消费结束,需要继续生产新产品 以供消费。在生产者消费者问题中,仅有 synchronized 是不够的。synchronized 可阻止并发更新同一个共享资源,实现了同步;synchronized 不能用来实现不同线程之间的消息传递(通信)。原创 2024-04-12 08:46:01 · 955 阅读 · 0 评论 -
多线程技术四(线程同步)
同步问题的提出现实生活中,我们会遇到“同一个资源,多个人都想使用”的问题。比如:教室里,只 有一台电脑,多个人都想使用。天然的解决办法就是,在电脑旁边,大家排队。前一人使用 完后,后一人再使用。线程同步的概念线程同步其实就是一种等待机制,多个需要同时访问此对象的线程进入这个对象的等待 池形成队列,等待前面的线程使用完毕后,下一个线程再使用。多线程操作同一个对象(未使用线程同步)Account a1 = new Account(100, "王");// 定义取钱线程对象;// 定义取钱线程对象;原创 2024-04-11 08:51:46 · 836 阅读 · 0 评论 -
多线程技术三(线程基本信息和优先级)
线程也是对象,系统为线程定义很多方法:优先级、名字等等。这样对于我们需要对多 个线程做管理提供了便利。优先级低只是意味着获得调度的概率低。并不是绝对先调用优先级高的线程 后调用优先级低的线程。 线程的优先级用数字表示,范围从 1 到 10,一个线程的缺省优先级是 5。 处于就绪状态的线程,会进入“就绪队列”等待 JVM 来挑选。 使用下列方法获得或设置线程对象的优先级。原创 2024-04-10 08:34:41 · 333 阅读 · 0 评论 -
多线程技术二(线程状态和生命周期)
线程死亡的原因有两个。另一个是线程被强制终止,如通过执行 stop()或 destroy()方法来终止一个线程(注:stop()/destroy()方法已经被 JDK 废弃,不推荐使用)。线程 A 在运行期间,可以调用线程 B 的 join()方法,让线程 B 和线程 A 联合。如下面示例中,“爸爸线程”要抽烟, 于是联合了“儿子线程”去买烟,必须等待“儿子线程”买烟完毕,“爸爸线程”才能继续抽烟。4. join()线程联合: 当某个线程等待另一个线程执行结束后,才能继续执行时,使用 join()方法。原创 2024-04-09 08:37:17 · 1032 阅读 · 0 评论 -
多线程技术一(基本概念、Java中如何实现多线程)
多线程是 Java 语言的重要特性,大量应用于网络编程、服务器端程序的开发,最常见 的 UI 界面底层原理、操作系统底层原理都大量使用了多线程。我们可以流畅的点击软件或者游戏中的各种按钮,其实,底层就是多线程的应用。UI 界面的主线程绘制界面,如果有一个耗时的操作发生则启动新的线程,完全不影响主线程的 工作。当这个线程工作完毕后,再更新到主界面上。我们可以上百人、上千人、上万人同时访问某个网站,其实,也是基于网站服务器的多线程原理。如果没有多线程,服务器处理速度会极大降低。原创 2024-04-08 08:47:54 · 1024 阅读 · 0 评论 -
Java 对象的序列化和反序列化
对象的本质是用来组织和存储数据的,对象本身也是数据。那么,能不能将对象存储到 硬盘上的文件中呢?能不能将对象通过网络传输到另一个电脑呢?我们可以通过序列化和 反序列化来实现这些需求。原创 2024-04-07 10:35:37 · 492 阅读 · 0 评论 -
IO技术二(常用流)
System.in 是字节流对象,代表键盘的输入,如果我们想按行接收用户的输入时,就必 须用到缓冲字符流 BufferedReader 特有的方法 readLine(),但是经过观察会发现在创建 BufferedReader 的 构 造 方 法 的 参 数 必 须 是 一 个 Reader 对 象 , 这 时 候 我 们 的 转 换 流 InputStreamReader 就派上用场了。文件字节流可以处理所有的文件,但是字节流不能很好的处理 Unicode 字 符,经常会出现“乱码”现象。原创 2024-04-05 09:42:48 · 688 阅读 · 0 评论 -
IO 技术
对于任何程序设计语言而言,输入输出(Input/Output)系统都是非常核心的功能。程序运 行需要数据,数据的获取往往需要跟外部系统进行通信,外部系统可能是文件、数据库、其 他程序、网络、IO 设备等等。外部系统比较复杂多变,那么我们有必要通过某种手段进行 抽象、屏蔽外部的差异,从而实现更加便捷的编程。输入(Input)指的是:可以让程序从外部系统获得数据(核心含义是“读”,读取外部数据)。原创 2024-04-04 09:43:51 · 1179 阅读 · 0 评论 -
容器七(遍历集合的方法总结、Collections 工具类)
容器七(遍历集合的方法总结、Collections 工具类)原创 2024-04-03 09:02:19 · 479 阅读 · 0 评论 -
容器六(迭代器)
所有实现了Collection接口的容器类都有一个iterator方法用以返回一个实现了Iterator接 口的对象。Iterator对象称作迭代器,用以方便的实现对容器内元素的遍历操作。原创 2024-04-02 08:49:58 · 323 阅读 · 0 评论 -
容器五(Set 接口)
Set 接口继承自 Collection,Set 接口中没有新增方法,方法和 Collection 保持完全一致。我们在前面通过 List 学习的方法,在 Set 中仍然适用。因此,学习 Set 的使用将没有任何难 度。Set 容器特点:无序、不可重复。无序指 Set 中的元素没有索引,我们只能遍历查找;不可重复指不允许加入重复的元素。更确切地讲,新元素如果和 Set 中某个元素通过 equals() 方法对比为 true,则不能加入;甚至,Set 中也只能放入一个 null 元素,不能多个。原创 2024-04-01 08:33:37 · 416 阅读 · 0 评论 -
容器四(Map 接口)
Map 就是用来存储“键(key)-值(value) 对”的。Map 类中存储的“键值对”通过键来标 识,所以“键对象”不能重复。Map 接口的实现类有 HashMap、TreeMap、HashTable、Properties 等。原创 2024-03-31 12:25:33 · 824 阅读 · 0 评论 -
容器二(List接口)
List是指“有顺序、可重复”的容器。List接口是Collection接口的子接口,因此Collection 接口中的方法 List 接口都拥有;同时,List 接口增加了和顺序(顺序指的就是索引)相关的 方法。原创 2024-03-30 08:38:54 · 360 阅读 · 0 评论 -
容器三(ArrayList、LinkedList、Vector)
我们知道,数组长度是有限的,而 ArrayList 是可以存放任意数量的对象,长度不受限 制,那么它是怎么实现的呢?本质上就是通过定义新的更大的数组,将旧数组中的内容拷贝 到新数组,来实现扩容。双向链表也叫双链表,是链表的一种,它的每个数据节点中都有两个指针,分别指向前 一个节点和后一个节点。所以,从双向链表中的任意一个节点开始,都可以很方便地找到 所有节点。Vector 底层是用数组实现的 List,相关的方法都加了同步检查,因此“线程安全,效率低”。特点:查询效率高,增删效率低,线程不安全。原创 2024-03-29 11:03:11 · 531 阅读 · 0 评论 -
容器一(泛型、Collection 接口)
可以在类的声明处增加泛型列表,如:。此处,字符可以是任何标识符, 一般采用这 3 个字母。class MyCollection {// E:表示泛型;public E get(int index) {// E:表示泛型;public void set(E e, int index) {// E:表示泛型;泛型 E 像一个占位符一样表示“未知的某个数据类型”,我们在真正调用的时候传入这个 “数据类型”。// 这里的”String”就是实际传入的数据类型;原创 2024-03-28 08:36:27 · 985 阅读 · 0 评论 -
常用类六(枚举)
JDK1.5 引入了枚举类型。枚举类型的定义包括枚举声明和枚举体。枚举体就是放置一些常量。原创 2024-03-27 09:05:26 · 289 阅读 · 0 评论 -
常用类五(File类)
以 pathname 为路径创建 File 对象,如果 pathname 是相对路径,则默认的当前路径在系 统属性 user.dir 中存储。java.io.File 类:代表文件和目录。在开发中,读取文件、生成文件、删除文件、修改 文件的属性时经常会用到本类。执行完毕后,在本项目和 D盘下都生成了新的文件。原创 2024-03-26 09:35:26 · 613 阅读 · 0 评论 -
常用类四(Math类)
java.lang.Math 提供了一系列静态方法用于科学计算;其方法的参数和返回值类型一般 为 double 型。如果需要更加强大的数学运算能力,计算高等数学中的相关内容,可以使用 apache commons 下面的 Math 类库。原创 2024-03-26 09:32:39 · 289 阅读 · 0 评论 -
常用类三(时间处理类)
在计算机世界,我们把 1970 年 1 月 1 日 00:00:00 定为基准时间,每 个度量单位是毫秒(1 秒的千分之一)我们用 long 类型的变量来表示时间,从基准时间往前几亿年,往后几亿年都能表示。如果想获得现在时刻的“时刻数值”,可以使用:long now = System.currentTimeMillis();这个“时刻数值”是所有时间类的核心值,年月日都是根据这个“数值”计算出来的。原创 2024-03-25 09:03:29 · 647 阅读 · 0 评论 -
常用类二(字符串相关类)
String 类、StringBuilder 类、StringBuffer 类是三个字符串相关类。String 类是的对象代 表不可变的字符序列,StringBuilder 类和 StringBuffer 类代表可变字符序列。关于这三个类 详细的用法,在笔试面试以及实际开发中经常用到,我们必须掌握好它们。原创 2024-03-25 09:03:02 · 986 阅读 · 0 评论 -
常用类一(包装类)
常用类一(包装类)原创 2024-03-24 12:41:49 · 678 阅读 · 0 评论 -
数组三(冒泡排序、二分查找)
数组三(冒泡排序、二分查找)原创 2024-03-24 12:41:21 · 462 阅读 · 0 评论 -
数组二(多维数组)
数组二(多维数组)原创 2024-03-23 10:08:58 · 243 阅读 · 0 评论 -
数组一(初始化及常见操作)
数组一(初始化及常见操作)原创 2024-03-23 10:08:22 · 1247 阅读 · 0 评论