Java入门教程
文章平均质量分 75
Java用途广泛,可以用来开发传统的客户端软件和网站后台,也可以开发如火如荼 Android 应用和云计算平台。
本教程针对有编程基础(至少了解C语言)的读者,阅读完所有文章会让你达到Java中级水平。零基础的读者可以先查看C语言教程,了解编程的基本概念。
慧心的眼眸
这个作者很懒,什么都没留下…
展开
-
一口气说出 9种 分布式ID生成方式(架构师必修课)
一、为什么要用分布式ID?在说分布式ID的具体实现之前,我们来简单分析一下为什么用分布式ID?分布式ID应该满足哪些特征?1、什么是分布式ID?拿MySQL数据库举个栗子:在我们业务数据量不大的时候,单库单表完全可以支撑现有业务,数据再大一点搞个MySQL主从同步读写分离也能对付。但随着数据日渐增长,主从同步也扛不住了,就需要对数据库进行分库分表,但分库分表后需要有一个唯一ID来标识一条数据,数据库的自增ID显然不能满足需求;特别一点的如订单、优惠券也都需要有唯一ID做标识。此时一个能够转载 2020-11-16 15:34:16 · 514 阅读 · 1 评论 -
Java程序员的8大排序,你知道几个?
进QQ群:259038500即可免费领取Java学习视频8种排序之间的关系:1,直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。(2)实例(3)用java实现 01 pa...转载 2019-03-06 16:02:00 · 428 阅读 · 0 评论 -
Java菜单(菜单条、菜单和菜单项)
有两种类型的菜单:下拉式菜单和弹出式菜单。本章只讨论下拉式菜单编程方法。菜单与JComboBox和JCheckBox不同,它们在界面中是一直可见的。菜单与JComboBox的相同之处是每次只可选择一个项目。在下拉式菜单或弹出式菜单中选择一个选项就产生一个ActionEvent事件。该事件被发送给那个选项的监视器,事件的意义由监视器解释。菜单条、菜单和菜单项下拉式菜单通过出现在菜单条上的名字...转载 2018-08-15 14:03:23 · 32185 阅读 · 0 评论 -
Java列表和组合框
列表和组合框是又一类供用户选择的界面组件,用于在一组选择项目选择,组合框还可以输入新的选择。列表列表(JList)在界面中表现为列表框,是JList类或它的子类的对象。程序可以在列表框中加入多个文本选择项条目。列表事件的事件源有两种:一是鼠标双击某个选项:双击选项是动作事件,与该事件相关的接口是ActionListener,注册监视器的方法是addActionListener(),接口...转载 2018-08-15 13:43:02 · 2686 阅读 · 0 评论 -
Java选择框和单选按钮
选择框、单选框和单选按钮都是选择组件,选择组件有两种状态,一种是选中(on),另一种是未选中(off),它们提供一种简单的 “on/off”选择功能,让用户在一组选择项目中作选择。选择框选择框(JCheckBox)的选中与否开状是一个小方框,被选中则在框中打勾。当在一个容器中有多个选择框,同时可以有多个选择框被选中,这样的选择框也称复选框。与选择框相关的接口是ItemListener,事件...转载 2018-08-15 13:34:49 · 3271 阅读 · 0 评论 -
Java文本框和文本区的输入输出
在GUI中,常用文本框和文本区实现数据的输入和输出。如果采用文本区输入,通常另设一个数据输入完成按钮。当数据输入结束时,点击这个按钮。事件处理程序利用getText()方法从文本区中读取字符串信息。对于采用文本框作为输入的情况,最后输入的回车符可以激发输入完成事件,通常不用另设按钮。事件处理程序可以利用单词分析器分析出一个个数,再利用字符串转换数值方法,获得输入的数值。对于输出,程序先将数值转换成...转载 2018-08-06 13:34:24 · 9832 阅读 · 0 评论 -
Java文本框和文本区
在图形界面中,文本框和文本区是用于信息输入输出的组件。文本框文本框(JTextField)是界面中用于输入和输出一行文本的框。JTextField类用来建立文本框。与文本框相关的接口是ActionListener。文本框处理程序的基本内容有以下几个方面:声明一个文本框名。 建立一个文本框对象。 将文本框对象加入到某个容器。 对需要控制的文本框对象注册监视器,监听文本框的输入结束(...转载 2018-08-06 13:30:48 · 7748 阅读 · 0 评论 -
Java面板基础:JPanel和JScrollPane
面板有两种,一种是普通面板(JPanel),另一种是滚动面板(JScrollPane)。JPanel面板是一种通用容器,JPanel的作用是实现界面的层次结构,在它上面放入一些组件,也可以在上面绘画,将放有组件和有画的JPanel再放入另一个容器里。JPanel的默认布局为FlowLayout。面板处理程序的基本内容有以下几个方面:通过继承声明JPanel类的子类,子类中有一些组件,并...转载 2018-08-03 14:15:12 · 646 阅读 · 0 评论 -
Java标签、按钮和按钮事件简介
标签和按钮也许是图形界面中最常见的两种组件,按钮又总是与激发动作事件有关。标签标签(JLabel)是最简单的Swing组件。标签对象的作用是对位于其后的界面组件作说明。可以设置标签的属性,即前景色,背景色、字体等,但不能动态地编辑标签中的文本。程序关于标签的基本内容有以下几个方面:声明一个标签名; 创建一个标签对象; 将标签对象加入到某个容器。JLabel类的主要构造方法是:...转载 2018-08-03 14:12:48 · 3049 阅读 · 0 评论 -
Java框架窗口基础
窗口是GUI编程的基础,小应用程序或图形界面的应用程序的可视组件都放在窗口中,在GUI中,窗口是用户屏幕的一部分,起着在屏幕中一个小屏幕的作用。有以下三种窗口:Applet窗口:Applet类管理这个窗口,当应用程序程序启动时,由系统创建和处理; 框架窗口(JFrame):这是通常意义上的窗口,它支持窗口周边的框架、标题栏,以及最小化、最大化和关闭按钮; 一种无边框窗口(JWindow):...转载 2018-08-03 13:59:16 · 1198 阅读 · 0 评论 -
Java图形界面设计基础
早先程序使用最简单的输入输出方式,用户在键盘输入数据,程序将信息输出在屏幕上。现代程序要求使用图形用户界面(Graphical User Interface,GUI),界面中有菜单、按钮等,用户通过鼠标选择菜单中的选项和点击按钮,命令程序功能模块。本章学习如何用Java语言编写GUI科学试验,如何通过GUI实现输入和输出。AWT和Swing先前用Java编写GUI程序,是使用抽象窗口工具包...转载 2018-07-30 10:10:48 · 4448 阅读 · 0 评论 -
Java哈希表及其应用
哈希表也称为散列表,是用来存储群体对象的集合类结构。什么是哈希表数组和向量都可以存储对象,但对象的存储位置是随机的,也就是说对象本身与其存储位置之间没有必然的联系。当要查找一个对象时,只能以某种顺序(如顺序查找或二分查找)与各个元素进行比较,当数组或向量中的元素数量很多时,查找的效率会明显的降低。一种有效的存储方式,是不与其他元素进行比较,一次存取便能得到所需要的记录。这就需要在对象的存储...转载 2018-07-30 10:05:24 · 398 阅读 · 0 评论 -
Java向量(Vector)及其应用
Vector(向量)是 java.util 包中的一个类,该类实现了类似动态数组的功能。向量和数组相似,都可以保存一组数据(数据列表)。但是数组的大小是固定的,一旦指定,就不能改变,而向量却提供了一种类似于“动态数组”的功能,向量与数组的重要区别之一就是向量的容量是可变的。可以在向量的任意位置插入不同类型的对象,无需考虑对象的类型,也无需考虑向量的容量。向量和数组分别适用于不同的场合,一般来说,下...转载 2018-07-30 10:03:22 · 1537 阅读 · 0 评论 -
Java日期和时间类简介
Java 的日期和时间类位于 java.util 包中。利用日期时间类提供的方法,可以获取当前的日期和时间,创建日期和时间参数,计算和比较时间。Date 类Date 类是 Java 中的日期时间类,其构造方法比较多,下面是常用的两个:Date():使用当前的日期和时间初始化一个对象。 Date(long millisec):从1970年01月01日00时(格林威治时间)开始以毫秒计算...转载 2018-07-27 10:33:46 · 241 阅读 · 0 评论 -
Java语言包(java.lang)简介
Java语言包(java.lang)定义了Java中的大多数基本类,由Java语言自动调用,不需要显示声明。该包中包含了Object类,Object类是整个类层次结构的根结点,同时还定义了基本数据类型的类,如:String、Boolean、Byter、Short等。这些类支持数字类型的转换和字符串的操作等,下面将进行简单介绍。Math类Math类提供了常用的数学运算方法以及Math.PI和...转载 2018-07-27 10:30:20 · 3990 阅读 · 0 评论 -
Java Object类
Object 类位于 java.lang 包中,是所有 Java 类的祖先,Java 中的每个类都由它扩展而来。定义Java类时如果没有显示的指明父类,那么就默认继承了 Object 类。例如:public class Demo{ // ... }实际上是下面代码的简写形式:public class Demo extends Object{ // ... }在J...转载 2018-07-27 10:15:25 · 143 阅读 · 0 评论 -
Java基础类库
Java 的类库是 Java 语言提供的已经实现的标准类的集合,是 Java 编程的 API(Application Program Interface),它可以帮助开发者方便、快捷地开发 Java 程序。这些类根据实现的功能不同,可以划分为不同的集合,每个集合组成一个包,称为类库。Java 类库中大部分都是由Sun 公司提供的,这些类库称为基础类库。Java 语言中提供了大量的类库共程序开发者...转载 2018-07-17 16:42:46 · 336 阅读 · 0 评论 -
Java中文件的压缩处理
Java.util.zip 包中提供了可对文件的压缩和解压缩进行处理的类,它们继承自字节流类OutputSteam 和 InputStream。其中 GZIPOutputStream 和 ZipOutputStream 可分别把数据压缩成 GZIP 和 Zip 格式,GZIPInpputStream 和 ZipInputStream 又可将压缩的数据进行还原。将文件写入压缩文件的一般步骤如下:...转载 2018-07-17 16:10:06 · 184 阅读 · 0 评论 -
Java中文件的随机读写
Java.io 包提供了 RandomAccessFile 类用于随机文件的创建和访问。使用这个类,可以跳转到文件的任意位置读写数据。程序可以在随机文件中插入数据,而不会破坏该文件的其他数据。此外,程序也可以更新或删除先前存储的数据,而不用重写整个文件。RandomAccessFile类是Object类的直接子类,包含两个主要的构造方法用来创 建RandomAccessFile 的对象,如表 1...转载 2018-07-17 16:07:03 · 6355 阅读 · 0 评论 -
Java中文件与目录管理
目录是管理文件的特殊机制,同类文件保存在同一个目录下不仅可以简化文件管理,而且还可以提高工作效率。Java 语言在 java.io 包中定义了一个 File 类专门用来管理磁盘文件和目录。每个 File 类对象表示一个磁盘文件或目录,其对象属性中包含了文件或目录的相关信息。通过调用 File 类提供的各种方法,能够创建、删除、重名名文件、判断文件的读写权限以及是否存在,设置和查询文件的最近修改时间...转载 2018-07-11 15:25:33 · 1050 阅读 · 0 评论 -
Java面向字节流的应用
文件输入输出流文件输入输出流 FileInputStream 和 FileOutputStream 负责完成对本地磁盘文件的顺序输入输出操作。【例 10-5】通过程序创建一个文件,从键盘输入字符,当遇到字符“#”时结束,在屏幕上显示该文件的所有内容(查看源代码)。运行后在程序目录建立一个名称为 ep10_5 的文件,运行结果如图 10-8 所示:图 10-8 例 10_5 运行结果FileDes...转载 2018-07-11 15:22:58 · 541 阅读 · 0 评论 -
Java中面向字节的输入输出流
字节流以字节为传输单位,用来读写8位的数据,除了能够处理纯文本文件之外,还能用来处理二进制文件的数据。InputStream类和OutputStream类是所有字节流的父类。InputStream类面向字节的输入流都是InputStream类的子类,其类层次结构如图10-6所示。图10-6 InputStream的类层次结构图表 10-5 列出了 InputStream 的主要子类及说明。表 10...转载 2018-07-11 15:19:08 · 647 阅读 · 0 评论 -
Java面向字符的输出流
面向字符的输出流都是类 Writer 的子类,其类层次结构如图 10-5 所示。图10-5 Writer的类层次结构图表 10-3 列出了 Writer 的主要子类及说明。表 10-3 Writer 的主要子类类名功能说明CharArrayWriter写到字符数组的输出流BufferedWriter缓冲输出字符流PipedWriter输出管道OutputStreamWriter转换字符到字节的输出...转载 2018-07-10 13:36:13 · 2556 阅读 · 0 评论 -
Java中面向字符的输入流
字符流是针对字符数据的特点进行过优化的,因而提供一些面向字符的有用特性,字符流的源或目标通常是文本文件。 Reader和Writer是java.io包中所有字符流的父类。由于它们都是抽象类,所以应使用它们的子类来创建实体对象,利用对象来处理相关的读写操作。Reader和Writer的子类又可以分为两大类:一类用来从数据源读入数据或往目的地写出数据(称为节点流),另一类对数据执行某种处理(称为处理流...转载 2018-07-10 13:33:43 · 17077 阅读 · 2 评论 -
Java输入输出(IO)和流的基本概念
输入输出(I/O)是指程序与外部设备或其他计算机进行交互的操作。几乎所有的程序都具有输入与输出操作,如从键盘上读取数据,从本地或网络上的文件读取数据或写入数据等。通过输入和输出操作可以从外界接收信息,或者是把信息传递给外界。Java把这些输入与输出操作用流来实现,通过统一的接口来表示,从而使程序设计更为简单。Java流的概念流(Stream)是指在计算机的输入输出操作中各部件之间的数据流动。按照数...转载 2018-07-10 13:29:01 · 185 阅读 · 0 评论 -
Java线程的挂起、恢复和终止
有时,线程的挂起是很有用的。例如,一个独立的线程可以用来显示当日的时间。如果用户不希望用时钟,线程被挂起。在任何情形下,挂起线程是很简单的,一旦挂起,重新启动线程也是一件简单的事。挂起,终止和恢复线程机制在Java 2和早期版本中有所不同。尽管你运用Java 2的途径编写代码,你仍需了解这些操作在早期Java环境下是如何完成的。例如,你也许需要更新或维护老的代码。你也需要了解为什么Java 2会有...转载 2018-07-09 13:22:28 · 1217 阅读 · 0 评论 -
Java线程死锁
需要避免的与多任务处理有关的特殊错误类型是死锁(deadlock)。死锁发生在当两个线程对一对同步对象有循环依赖关系时。例如,假定一个线程进入了对象X的管程而另一个线程进入了对象Y的管程。如果X的线程试图调用Y的同步方法,它将像预料的一样被锁定。而Y的线程同样希望调用X的一些同步方法,线程永远等待,因为为到达X,必须释放自己的Y的锁定以使第一个线程可以完成。死锁是很难调试的错误,因为:· 通常,它...转载 2018-07-09 13:20:42 · 144 阅读 · 0 评论 -
Java线程间通信
上述例题无条件的阻塞了其他线程异步访问某个方法。Java对象中隐式管程的应用是很强大的,但是你可以通过进程间通信达到更微妙的境界。这在Java中是尤为简单的。像前面所讨论过的,多线程通过把任务分成离散的和合乎逻辑的单元代替了事件循环程序。线程还有第二优点:它远离了轮询。轮询通常由重复监测条件的循环实现。一旦条件成立,就要采取适当的行动。这浪费了CPU时间。举例来说,考虑经典的序列问题,当一个线程正...转载 2018-07-09 13:18:16 · 120 阅读 · 0 评论 -
Java线程同步
当两个或两个以上的线程需要共享资源,它们需要某种方法来确定资源在某一刻仅被一个线程占用。达到此目的的过程叫做同步(synchronization)。像你所看到的,Java为此提供了独特的,语言水平上的支持。同步的关键是管程(也叫信号量semaphore)的概念。管程是一个互斥独占锁定的对象,或称互斥体(mutex)。在给定的时间,仅有一个线程可以获得管程。当一个线程需要锁定,它必须进入管程。所有其...转载 2018-07-05 13:27:54 · 129 阅读 · 0 评论 -
Java线程优先级
线程优先级被线程调度用来判定何时每个线程允许运行。理论上,优先级高的线程比优先级低的线程获得更多的CPU时间。实际上,线程获得的CPU时间通常由包括优先级在内的多个因素决定(例如,一个实行多任务处理的操作系统如何更有效的利用CPU时间)。一个优先级高的线程自然比优先级低的线程优先。举例来说,当低优先级线程正在运行,而一个高优先级的线程被恢复(例如从沉睡中或等待I/O中),它将抢占低优先级线程所使用...转载 2018-07-05 13:26:37 · 501 阅读 · 0 评论 -
Java isAlive()和join()的使用
如前所述,通常你希望主线程最后结束。在前面的例子中,这点是通过在main()中调用sleep()来实现的,经过足够长时间的延迟以确保所有子线程都先于主线程结束。然而,这不是一个令人满意的解决方法,它也带来一个大问题:一个线程如何知道另一线程已经结束?幸运的是,Thread类提供了回答此问题的方法。有两种方法可以判定一个线程是否结束。第一,可以在线程中调用isAlive()。这种方法由Thread定...转载 2018-07-05 13:25:21 · 927 阅读 · 0 评论 -
Java创建多线程
到目前为止,我们仅用到两个线程:主线程和一个子线程。然而,你的程序可以创建所需的更多线程。例如,下面的程序创建了三个子线程:// Create multiple threads.class NewThread implements Runnable { String name; // name of thread Thread t; NewThread(String thread...转载 2018-07-04 16:18:06 · 144 阅读 · 0 评论 -
Java创建线程(Runnable接口和Thread类)
大多数情况,通过实例化一个Thread对象来创建一个线程。Java定义了两种方式:· 实现Runnable 接口;· 可以继承Thread类。下面的两小节依次介绍了每一种方式。实现Runnable接口创建线程的最简单的方法就是创建一个实现Runnable 接口的类。Runnable抽象了一个执行代码单元。你可以通过实现Runnable接口的方法创建每一个对象的线程。为实现Runnable 接口,一...转载 2018-07-04 16:16:19 · 441 阅读 · 0 评论 -
Java主线程
当Java程序启动时,一个线程立刻运行,该线程通常叫做程序的主线程(main thread),因为它是程序开始时就执行的。主线程的重要性体现在两方面:· 它是产生其他子线程的线程;· 通常它必须最后完成执行,因为它执行各种关闭动作。尽管主线程在程序启动时自动创建,但它可以由一个Thread对象控制。为此,你必须调用方法currentThread()获得它的一个引用,currentThread()是...转载 2018-07-04 16:14:42 · 4042 阅读 · 0 评论 -
Java线程模型
Java运行系统在很多方面依赖于线程,所有的类库设计都考虑到多线程。实际上,Java使用线程来使整个环境异步。这有利于通过防止CPU循环的浪费来减少无效部分。为更好的理解多线程环境的优势可以将它与它的对照物相比较。单线程系统的处理途径是使用一种叫作轮询的事件循环方法。在该模型中,单线程控制在一无限循环中运行,轮询一个事件序列来决定下一步做什么。一旦轮询装置返回信号表明,已准备好读取网络文件,事件循...转载 2018-07-03 14:56:48 · 451 阅读 · 0 评论 -
Java线程的概念
和其他多数计算机语言不同,Java内置支持多线程编程(multithreaded programming)。多线程程序包含两条或两条以上并发运行的部分。程序中每个这样的部分都叫一个线程(thread),每个线程都有独立的执行路径。因此,多线程是多任务处理的一种特殊形式。你一定知道多任务处理,因为它实际上被所有的现代操作系统所支持。然而,多任务处理有两种截然不同的类型:基于进程的和基于线程的。认识两...转载 2018-07-03 14:54:58 · 304 阅读 · 0 评论 -
Java断言
断言的概念断言用于证明和测试程序的假设,比如“这里的值大于 5”。断言可以在运行时从代码中完全删除,所以对代码的运行速度没有影响。断言的使用断言有两种方法:· 一种是 assert<<布尔表达式>> ;· 另一种是 assert<<布尔表达式>> :<<细节描述>>。如果布尔表达式的值为false , 将抛出Assertion...转载 2018-07-03 14:52:57 · 772 阅读 · 0 评论 -
使用Java创建自己的异常子类
尽管Java的内置异常处理大多数常见错误,你也许希望建立你自己的异常类型来处理你所应用的特殊情况。这是非常简单的:只要定义Exception的一个子类就可以了(Exception当然是Throwable的一个子类)。你的子类不需要实际执行什么——它们在类型系统中的存在允许你把它们当成异常使用。Exception类自己没有定义任何方法。当然,它继承了Throwable提供的一些方法。因此,所有异常,...转载 2018-06-27 14:03:52 · 623 阅读 · 0 评论 -
Java的内置异常
在标准包java.lang中,Java定义了若干个异常类。前面的例子曾用到其中一些。这些异常一般是标准类RuntimeException的子类。因为java.lang实际上被所有的Java程序引入,多数从RuntimeException派生的异常都自动可用。而且,它们不需要被包含在任何方法的throws列表中。Java语言中,这被叫做未经检查的异常(unchecked exceptions )。因...转载 2018-06-27 14:01:27 · 738 阅读 · 0 评论 -
Java finally
当异常被抛出,通常方法的执行将作一个陡峭的非线性的转向。依赖于方法是怎样编码的,异常甚至可以导致方法过早返回。这在一些方法中是一个问题。例如,如果一个方法打开一个文件项并关闭,然后退出,你不希望关闭文件的代码被异常处理机制旁路。finally关键字为处理这种意外而设计。finally创建一个代码块。该代码块在一个try/catch 块完成之后另一个try/catch出现之前执行。finally块无...转载 2018-06-27 13:59:14 · 511 阅读 · 0 评论