
《Java核心技术I》
文章平均质量分 65
Java圣经,基础好才是真的好!
阿立聊全栈
浙江大学,10年上市公司Java高级讲师,基础扎实;Java办公文章优质创作者;优快云认证博客专家;Java编程领域有着丰富的经验和技能,熟练掌握前后端技术,全栈。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
《Java核心技术I》Swing中的对话框
JOptionPane编写对话框。一个图标,一条消息,多个选项按钮。原创 2024-12-25 19:53:41 · 408 阅读 · 0 评论 -
《Java核心技术I》Swing的网格包布局
不希望组件拉伸至填满整个区域,需要设置fill约束,参数值:GridBagConstraints.NONE,HORIZONTAL,VERTICAL,BOTH.GridBagConstraints的Insets对象的left,top,right,bottom指定组件周围空间大小,外部填充。gridx,y(2,0)表示起始于0行2列(第3列),gridwidth,height(1,4)表示占据4行1列。坐标从0开始,都为0指示最左上角。weightx,y,设置为0,永远为初始大小,不会扩大或收缩。原创 2024-12-25 19:51:40 · 495 阅读 · 0 评论 -
《Java核心技术I》Swing中的弹出菜单
弹出式触发器(pop-up trigger),点击右键。不固定,随处浮动的菜单。显式弹出菜单,指定父组件。原创 2024-12-23 11:03:30 · 252 阅读 · 0 评论 -
《Java核心技术I》Swing中的菜单
JMenu.add(String s),增加到菜单尾部:editMenu.add("粘贴");可以添加到任何位置,正常在窗体顶部:frame.setJMenu(menuBar);点击一个名字可以打开菜单项(menu item)和子菜单(submenu)的菜单。菜单对象:var editMenu = new JMenu("编辑");顶层菜单添加菜单栏中:menuBar.add(editMenu);位于窗口顶部的菜单栏(menu bar),包括了下拉菜单的名字。原创 2024-12-23 11:02:12 · 570 阅读 · 0 评论 -
《Java核心技术I》Swing的滑动条
组合框在离散值中选择,滚动条从连续值中选择。构造滑动条最常用方法:var slider = new JSlider(min,max,initaValue);如果忽略参数,最大值,最小值,初始值分别为0,100,50.垂直滑动条,new JSlide(SwingConstants.VERTICAL,min,max,initValue);滑动时,addChangeListener安装了一个ChangeListener接口对象。ChangetListener listener = event -> {JSlide原创 2024-12-22 12:14:24 · 480 阅读 · 0 评论 -
《Java核心技术I》Swing的组合框
如果组合框不是可编辑的,最好调用getItemAt(combo.getSelectedIndex)。选择组合框,就产生一个动作事件,将获取当前选择的选项,转换成适当类型,通常是String.addItem方法在末尾增加选项,不止构造器,其他任何地方都可以调用这个方法。JComboBox类提供了组合框组件,是一个泛型类,JComboBox。removeItem("Monospaced")删除选项。setEditable方法可以让组合框可编辑。removeItemAt(0)删除第一项。原创 2024-12-22 12:12:35 · 211 阅读 · 0 评论 -
《Java核心技术I》Swing中的边框
BorderFactory静态方法创建边框,凹斜面,凸斜面,蚀刻,直线,蒙版,空白。边框添加标题,BorderFactory.createTitledBorder。组合边框,BorderFactory.createCompoundBorder。JComponent的setBorder方法添加边框到组件。原创 2024-12-21 10:17:00 · 236 阅读 · 0 评论 -
《Java核心技术I》Swing中单选按钮
buttonGroup.getSelection().getActionCommand()获得当前选中的按钮动作命令。new JRadioButton("Small",false),第二个参数是初始状态。将JRadioButton对象添加到按钮组中。构造ButtonGroup类型对象。原创 2024-12-21 10:15:13 · 247 阅读 · 0 评论 -
《Java核心技术I》Swing选择组件中的复选框
监听器查询bold和italic复选框状态,并且把面板中的字体设置为常规、加粗、倾斜或者粗斜体。除了输入,也需要选择组件,接下来介绍,复选框、单选按钮、选项列表以及滑块。用户点击复选框将触发一个动作事件,两个复选框使用同一动作监听器。isSelected方法将获取每个复选框当前状态。调用setSelected方法来选中或取消复选框。需要紧邻标签来说明其用途。原创 2024-12-20 16:55:38 · 427 阅读 · 0 评论 -
《Java核心技术I》Swing中滚动窗格
Swing中文本区没有滚动条,如需要,可以将文本区放在。添加到滚动窗格不是文本区特有的,所有组件都可以。类似于H5中的文本区和富文本框。(scrollpane)中。原创 2024-12-20 16:53:19 · 698 阅读 · 0 评论 -
《Java核心技术I》Swing文本区
new JTextArea(8,40),8行,每行40个字符,setRows和setColumns改变行列数。默认超出部分被裁剪,setLineWrap(true)可以自动换行。JTextArea组件接收多行文本,用“\n”换行。原创 2024-12-19 10:05:07 · 282 阅读 · 0 评论 -
《Java核心技术I》密码域
特殊文本域,避免不良企图的人看到密码,用回显字符*。原创 2024-12-19 10:01:51 · 209 阅读 · 0 评论 -
《Java核心技术I》标签和标签组件
JLabel允许指定初始文本和图标,也可以选择内容排列方式,SwingConstants的常量可以指定。SwingConstants.RIGHT或JLable.RIGHT。setText和setIcon可以在运行期间设置文本和图标。可以利用标签标识组件,表单控件前面的描述。:标签中可以放置HTML字符串。容纳文本的组件,没有任何修饰。原创 2024-12-17 09:41:50 · 316 阅读 · 0 评论 -
《Java核心技术I》文本输入
获取文本,但想去掉前后空格用trim方法:String text = textField.getText().trim();文本域(JTextField),接收单行文本。var textField = new JTextField("请输入内容", 20);textField.setText("Hello"),任何时候调用改变文本域的内容。new JTextField(20),构造一个空白文本域。文本区(JTextArea),接收多行文本。原创 2024-12-17 09:34:04 · 817 阅读 · 0 评论 -
《Java核心技术I》Swing网格布局
计算器程序使用网格,调整窗口时,按钮变大或变小,保持一致。添加组件,1行1列,1行2列以此类推。原创 2024-12-15 08:00:00 · 294 阅读 · 0 评论 -
《Java核心技术I》Swing边框布局
边框布局管理器(border layout manager)是每个JFrame的内容窗格的默认布局管理器。为每一个组件选择一个位置,放在内容窗格的中部,北,南,东,西。把按钮添加到面板中,不设置边框布局的话,面板会占用整个窗口。原创 2024-12-15 08:00:00 · 369 阅读 · 0 评论 -
《Java核心技术I》Swing布局管理器
Java开发环境提供了GUI生成器,但要弄清底层原理,也需要手动调整。流布局管理器(flow layout manager)回顾之前程序,按钮包含在JPanel中,用。中,布局管理器绝定容器组件的位置和大小。自动换行,按钮总是位于面板中央。原创 2024-12-14 10:25:47 · 422 阅读 · 0 评论 -
《Java核心技术I》Swing用户界面组件
JButton继承自JComponent,包含DefaultButtonModel对象,BasicButtonUI对象。Swing设计者采用了一种很有名的设计模式:MVC。原创 2024-12-14 10:23:46 · 677 阅读 · 0 评论 -
Swing1.计算器案例
【代码】Swing1.计算器案例。原创 2024-12-12 21:33:22 · 765 阅读 · 0 评论 -
《Java核心技术I》进程
除多线程外,需要执行其他程序,可以使用ProcessBuilder和Process类。Process类在单独的操作系统进程中执行一个命令。ProcessBuilder类允许我们配置Process对象。:ProcessBuilder类可以取代Runtime.exec调用且更灵活。原创 2024-12-12 14:21:45 · 449 阅读 · 0 评论 -
《Java核心技术I》较早的线程安全集合
Java初始版本,Vector和Hashtable提供了动态数组和散列表的线程安全实现。但认为过时,已被ArrayList和HashMap类所取代。但不是线程安全的。任何集合类都可以使用同步包装器(synchronization wrapper)变成线程安全的:结果集合的方法使用锁加以保护,可以提供线程安全的访问。原创 2024-12-12 14:19:12 · 430 阅读 · 0 评论 -
《Java核心技术I》并行数组算法
Arrays类提供了大量并行化操作。Arrays.parallelSort方法可以对一个基本类型值或对象的数组排序。原创 2024-12-11 11:50:51 · 392 阅读 · 0 评论 -
《Java核心技术I》 并发集视图
静态newKeySet方法会生成一个Set,实际是ConcurrentHashMap的一个包装器。映射值为Boolean.TRUE,但并不关心值。并没有ConcurrentHashSet类。想要一个很大的线程安全的集但不是映射。原创 2024-12-11 11:49:05 · 380 阅读 · 0 评论 -
《Java核心技术I》对并发散列映射的批操作
Java API提供了批处理,计时其他线程处理映射,这些操作也能安全的执行。上述各个操作,需要指定一个参数化阈值(parallelism threshold),如果映射包含的元素多于阈值,就会并行完成批处理,如果希望1个线程批处理,可以使用阈值Long.MAX_VALUE,尽可能多的线程运行使用阈值1.原创 2024-12-09 18:27:18 · 746 阅读 · 0 评论 -
《Java核心技术I》映射条目的原子更新
ConcurrentHashMap只有部分原子更新。JavaAPI提供了一些新方法,例如:compute方法可以提供一个键和一个计算新值的函数。1 : v+1)注释:ConcurrentHashMap中不允许有null值。很多方法都使用null来指示映射中某个给定的键不存在。原创 2024-12-09 18:25:59 · 463 阅读 · 0 评论 -
《Java核心技术I》高效的映射、集和队列
java.util.concurrent包提供了映射、有序集和队列的高效实现:ConcurrentHashMap、ConcurrentSkipListMap、ConcurrentSkipListSet和ConcurrentLinkedQueue。这类集合使用复杂算法,size方法不一定能在常量时间内完成操作,确定大小需要遍历。:庞大的并发散列映射,size无法得到它的大小,只能返回int,如果包含超过20亿个条目,mappingCount方法可以把大小作为long返回。集合返回。原创 2024-12-08 11:15:09 · 308 阅读 · 0 评论 -
《Java核心技术I》线程安全的集合之阻塞队列
多个线程要并发修改一个数据结构,如散列表,很容易破坏这个数据结构。原创 2024-12-08 11:12:35 · 799 阅读 · 0 评论 -
《Java核心技术I》线程局部变量
ThreadLocal辅助类为各个线程提供各自的实例。要访问具体的格式化方法,可以调用:多线程中生成随机数也存在类似问题,java.util.Random是线程安全的,但如果多线程需要等待一个共享的随机数生成器,很低效。原创 2024-12-07 17:56:45 · 373 阅读 · 0 评论 -
《Java核心技术I》死锁
有可能会因为每一个线程要等待更多的钱款存入而导致所有线程都被阻塞,这样的状态称为死锁(deadlock)。通俗的说两个或多个线程互相持有对方释放锁的必要资源,导致都无法执行。提示:当程序挂起时,按下Ctrl+\,将得到一个线程转储,会列出所有线程。可以运行jconsole并参考线程面板。如上,线程1和线程2显然都被阻塞,两个账户的余额都不足以转账,两个线程都无法执行下去。如果把之前的例子中,每次转账至多1000的限制去掉,很快就会发生死锁,试试看。原创 2024-12-07 17:55:05 · 313 阅读 · 0 评论 -
《Java核心技术I》原子性
AtomicInteger类提供了incrementAndGet和decrementAndGet,分别以原子方式将一个整数进行自增或自减。java.util.concurrent.atomic包中有很多类使用了高效的机器级指令保证其他操作的原子性。原创 2024-12-06 09:50:18 · 125 阅读 · 0 评论 -
《Java核心技术I》final变量
如果不使用final,无法保证其他线程看到的是accounts更新后的值,可能都只是看到null而不是HashMap。当然,对这个映射的操作并不是线程安全的,如果有多个线程更改和读取这个映射,仍然需要进行同步。其他线程会在构造完成之后才看到这个accounts变量。原创 2024-12-06 09:48:57 · 310 阅读 · 0 评论 -
《Java核心技术I》volatile字段
Brian Goetz创造了以下"同步格言",如果写一个变量,这个变量接下来可能会被另一个线程读取,或者,如果读一个变量,而这个变量可能已经被另一个线程写入值,那么必须使用同步。或许使用内部对象锁不是个好主意,如果另一个线程对该对象加锁,isDone和setDone方法可能会阻塞。编译器会加入适当代码,确保如果一个线程对done变量做了修改,这个修改对读取这个变量的所有其他线程都可见。如果声明一个字段为volatile,那么编译器和虚拟机就知道该字段可能被另一个线程并发更新。原创 2024-12-05 12:40:11 · 621 阅读 · 0 评论 -
《Java核心技术I》监视器概念
锁和条件是实现线程同步的强大工具,但是严格的说,不是面向对象的,多年研究希望不要求显示锁就能保证多线程的安全性。原创 2024-12-05 12:38:40 · 161 阅读 · 0 评论 -
《Java核心技术I》同步块
Vector类的get和set方法是同步的,但是,这没啥用,在第一次get调用完成之后,一个线程完全可能在transfer方法中抢占,然后另一个线程可能会在相同的位置存储不同的值。文档中没有给出这样的承诺,你必须仔细研究源代码,而且还希望将来的版本不会引入非同步的更改方法。例如:考虑Vector类,这是一个列表,它的方法是同步的,我们假设将银行余额存储在一个Vector。:Java虚拟机对同步方法提供了内置支持,不过,同步块会编译很长的字节码序列来管理内部锁。有时使用对象锁实现额外原子操作,这种做法称为。原创 2024-12-04 09:52:48 · 302 阅读 · 0 评论 -
《Java核心技术I》synchronized关键字
以上两种可以控制锁定,但完全可以使用内置的一种机制,Java中每个对象都有一个内部锁。一个方法声明时有synchronized关键字,那么对象的锁将保护整个方法。也就是说,要调用这个方法,线程必须获得内部对象锁。例如,可以将Bank类中的transfer方法声明为synchronized,而不必使用一个显式的锁。原创 2024-12-04 09:50:53 · 984 阅读 · 0 评论 -
《Java核心技术I》锁对象和条件对象
两种机制防止并发访问代码块,synchronized关键字和Java5的ReentrantLock重入锁类。这个结构确保任何时刻只有一个线程进入临界区,一旦一个线程锁定了锁对象,其他任何线程无法通过lock语句,当其他线程调用lock时,它们会暂停,直到第一个线程释放这个锁对象。:要把unlock操作包括在finally子句中,如果临界区的代码抛出一个异常,锁必须释放,否则,其他线程将永远阻塞。原创 2024-12-03 20:00:18 · 1011 阅读 · 0 评论 -
《Java核心技术I》线程同步
两个线程共享统一数据的存取,分别调用修改,会相互覆盖数据,导致对象被破坏。原创 2024-12-03 19:38:28 · 496 阅读 · 0 评论 -
《Java核心技术I》线程属性
stop已被废弃,没有办法强制线程终止。interrupt方法可以用来请求终止一个线程。对一个线程调用这个方法时,线程状态会设置为中断状态,每个线程都有的布尔标志,每个线程都应该不时的检查这个标志,以判断线程是否被中断。Thread.currentThread.isInterrupted()来判断。线程被阻塞,就无法检查中断状态,引入InterruptedException异常。原创 2024-12-03 19:35:46 · 851 阅读 · 0 评论 -
《Java核心技术I》线程状态
确定当前线程的状态,只需要调用getState()方法。原创 2024-12-02 20:59:52 · 383 阅读 · 0 评论 -
《Java核心技术I》并发中什么是线程?
将执行的任务代码放在实现Runnable接口的类的run方法中。构造一个Thread对象,new Thread(r)启动线程,t.start()注释:可以通过继承Thread实现,但不推荐,应当要把并行任务和运行机制解耦合,多任务创建多个线程开销太大,后续用线程池。警告:Thread和Runnable都有run方法,启动线程是start,直接调用run只是执行了普通线程。原创 2024-12-02 20:57:52 · 589 阅读 · 0 评论