四月天行健
这个作者很懒,什么都没留下…
展开
-
【Java每日面试题】—— String、StringBuilder和StringBuffer的区别?
String对象创建后不可变,内容不能被修改,对字符串修改会产生一个新的字符串对象。线程安全字符串内容不发生变化或少量字符串操作。原创 2024-11-20 20:36:07 · 301 阅读 · 0 评论 -
【Java面试】—— 创建线程池的两种方式(执行流程、拒绝策略)(详细)
ThreadPoolExecutor(推荐)和Executors工具类创建线程池,详解:参数、执行流程、拒绝策略。Executors可能引发资源耗尽问题。原创 2024-11-18 15:56:31 · 223 阅读 · 0 评论 -
【Java面试题】—— 线程安全问题解决方案(synchronized和Lock区别)
线程安全问题和解决方案,synchronized和Lock的区别(面试题)。synchronized是Java内置关键字,lock是接口synchronized是隐式加锁,流程自动化;而lock是显式加锁,需要手动调用lock和unlock方法synchronized常作用于代码块或方法;而lock只能作用于方法synchronized锁的状态无法判断;而lock可以判断锁的状态synchronized不可被中断;而lock支持中断锁和超时加锁synchronized只支持非公平锁,而lock支持原创 2024-11-18 11:59:58 · 52 阅读 · 0 评论 -
【Java面试题】—— HashCode和equals默认实现和重写
HashCode和equals的区别?hashCode和equals方法默认是两个对象地址比较。重写后是根据两个对象的内容比较。两个对象,如果equals()返回值为true,hashCode()返回值一定相等。如果hashCode()返回值相等,equals()返回值不一定为true。原创 2024-11-14 21:47:01 · 353 阅读 · 0 评论 -
【Java面试题】—— HashSet底层实现原理
在JDK8之前,HashSet底层基于数组+链表实现。在JDK8之后,HashSet底层基于数组+链表+红黑树实现。HashSet实际上是哈希表,哈希表是一个数组,数组中的每个元素是一个链表或红黑树。原创 2024-11-14 19:55:06 · 207 阅读 · 0 评论 -
【Java面试题】—— 简述throw和throws的区别?
抛出的异常类型,如果发生了异常,则抛给调用者,可以声明多个异常类型。, 根据具体情况显式地抛出异常,每次只能抛出一个异常对象。当throw语句执行时,立即停止当前方法的执行。原创 2024-11-12 11:42:00 · 93 阅读 · 0 评论 -
【Java面试题】—— Integer的缓存机制
Integer缓存机制:-128~127范围内数值放到缓存区重复使用。原创 2024-11-12 11:19:02 · 149 阅读 · 0 评论 -
【Java面试题】—— 什么是自动装箱?自动拆箱?
自动装箱:将基本类型变量赋值给包装类型变量(基本类型自动转换为包装类型)原创 2024-11-12 10:58:10 · 33 阅读 · 0 评论 -
【JAVA】-- 黄金矿工小游戏(二)(实现思路+每步代码)
继上篇文章内容GameWin类增加代码块内添加Object类增加Line类修改switch case3需要修改二、拉取速度通过线程的sleep实现拉取的速度,sleep时间越长速度越慢,通过一个变量m决定时间长短。抓取速度分为三种:1、空勾时的速度2、抓取金块的速度3、抓取岩石的速度m决定sleep时间Rock类增加Gold类增加Line类增加switch case3方法增加m=1表示空勾时的速度。 if添加如果能移动则改变m。原创 2022-07-12 19:40:48 · 3015 阅读 · 0 评论 -
【JAVA】-- 黄金矿工小游戏(一)(实现思路+每步代码)
游戏规则:抓取石块右键可以爆破、抓取金块右键快速抓取。完成任务:窗体绘制、钩爪往返旋转、物体批量绘制、双缓存解决闪动问题、点和矩形碰撞检测、多种类物体随机生成、物体堆叠检测、多种类抓取速度判定、积分设置、关卡设置、重新开始、单关卡倒计时、金块的快速拉取、石块爆破、商店购物。游戏大致界面:二、绘制图片需要几个图片素材,私信。新建imgs文件夹存放图片。背景由多个图片组成,所以创建一个背景类。获取图片,用绘图技术将图片画在界面上;注意根据图片大小计算好xy位置。GameWin类增加原创 2022-07-12 13:00:39 · 5701 阅读 · 3 评论 -
【JAVA】-- 消除小球游戏(实现思路+每步代码)
有N个小球会不同速度的移动,小球碰到窗口边界会反弹,点击移动的小球,即可消除,全部消除后,弹出窗口提示是否再来一局。创建一个512×384的窗口二、构建面板创建BackgroundPanel面板类主类MainFrame增加实例化BackgroundPanel类构造方法增加将面板增加到顶级窗口中三、生成一个小球把一个标签设置成一个小球,将小球(标签)添加到面板组件中。小球类继承标签组件,实现接口重写run()方法实现小球移动。MainFrame类增加实例原创 2022-07-10 12:41:29 · 1147 阅读 · 0 评论 -
【JAVA】-- Swing常用组件(JFrame、JDialog、JButton、JCheckBox、JComboBox、JLabel、JRadioButton、JTextField等)
本文章没有详细讲解,只是介绍常用组件和常用方法。Swing组件通常被称为“轻量级组件”。常用组件如下:一个容器,各个组件的载体,创建一个窗口。常用方法:设置窗口的扩展状态,state可选以下:MAXIMIZED_HORIZ(水平方向最大化)MAXIMIZED_VERT(垂直方向最大化)MAXIMIZED_BOTH(水平、垂直方向都最大化)设定关闭方式,operation可选:JFrame.DO_NOTHING_ON_CLOSE(什么也不做)JFrame.HIDE_ON_CLOSE(隐藏当前窗口)JFrame原创 2022-07-08 13:25:21 · 2364 阅读 · 0 评论 -
【JAVA】-- 简易超市管理系统窗口(六)
下面将完成“查询内容”的相关功能,实现可查询订单记录。实例化Cha类对象getMainPanel方法增加将Cha类对象添加到JPanel功能面板组件上。getChaButton方法增加/修改为“查询内容”增加鼠标点击事件,实现点击切换页面 构造方法增加 构造方法增加 点击按钮下拉框出现进货数据文件的订单。构造方法增加先判断文件是否存在,不存在则返回注意先清除上次的查询订单。否则会重复订单。 使用高级流将文件的内容保存到集合。将集合中“单号:原创 2022-07-03 20:05:20 · 624 阅读 · 0 评论 -
【JAVA】-- 验证码的实现
输入后,按下回车键,提示;看不清可以换一张验证码。 定义一个一维数组存放随机验证码的字符范围;循环五次随机生成五个字符,将字符拼接起来;标签内容设置为随机字符。增加按钮点击事件;五次循环重新随机抽取五个字符并拼接;标签重新设置随机字符。四、判断验证码是否正确为输入框增加监听事件;增加键盘松起监听事件;当按下回车键把输入框内容与标签内容比较,并提示。...原创 2022-07-01 13:26:32 · 773 阅读 · 0 评论 -
【JAVA】-- 简易超市管理系统窗口(五)(实现思路+每步代码)
前面完成了“删除内容”部分的界面布局,下面完成具体功能。构造方法增加增加点击事件,先去除上次添加商品,重置列表的作用。 先判断文件是否存在,如果不存在则提示并返回。然后读取文件内容,将文件内容,存入集合中。再将集合中的内容取出,并截取商品的名称,将商品名称添加到下拉框中。先获取到文件所有内容,存入集合,再根据点击的Item下标找到集合里相同的下标的元素,最后输入到输入框。构造方法增加为下拉框里的每个元素增加点击事件,先读取文件里的所有内容并添加到集合。然后通过遍历下拉框元素,在原创 2022-06-25 16:03:04 · 560 阅读 · 0 评论 -
【JAVA】-- 简易超市管理系统窗口(四)(实现思路+每步代码)
前面已经完成了“增加内容”的功能,下面将要完成“删除内容”功能。删除内容就是销售商品,点击添加货物,选择货物,设置好价格数量和经办人即可销售。构建Shan类方法实例化对象,并设置唯一标识。getMainPanel方法增加getZengButton方法增加/修改actionPerformed是监听操作的接口,如按钮按下、文本框输入回车等操作,当按钮按下时,创建CardLayout卡片布局对象,使用show方法将面板显示,实现切换效果。getShanButton方法增加/修改二、设原创 2022-06-24 11:33:12 · 416 阅读 · 0 评论 -
【JAVA】-- 简易超市管理系统窗口(三)(实现思路+每步代码)
前面完成了界面的基本布局,接下来实现把输入框的文字保存到文件中,和进货、清空的功能。进货开销、货款余额、进货日期为自动计算后输入。创建三个文件,分别用于保存进货销货的数据文件、商品名称和数量文件和剩余总资金的文件。构造方法增加二、增加“进货”点击事件,进货名称、厂家、价格、数量、操作人不能为空增加点击事件,并不能为空。构造方法增加点击事件null和queals(“”)都表示为空,但是null表示无内存空间,后者为无内容。三、“进货开销”:根据进货价格与数量自动输入先从保存资金的文件原创 2022-06-23 13:17:47 · 551 阅读 · 0 评论 -
【JAVA】-- 简易超市管理系统(二)(实现思路+每步代码)
前面已经完成了界面标题和四个按钮,现在开始完成“增加内容”按钮的具体功能。创建一个增类,实现增类的功能;然后创建面板组件,把类添加到面板组件中,因为使用网格包布局,所以创建一个实例,把面板组件添加到网格中。创建一个标签方法获得标题,在构造方法中设置组件大小和布局方式,创建可推拉面板,增加一个做面板组件和一个右面板组件,左面板组件设置为网格包布局,右面板组件设置为流式布局。主类MainFrame增加/修改创建一个zeng类方法实例化界面的功能创建一个面板组件,把功能集中到该面板区域布局为原创 2022-06-22 20:31:21 · 1580 阅读 · 0 评论 -
【JAVA】-- 简易超市管理系统(一)(实现思路+每步代码)
简易超市管理系统用于管理超市商品的增删改查等操作,并且使用流式文件保存数据。主要学习其实现思想,掌握后可自行实现其他管理系统如:学生管理系统等。大致效果: 构建一个503×427的窗口,不可大小化,在屏幕正中央出现。二、构建面板组件构建一个JPanel面板组件,用于放置背景图片。使用网格包布局三、设置背景图片主类MainFrame增加/修改 先设置一个标题,后面的增删改查功能按钮设置在标题下面,此时只有一个实例对象,所以占整个窗口。网格包布局管理需要使用GridBa原创 2022-06-22 13:57:42 · 3582 阅读 · 0 评论 -
【JAVA】-- setBorder
setBorder可以为组件设置边框,是JComponent类的成员方法。函数原型:public void setBorder(Border border)对参数Border对象 的定义主要通过BorderFactory进行。1、createBevelBorder(int type)建立一个立体边界,参数type指定为凹陷或突起,为BevelBorder.LOWERED表示凹陷、BevelBorder.RALSED表示突起。2、createBevelBorder(int type,Color highlig原创 2022-06-22 12:08:51 · 4933 阅读 · 0 评论 -
【JAVA】-- Java五大常用布局管理器(BorderLayout、FlowLayout、GridLayout、GridBagLayout、CardLayout)
在Swing组件中,有JFrame和JDialog这样的顶级容器(也叫窗口),顶级容器不能放置在其他容器中,可完成窗口大小化等基本功能。也有JPanel这样的面板组件,比较复杂的布局,需要布局管理器的组合使用,面板组件可以将多个布局管理器结合使用,组件在容器中的位置和尺寸由布局管理器决定。下面将要说的布局管理器就是具体的布局,一个界面只能有一个顶级容器,可以有多个面板组件,面板组件上可以使用多个布局管理器。Swing提供了八种布局管理器:BorderLayout(边界布局管理器)、BoxLayout(箱式布原创 2022-06-21 16:07:45 · 6453 阅读 · 1 评论 -
【JAVA】-- 坦克大战全部代码
前面文章有详细游戏制作过程和每个过程代码,有想学习制作思想和过程的可以浏览一下前面文章。下面提供游戏全部代码。原创 2022-06-19 17:11:05 · 4594 阅读 · 0 评论 -
【JAVA】-- 专题训练之坦克大战游戏(四)(实现思路+每步代码)
paint()方法增加二、复活敌方坦克当敌方坦克数量没有时,重新生成十辆坦克paint()方法 ,子弹循环增加三、增加坦克血量游戏中,己方坦克不能被一颗子弹解决,需要增加血条,增加游戏体验感。创建血条内部类,先画一个中空的方框,然后通过计算剩余血量填充方框。draw方法增加子弹类增加/修改hitTank方法修改增加己方坦克判断条件,血量小于0则死亡。主类增加draw方法增加四、增加血包功能当己方坦克掉血后,可以通过捡取血包恢复血量。先创建一原创 2022-06-19 17:03:34 · 899 阅读 · 0 评论 -
【JAVA】-- 专题训练之坦克大战游戏(三)(实现思路+每步代码)
设置一个布尔变量来表示两种坦克,然后根据布尔变量的两种结果画出不同的坦克设置一个布尔变量表示坦克身份,true为友,false为敌。在传入坦克基本参数时,设置坦克为友还是敌。draw方法增加判断条件,使敌友坦克颜色分开,以便区分。主类增加/修改paint方法画出坦克二、创建多个敌方坦克将生成的坦克都存入集合。创建一个坦克集合用于存放坦克lauchFrame方法增加一个一个创建,创建十个,依次放入集合paint方法增加将集合里的坦克依次取出,并画上。原创 2022-06-19 13:00:04 · 811 阅读 · 0 评论 -
【JAVA】-- 专题训练之坦克大战游戏(二)(实现思路+每步代码)
创建子弹类,根据传入的方向来使子弹坐标改变;坦克类需要设置一个按键J来发射子弹,发射子弹后把方向传给子弹类得到一个子弹m,再给主类中的m;主类中的m调用子弹类的draw方法,把子弹画出。设置宽高在draw方法中画出子弹,并在此方法中调用move方法使子弹可以移动。移动的原理是根据传入的方向使x,y加减,加减的值越大子弹速度越快。如何确定子弹发出的位置和方向:使用构造方法设置参数,在坦克类中调用传参。坦克类增加:坦克类需要主类,将子弹m传入主类,主类中调用。 在按键抬起方法keyRele原创 2022-06-18 22:54:43 · 660 阅读 · 0 评论 -
【JAVA】-- 专题训练之坦克大战游戏(一)
使用到的java知识有集合、GUI、绘图技术等。下面将手把手按照步骤来制作一个坦克大战游戏。首先构造一个800×600的窗口用到GUI知识,没有问题。运行结果: 创建一个坦克类,用于构造坦克。主类增加:paint方法前面文章有讲运行结果:使多个坦克可以同时独立运行。每100毫秒刷新坦克位置每100毫秒调用paint()方法四、增加坦克移动功能使坦克移动的实质其实是使坦克的坐标发生变化,然后重新绘制坦克,隔X秒刷新呈现在窗口中。如:坦克坐标 x+=5,y+=原创 2022-06-17 22:44:24 · 702 阅读 · 0 评论 -
【JAVA】-- 绘图技术(paint()、Graphics类、双缓冲技术、addWindowListener())
JAVA坐标系中,x表示水平方向,距离坐标原点x个像素;y表示垂直方向,距离坐标原点y个像素。需要类继承JFrame或JPanel类来画窗口。前序:设置窗口setTitle(String s) //设置窗口标题setLocation(int x,int y) //设置窗口位置setSize(int width,int height) //设置窗口宽和高setVisible(true) //设置窗口可见,默认为false1、paint(Grap原创 2022-06-17 13:46:43 · 1059 阅读 · 0 评论 -
【JAVA】-- 期末考试试题含答案(选择、判断、填空、简答)(二)
单选题(共计27分)A、封装将变化隔离B、封装提高重用性C、封装提高安全性D、只有被private修饰才叫做封装public class Test{static int i;public int aMethod( ){i++;return i;}public static void main(String [] args){Test test = new Test( );test.aMethod( );System.out.println(test.aMethod( ));}}程序编译运行后,输出结果是()原创 2022-06-13 22:03:23 · 1691 阅读 · 0 评论 -
【JAVA】-- 期末考试试题含答案(选择、判断、填空、简答)(一)
单选题(共计28分)A、clear()B、isEmpty()C、 remove()D、 removeAll()A、List集合是有索引的B、List集合可以存储重复的元素C、 List集合存和取的顺序一致D、 List集合的元素是无序的A、size()B、add()C、get()D、 remove()A、Java是一种高级计算机语言B、Java是一门与平台无关的编程语言C、Java具有JavaSE、JavaME和JavaEE三大平台D、Java是一门介于汇编和高级之间的语言A、java HelloWorld原创 2022-06-13 21:35:07 · 5610 阅读 · 0 评论 -
【JAVA】-- 期末考试复习题含答案(每章对应题、选择、填空、简答、编程)(下)
一、填空题1. ________是所有单列集合的父接口,它定义了单列集合(List和Set)通用的一些方法。2.使用Iterator遍历集合时,首先需要调用________方法判断是否存在下一个元素,若存在下一个元素,则调用________方法取出该元素。3.List集合的主要实现类有________、_______,Set集合的主要实现类有________、________,Map集合的主要实现类有________、________。4.Map接口是一种双列集合,它的每个元素都包含一个键对象_______原创 2022-06-13 20:00:55 · 3601 阅读 · 0 评论 -
【JAVA】-- 期末考试复习题含答案(每章对应题、选择、填空、简答、编程)(上)
一、填空题1.Java是一种____面对对象____语言,它是由___Sun_____公司(已被Oracle公司收购)开发的高级程序设计语言。2.针对不同的开发市场,SUN公司将Java划分为三个技术平台,它们分别是____JavaSE____、__JavaEE______和__JavaME______。3.Java语言的特点有简单性、___与平台无关性_____、___动态性_____、安全性,支持___多线程_____和分布式。4.SUN公司提供了一套Java开发环境,简称__JDK______。5.J原创 2022-06-13 19:56:22 · 7663 阅读 · 6 评论 -
【JAVA】-- GUI用户界面设计(面板组件、文本组件、标签组件、按钮组件、下拉框组件)
Swing中的组件:面板组件、文本组件、标签组件、按钮组件、下拉框组件。Swing组件中除了JFrame和JDialog这样的顶级容器,还提供了一些面板组件,面板组件不能单独存在,只能放置在顶级窗口容器中。最常见的面板组件有Jpanel和JScrollPane。JPanel面板组件是一个无边框,不能被移动、放大、缩小或关闭的面板,它的默认布局管理器是FlowLayout,也可以使用JPanel带参数的构造函数JPanel(LayoutManager layout)或setLayout()成员方法设置JPan原创 2022-06-08 12:00:20 · 5415 阅读 · 0 评论 -
【JAVA】-- GUI图形用户界面(事件处理机制、窗体事件、鼠标事件、键盘事件、动作事件)
Swing组件中的事件处理专门用于响应用户的操作,如:响应用户单击、按下键盘等操作,主要涉及三类对象。事件源:事件发生的场所,通常是产生事件的组件,如窗口、按钮、菜单等。事件对象:封装了GUI组件上发生的特定事件。监听器:负责监听事件源上发生的事件,并对各种事件做出相应处理。1、创建事件源:可以使用JFrame窗口在内的顶级容器作为事件源。2、自定义事件监听器:监听器是一个特殊的java类,必须实现XXXListener接口,根据组件触发的动作进行区分,如:WindowListener用于监听窗口事件,Ac原创 2022-06-08 10:51:53 · 1898 阅读 · 0 评论 -
【JAVA】-- GUI图形用户界面(布局管理器、FlowLayout、BorderLayout、GridLayout、GridBagLayout使用)
组件在容器中的位置和尺寸是由布局管理器决定的。Swing常用布局有四种:FlowLayout(流式布局管理器)、BorderLayout(边界布局管理器)、GridLayout(网格布局管理器)、GridBagLayout(网格包布局管理器)。Swing容器在创建时都会使用一种默认的布局管理器,在程序中可以通过调用容器对象的setLayout()方法设置布局管理器,通过布局管理器自动进行组件的布局管理。FlowLayout属于流式布局管理器,是最简单的布局管理器。容器会将组件按照添加顺序从左向右放置,当到达原创 2022-06-02 13:07:01 · 1188 阅读 · 0 评论 -
【JAVA】-- GUI图形用户界面(Swing、JFrame、JDialog使用)
Swing是Java语言开发图形化界面的一个工具包,以抽象窗口工具包(AWT)为基础。Java中,所有的Swing组件都保存在javax.swing包中。下图描述Swing组件的继承关系:上图可看出,Swing组件的所有类都继承自Container类,然后根据GUI开发的功能扩展了两个主要分支:容器分支(Window窗口和Panel面板)和组件分支。容器分支:为实现图形化用户界面窗口的容器而设计的。组件分支:为实现向容器中填充数据、元素以及交互组件等功能。Jcomponent类几乎是所有Swing组件的公共原创 2022-06-01 11:45:21 · 1593 阅读 · 0 评论 -
【JAVA】-- 多线程(线程安全、同步代码块synchronized、同步方法)
一、线程安全多线程的并发执行可以提高程序的效率,但是,当多个线程去访问同一个资源时,也会引发安全问题。例如:当统计一个班级的学生数目时,如果有同学进进出出,则很难统计正确。为了解决这样的问题,需要实现多线程的同步,即限制某个资源在同一时刻只能被一个线程访问。线程安全问题其实就是由多个线程同时处理共享资源导致的,要想解决线程安全问题,必须得保证在任何时刻只能有一个线程访问共享资源。二、同步代码块Java中提供了同步机制。当多个线程使用同一共享资源时,可以将处理共享资源的代码放在一个使用sync原创 2022-05-19 15:57:22 · 624 阅读 · 0 评论 -
【JAVA】-- 多线程(线程让步yield、线程插队join)
一、线程让步线程让步是指正在执行的线程,在某些情况下将CPU资源让给其他线程执行。可通过yield()方法来实现。该方法和sleep()方法有点相似,都可以让当前正在运行的线程暂停,区别在于yield()方法不会阻塞该线程,只是将线程转换成就绪状态,让系统调度器重新调度一次。只有与当前线程优先级相同或者更高的线程才能获得执行的机会。使用示例:class YieldThread extends Thread{ public YieldThread(String name){原创 2022-05-19 15:16:43 · 1116 阅读 · 0 评论 -
【JAVA】-- 多线程Thread类的常用方法
一、Thread类的常用方法1、start():启动当前线程2、run():通常需要重写Thread类中的此方法,将创建的线程要执行的操作写在此方法中。3、currentThread():静态方法,返回执行当前代码的线程4、getName():获取当前线程的名字,与3一起使用可得到正在执行的线程的名字5、setName():设置当前线程的名字6、yield():释放当前cpu的执行权7、join():在线程a中调用线程b的join();此时线程a就进入阻塞状态,直到线程b完全执行原创 2022-05-17 22:27:12 · 13404 阅读 · 0 评论 -
【JAVA】-- 多线程(线程的生命周期、线程的调度、优先级、休眠)
一、线程的生命周期及状态转换当Thread对象创建完成时,线程的生命周期便开始当run()方法中代码正常执行完毕或者线程抛出一个未捕获的异常或错误时,线程的生命周期结束。线程生命周期可以分为五个阶段,分别是新建状态(New)、就绪状态(Runnable)、运行状态(Running)、阻塞状态(Blocked)和死亡状态(Terminated)。注意:单箭头表示状态只能单向转换,双箭头表示状态可以双向转换。五种状态详细讲解,具体如下:1、新建状态(New)创建一个线程对象后,该原创 2022-05-17 21:56:48 · 315 阅读 · 0 评论 -
【JAVA】-- 多线程(多线程的创建与使用、Thread与Runnable的区别)
多线程可以使程序几乎同时执行多个执行片段,如:两个不同的任务几乎同时进行。一、创建线程Java提供了两种多线程实现方式:一种是继承java.lang包下的Thread类,覆写Thread类的run()方法,在run()方法中实现运行在线程上的代码。另一种是实现java.lang.Runnable接口,同样是在run()方法中实现运行在线程上的代码。1、继承Thread类①创建类继承Thread类,然后重写run()方法class MThread extends Thread{原创 2022-05-17 21:02:31 · 364 阅读 · 0 评论