![](https://img-blog.csdnimg.cn/20210911152652429.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java 中级学习
一个阶段
ahyo
这个作者很懒,什么都没留下…
展开
-
反射机制作用(补充)
对于之前的 具体反射机制操作都停留在文字叙述以下是代码示例会更直观一点src下的spring.txt 里就是反射的内容—— 类名 方法名因此也不需要重新编译,只需要修改配置文件spring.txt,再运行即可 @SuppressWarnings({"rawtypes","unchecked"}) public static void main(String[] args) throws Exception{ File springConfigFile=new File(原创 2022-01-05 17:16:06 · 125 阅读 · 0 评论 -
反射机制的作用
反射非常强大,但是学习了之后,会不知道该如何使用,反而觉得还不如直接调用方法来的直接和方便。需要结合Spring来理解使用以下是结合Spring的个例:使用反射方式,首先准备一个配置文件——spring.txt(其他也行), 放在src目录下。 里面存放的是类的名称,和要调用的方法名,另外就是一些属性名。在测试类中,首先取出类名称和方法名,然后通过反射去调用这个方法。以下的普通类指的是 —— 利用传统方式(非反射机制)来调用方法及其他操作当需要从调用第一个之前普通类的方法,切换到调用第二个普通类的原创 2022-01-04 22:22:17 · 149 阅读 · 0 评论 -
反射机制调用方法(补充)
在之前的博客均是通过反射机制来像传统方式一样操作,比如创建实例化对象 获取类对象以及访问属性…这次作为补充 是通过反射机制来调用一个对象的方法代码示例: //在这之前的实例化对象 players p2=new players(); p2.name="dsd"; try{ //一下使用反射机制来创建,利用相应构造器 Class p1=new players().getClass();原创 2022-01-03 13:53:27 · 226 阅读 · 0 评论 -
比较器匿名类写法转换成lambda表达式实现
以下是利用匿名类方式实例化比较器对象 以此来对某类的实例化对象的指定属性来做比较 Comparator<Hero> h=new Comparator<Hero>() { public int compare(Hero o1,Hero o2) { if(o1.blood<o2.blood) return 1; else return -1; } }; Collections.sort(L,h);原创 2022-01-02 20:32:45 · 308 阅读 · 0 评论 -
GUI常用组件(有一说一感觉在学Html)
JAVA的图形界面下有两组控件,一组是awt,一组是swing。一般都是使用swing以下都是类名:1、标签(Label)JLabel 两个作用:Label用于显示文字和显示图片——是通过在label上设置图标实现的2、JButton 普通按钮3、JCheckBox 复选框——呈现勾选状态打勾使用isSelected来获取是否选中了 JCheckBox bCheckBox = new JCheckBox("1"); //设置 为 默认被选中 bCheckBox原创 2022-01-01 17:18:57 · 1168 阅读 · 0 评论 -
反射机制创建对象及访问属性
创建对象://在这之前的实例化对象 players p2=new players(); try{ //一下使用反射机制来创建,利用相应构造器 Class p1=new players().getClass(); Constructor co=p1.getConstructor(); players P=(players) co.newInstance();原创 2021-12-31 13:20:40 · 54 阅读 · 0 评论 -
编码验证——类方法前,加上修饰符 synchronized,同步对象是当前类对象
代码示例:public class Hreflect { public static void main(String[] args) { try {test t=new test(); }catch (InterruptedException e) { e.printStackTrace(); } }}class test{ public test() throws Interrup原创 2021-12-30 21:24:51 · 418 阅读 · 0 评论 -
java反射机制——获取类对象
类对象概念:所有的类,都存在一个类对象,这个类对象用于提供类本身的信息,比如有几种构造方法, 有多少属性,有哪些普通方法。即——就是用于描述这种类,都有什么属性,什么方法的获取类对象有3种方式Class pc1=Class.forName(classname);Class pc2=players.class;Class pc3=new players().getClass();代码示例: String classname="allman.players"; try{原创 2021-12-29 18:10:30 · 1616 阅读 · 0 评论 -
多线程图形界面聊天
把收发线程独立出去——单独写成一个类 ,只创立server一个图形界面 用于个体的可视化操作 配合swing可以极大模仿聊天个人界面sendThread:import java.io.DataOutputStream;import java.io.IOException;import java.io.OutputStream;import java.net.Socket;import java.util.Scanner;public class sendThread extends Thre原创 2021-12-28 15:15:05 · 361 阅读 · 0 评论 -
socket (套接字) 连接数据库 模仿机器人客服聊天
这只是一次非常简陋的小项目 鉴于时间有限就没有在数据库中录入更多的数据依然是昨天的博客 里的代码修改一下得来的server:import allman.JDBCPOOL;import java.io.*;import java.net.ServerSocket;import java.net.Socket;import java.util.Scanner;import java.sql.*;public class Server { public static void m原创 2021-12-27 14:22:44 · 500 阅读 · 0 评论 -
Java —— Socket 建立连接发送
使用 Socket(套接字)可以进行不同的程序之间的通信一、建立连接服务端开启8888端口,并监听着,时刻等待着客户端的连接请求客户端知道服务端的ip地址和监听端口号,发出请求到服务端客户端的端口地址是系统分配的,通常都会大于1024一旦建立了连接,服务端会得到一个新的Socket对象,该对象负责与客户端进行通信。注意: 在开发调试的过程中,如果修改过了服务器Server代码,要关闭启动的Server,否则新的Server不能启动,因为8888端口被占用了一旦建立了连接,服务端和客户端就可原创 2021-12-25 20:57:23 · 2271 阅读 · 0 评论 -
Java 测试可用IP(示例)
依据之前的博客 在知道如何利用Java得出本机IP地址及使用ping判断一个地址是否能够到达以下是结合两者对判断本网段有多少可用的ip地址1到255代码示例:import java.net.InetAddress;import java.net.UnknownHostException;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.u原创 2021-12-24 20:19:26 · 897 阅读 · 0 评论 -
Java 网络编程——IP地址与端口概念
IP地址:在网络中每台计算机都必须有一个的IP地址;32位/64位,4个字节,常用点分十进制的格式表示,例如:192.168.1.100127.0.0.1 是固定ip地址,代表当前计算机,相当于面向对象里的 “this”端口两台计算机进行连接,总有一台服务器,一台客户端。服务器和客户端之间的通信通过端口进行。比如:ip地址是 192.168.1.100的服务器通过端口 8080与ip地址是192.168.1.189的客户端 的1087端口通信端口的概念如同之前的JDBC操作相似 也需要一个原创 2021-12-23 22:46:03 · 440 阅读 · 0 评论 -
swing中的线程(一)
在对其Swing程序的开发中,需要建立3种线程的概念:1. 初始化线程初始化线程用于创建各种容器,组件并显示他们,一旦创建并显示,初始化线程的任务就结束了。这里的组件及其各种容器的设计可以在测试类的JFrame里的无参构造方法里就设定好 之后的setvisible可以放在主方法 也就是创建和显示分开2. 事件调度线程通过事件监听的学习,我们了解到Swing是一个事件驱动的模型,所有和事件相关的操作都放是放在事件调度线程 (Event Dispatch)中进行的。比如点击一个按钮,对应的Actio原创 2021-12-22 17:31:24 · 471 阅读 · 0 评论 -
GUI——日期控件
swing没有自带的日期控件,需要第三方的类——可以自行找资源下载导入IDEA主要使用的是两个类——DatePicker和JXDatePickerDatePicker:datepicker.jar 包,有一个缺点,不能设置时间,只能在创建控件的时候传入指定日期。import java.util.Date;//获取当前时间import java.util.Locale;//当前时区(地点)import com.eltima.components.ui.DatePicker;//导入jar包 f原创 2021-12-21 14:45:21 · 613 阅读 · 0 评论 -
GUI——JTable实现用户对于数据库表格中的数据可交互——CRUD
一、基本表格显示一个Table需要两组数据一维数组: String[]columnNames 表示表格的标题二维数组: String[][] heros 表格中的内容默认情况下,表格的标题是不会显示出来了,除非使用了JScrollPane JTable t = new JTable(heros, columnNames);heros, columnNames分别为一维字符串数组和二维字符串数组JScrollPane是为了显示表格每一列标题——JScrollPane: 带滚动条的Panel原创 2021-12-20 19:48:24 · 902 阅读 · 0 评论 -
GUI——调用jar包美化总体设计模板
只需要提供一句代码javax.swing.UIManager.setLookAndFeel(“com.birosoft.liquid.LiquidLookAndFeel”);就可以把所有的组件切换成不同的风格。注: 这句话需要加在最前面,如果已经创建了界面,再加这个有时候不能正常起作用。但是需要对应的jar包的下载 //设置皮肤 try { javax.swing.UIManager.setLookAndFeel("com.birosoft.liquid.L原创 2021-12-19 21:53:43 · 365 阅读 · 0 评论 -
GUI——菜单 和 工具栏
主要为菜单栏和菜单 菜单栏包括菜单 所以菜单栏实例化对象得加入菜单实例化对象才有相应效果以及菜单理由菜单项层层涵盖// 菜单栏 JMenuBar //菜单 JMenu// 把菜单加入到菜单栏 JMenuBar.add(new JMenu());// 把菜单栏加入到frame,这里用的是set而非add f.setJMenuBar(mb);//菜单项JMenuItem JMenu.add(new JMenuItem()); //原创 2021-12-18 16:12:21 · 486 阅读 · 0 评论 -
GUI——面板(panel)种类
1、基本面板 这个基本面板是你在此上设计的基础JPanel即为基本面板面板和JFrame一样都是容器,不过面板一般用来充当中间容器,把组件放在面板上,然后再把面板放在窗体上。特点:一旦移动一个面板,其上面的组件,就会全部统一跟着移动,采用这种方式,便于进行整体界面的设计JPanel p1 = new JPanel(); // 设置面板大小 p1.setBounds(50, 50, 300, 60); // 设置面板背景颜色 p1.se原创 2021-12-16 17:18:09 · 1610 阅读 · 0 评论 -
GUI——容器和布局器
写在之前:注意:1、setSize()和setLocation()、setBounds()的关系查看源码 发现 setSize()和setLocation()其实都调用了setBounds()方法 所以只需要setBounds就可以同时设置大小及其坐标位置了 setSize()和setLocation()是单独对其大小或者坐标位置设定时才调用ImageIcon放入Jlabel配合Jbutton 来按钮点击循环显示图片和隐藏图片 jb.addActionListener(new ActionL原创 2021-12-14 15:49:12 · 1216 阅读 · 0 评论 -
GUI——事件监听的几种类型
1、按钮监听利用匿名类 实现ActionListener接口,当按钮被点击时,actionPerformed方法就会被调用匿名类使用起来很简便 按照一般 还得写一个类实现接口方法再在测试类实例化对象 放入很麻烦 JButton b = new JButton("hide joji"); b.setBounds(150, 200, 100, 30); // 给按钮 增加 监听 b.addActionListener(new Actio原创 2021-12-13 15:39:45 · 953 阅读 · 0 评论 -
GUI——Swing 初识
GUI——Graphic User Interface 图形用户界面计算机总有大量的专有名字有缩写 如同之前学的ORM、DAO和JDBC 等等都需要有一定的记忆——全称正文:图形用户界面 也就是运行之后会弹出一个界面和用户交互 可以拿C语言的运行黑框理解 GUI 所呈现的效果有点像之前C语言的贪吃蛇工程实践——导入的是easyX的头文件来呈现 具体可以看看往期博客这次大体了解了GUI这部分才感觉确实Java相对于更便捷比起C语言 但是能用C语言来呈现,其编程能力是很不错的swing里有很多类可供原创 2021-12-11 20:33:25 · 124 阅读 · 0 评论 -
线程池设计示例:
以下先总结具体设计思路:1、创建一个线程池——ThreadPool 类 ,由于Java面向对象的特点 你要清楚该类定义来是干什么的 在实例化该类的对象一定会调用其构造方法 那么构造方法就有着要实现的功能 —— 就比如线程池对象实例化后就是一个装着可供处理某种任务的线程集合 于是线程池这个类本身不会去继承Thread 是特意处理某种类型任务的自定义线程类去继承因此在实例化线程池类的对象时 在该类的调用方法里实例化好这个特意处理某种类型任务的自定义线程类对象就是一种线程池public class Thre原创 2021-11-30 22:45:33 · 249 阅读 · 0 评论 -
java learn 线程池设计思想及Java自带的线程池
在简历中可以写上自己在Java方面有独立设计线程池的能力——如果真的确实如此线程池——是把多个线程装在一个集合中 把需要执行的任务或者功能目的扔进去随机一个线程进行处理(这里也可以理解为线程交互,毕竟你在创建任务时也是在实例化一个线程对象——因此会混淆那个是“任务” 那个是处理任务 因为他们都是线程类)线程类集合通常调用 notifyAll注意:处理任务的线程池在整个过程中,都不需要创建新的线程,而是循环使用这些已经存在的线程除了自定义线程池 java自带线程池:java提供自带的线程池,而不需要原创 2021-11-29 23:01:47 · 77 阅读 · 0 评论 -
Java learn Lock对象和synchronized
首先回顾一下synchronized 关键字1、用于线程安全 解决同步问题 占有同步对象2、占有同步对象会十分执意 必须占有才肯罢休 synchronized 语句块执行结束才释放对象3、线程交互 this 提供wait,notify和notifyAll方法Lock 与其作用相类似 但是用法细节不同首先Lock是一个接口 配合import java.util.concurrent.locks.ReentrantLock;多态的写法实例化对象 进行引用Lock接口的方法Lock lock = n原创 2021-11-27 11:51:37 · 247 阅读 · 0 评论 -
Java learn 原子访问
首先 也是涉及到线程的安全与否:这里主要是引入原子性操作概念 及如何运用自JDKJDK6 以后,新增加了的一个包java.util.concurrent.atomic。原子性操作这种现象其实在平时码代码中就存在了,原子性操作即不可中断操作——赋值:int i = 5; 此类赋值操作原子性操作 本就是线程安全的比如:i++的操作 实质是由多个原子性操作组合而成的——先取值; 再加一; 再赋值 . 因此这种由多个原子性操作组合而成的操作就不是线程安全的结合synchronized 关键字的作用 ——原创 2021-11-25 23:04:21 · 355 阅读 · 0 评论 -
Java learn 线程交互
首先归纳以下目前遇到的方法需要try catch 的 ,因为时常会遇到调用方法的时候搞忘线程类里目前遇到的 sleep(); join();以及在线程交互中的同步对象的方法wait();由于线程之间存在交互通知比如 加减 修改保存等等 一个线程完成一种事件之后通知另一个线程干嘛。一般都有限制条件 才会启动另一线程 比如做减的方法到多少之后停下等待加法线程进行加法运算为了实现停下等待 可以配合while(true){continue;}但是占用CPU太多资源为避免此类问题的发生——使用wa原创 2021-11-24 17:36:30 · 281 阅读 · 0 评论 -
Java learn 死锁
死锁产生原因:项目代码比较繁琐,多线程应用里有可能会发生死锁死锁在数据库里的解释更为清晰全面 且难度也是很大 概念难懂代码示例死锁: class fileguy { public static void main(String[] args) { players P1=new players("sd",3,3); players P2=new players("sd1",2,3); Thread t1=new Thread() { public void run()原创 2021-11-22 23:12:26 · 338 阅读 · 0 评论 -
Java learn 常见的线程安全类
1、HashMap 和 Hashtable 都实现了Map接口 以键值对方式保存数据这两者在之前提到过区别在于HashMap 可以存放Null 而Hashtable 不行Hashtable是线程安全类 HashMap不是至于验证 可以查看两个类的Java源码 Hashtable的实例方法都是以synchronized修饰符修饰的2、StringBuffer 和 StringBuilder 两者都可以对字符串进行相应操作StringBuilder 是非线程安全类 StringBuffer 是线程原创 2021-11-21 19:07:02 · 719 阅读 · 0 评论 -
Java learn 多线程同步问题
多线程的同步问题指的是多个线程同时修改一个数据的时候,可能导致的问题多线程的问题,又叫Concurrency 问题在之前的博客中提到过 各个线程会进行竞争CPU资源来执行代码 因此在改数据的时候 如果争相抢占CPU资源来做修改 最后的数据会变成脏数据比如 线程甲和乙甲拿到源数据 进行修改 还没来得及修改完 乙就开始拿源数据进行修改 使得最后的数据是乙的操作结果为准的 但是往往预期功能实现的不是这样得到数据也就被称为脏数据。这种情况往往是建立在多次运行之后产生的解决方法:为此引入 占用释放 来原创 2021-11-20 16:34:57 · 362 阅读 · 0 评论 -
Java learn 常见的线程方法
如同当初学习 String类一致 在学习之前 都会去熟悉该类的常见方法1、Thread.sleep() 可以理解为线程执行的延迟 存在于run方法中 放入参数其中 Thread.sleep(100) 表示该线程执行会停顿100毫秒 在这里会出现会抛出InterruptedException 中断异常——也就是该类是否停顿了 因为有可能停止就不执行了这时就会抛出 InterruptedException 以源码角度来看实质就是throws因此需要在调用的时候 进行try catch 异常捕抓2、Thr原创 2021-11-19 22:09:11 · 302 阅读 · 1 评论 -
Java learn 多线程的创建及启动
多线程——是涵盖在操作系统里的一部分 所以在学之前最好读一下操作系统原理的系列教材多线程的意思就是在同一时间,可以做多件事情。创建多线程的方法有 继承线程类 实现Runnable接口 及匿名类的写法线程概念:首先 进程(processor)和线程(Thread) 的概念区别进程: 比如 启动游戏就是一个进程 该进程可以在任务管理器看见且可关闭线程:游戏中会同时发生很多事件 这些事件就是线程因此 线程是存在于进程里的 进程涵盖多个线程且可同时发生 这种例子在平时上网的时候很常见在不用线程类去实原创 2021-11-16 15:28:42 · 2643 阅读 · 0 评论 -
Java learn lambda聚合操作
首次利用聚合操作 是在容器类中lambda表达式其实备受争议 有的人觉得还是别用 而有的极力推崇 但不能否定的是lambda表达式运用好了之后对于个人的编程能力 逻辑思维能力也是不错的提升依个人而言 需要的地方能用就用 不用刻意去思考那个地方要用lambda表达式这部分是lambda表达式的核心部分——聚合操作 极大的节省了代码量以下是个人学习聚合操作的总结(配合部分代码):聚合操作能够完成传统方式的遍历算法——利用for语句配合if else的条件语句进行的判断以此达到功能目的的代码段以下就是原创 2021-11-15 15:49:09 · 920 阅读 · 0 评论 -
Java learn lambda的方法引用
lambda 的方法引用 实质也是建立在把引用方法的代码段简写成lambda表达式分为以下几种:1、引用静态方法首先得有个静态方法写成静态方法是因为 main主方法用类名调用时只会调用静态方法h -> Test.test(h) —— h为变量名具体类型自定义 Test示例类名 引用静态方法test 放入参数h也可写成 Test::test依据情况而言 有的时候方法里直接放lambda表达式即可 以上只作为介绍引用静态方法将其核心语句写入静态方法并返回。2、引用对象方法建立在对该类进行原创 2021-11-13 17:00:59 · 556 阅读 · 0 评论 -
java learn lambda表达式概念的引入
lambda 表达式的运用 实质是为了方便而表达式 实质就是我们平时在码代码的时候写的式子——诸如条件语句 或者判定的语句1、常见的方法比如 使用增强型for循环遍历整个容器类且这个容器类泛型是——Integer 若要在其中添上if语句判定找出合乎要求的数字 就得有相应约束的式子2、匿名类来实现提供一个接口 之后定义一个类implements该接口Te t=new Te() { public void sf() { } };其中 方法 sf原创 2021-11-12 20:14:05 · 689 阅读 · 0 评论 -
Java learn 泛型转型
1、对象转型据以往的学习,子类转父类 是一定可以成功的2、以此 在泛型转型这方面的实质也是 和对象转型一样但是:值得注意的是:子类泛型不可以转换成父类泛型 虽然子类转换成父类在对象转型可以发生为什么不可以:如果子类泛型转成父类泛型该父类泛型引用会去指向子类那么其他子类理应可以往里面实例化对象 但是实质还是指向的是子类泛型 因此都是子类是不能将其中实例化对象同理:父类也不可以转子类...原创 2021-11-11 17:48:07 · 320 阅读 · 0 评论 -
java learn 泛型通配符
1、? extends 类名这种通配符 指的是该类的子类泛型的某一个 也是意在表达这个容器类装的那些类的对象数据代码示例:(由集合中的泛型示例)ArrayList<Hero> er=new ArrayList<>(); er.add(new Hero("Hero-")); ArrayList<? extends Hero> sd=er;写法如上图所示为什么需要运用这种——ArrayList<? extends Hero> sd 我的理解是为原创 2021-11-10 15:56:55 · 376 阅读 · 0 评论 -
Java 常见数据结构使用泛型所呈现的便捷之处
Stack 栈 使用泛型 案例:import java.util.ArrayList;import java.util.Iterator;import java.util.LinkedList;public class MyStack<T> { LinkedList<T> sd=new LinkedList<>(); public void pull(T t) { sd.addFirst(t); } public void peek() {原创 2021-11-09 16:49:44 · 653 阅读 · 0 评论 -
Java learn为什么使用泛型
泛型 这一功能 目前的运用是在集合这一部分其实集合中的泛型 可用可不用不用泛型:ArrayList 不用泛型时 支持所有类 也就是——Object类然而调用get(0) 返回的类型是Object 所以在想用get调用指定对象类型避免不了对象转型——但是开发人员在码代码时 一个容器肯定得放多种类型的实例化对象当在 get() 获取时需要进行对象转型 对象类型少好记忆 但是多了会出现对象转型异常因此使用泛型的好处也就在此处体现了 能够极大的避免出现此类错误使用泛型:泛型的好处:泛型的用法是在原创 2021-11-08 15:20:31 · 52 阅读 · 0 评论 -
Java learn 集合框架(比较器 聚合操作(伊始))
比较器:import java.util.Comparator;是一个用于比较多个对象特定属性值的大小的类——也就是 设计一个类实例化其对象 会包含诸多属性值 那么排序多个对象时对于容器类来说 要利用到工具类Collections 其中的sort这个方法可以实现 但是对象属性太多没指定是按照那个 因此会报错为解决 利用到Comparator 这个比较器 来选取特定属性值进行操作 就可以避免。解决方式 有两种写法:1、在要对其实例化对象的类进行接口Comparable的方法实现 可以查看接口Com原创 2021-11-07 17:05:49 · 88 阅读 · 0 评论