
Java学习过程
开玩喜66
这个作者很懒,什么都没留下…
展开
-
自我编写小贪吃蛇
贪吃蛇定义数据绘制界面画静态图创建定时器,使蛇动起来监听键盘改变蛇的方向暂停开始游戏增加判定判断蛇是否吃到豆,吃到豆刷新豆的出现,积分增加判断蛇头是否出界,如出界则从另一侧出现判断蛇头是否撞到自己public class StartGame { //初始方向 String fangxiang = "right"; //初始蛇身长度 int lenth = 3; //蛇身的坐标 int[] snakeX = new int原创 2021-08-08 23:28:47 · 120 阅读 · 0 评论 -
GUI——Swing
Swing1、窗口(JFrame)public class JFrameDemo { // init() 初始化 public void init(){ // 顶级窗口 JFrame frame = new JFrame("这是一个JFrame窗口"); frame.setVisible(true); frame.setBounds(100,100,500,500); // 设置文字 JLabel原创 2021-08-08 23:27:53 · 107 阅读 · 0 评论 -
GUI——AWT
AWT(抽象窗口工具)java.awtAWT 中包含了有多的类和接口其中的元素:窗口、按钮、文本框1、Frame一个界面/** * 学习 GUI 的第一个界面 */public class FrameTest { public static void main(String[] args) { // Frame Frame frame = new Frame("我的第一个 Java 图形界面窗口"); // 需要设置可见性,原创 2021-08-08 23:22:50 · 170 阅读 · 0 评论 -
GUI编程
GUI 编程GUI 编程主要的组件:窗口弹窗面板文本框列表框按钮图片监听事件鼠标键盘事件破解工具外挂等等GUI 的核心技术SwingAWT通常 Swing 做页面,AWT 做事件监听。这两个技术编写出来的界面不美观,还需要 jre 环境运行。为什么学习 GUI可以写一些关于你自己想要的小工具工作时,可能需要维护到 Swing 界面(概率极小)了解 MVC 架构,了解监听,为后面打下基础。...原创 2021-08-08 23:15:42 · 88 阅读 · 0 评论 -
例题 生产与消费者
生产者与消费者问题生产者(Productor)将产品交给店员(Clerk),而消费者(Customer)从店员处取走产品,店员一次只能持有固定数量的产品(比如:20),如果生产者试图生产更多的产品,店员会叫生产者停一下,如果店中有空位放产品了再通知生产者继续生产;如果店中没有产品了,店员会告诉消费者等一下,如果店中有产品了再通知消费者来取走产品。这里可能出现两个问题:生产者比消费者快时,消费者会漏掉一些数据没有取到。消费者比生产者快时,消费者会取相同的数据。public class Te转载 2021-08-01 17:12:57 · 102 阅读 · 0 评论 -
线程通信(wait() 与 notify()/notifyAll())
线程通信wait() 与 notify() 和 notifyAll()wait():令当前线程挂起并放弃 CPU、同步资源,使别的线程可访问并修改共享资源,而当前线程排队等候在再次对资源的访问notify():唤醒正在排队等待同步资源的线程中优先级最高者结束等待notifyAll():唤醒正在排队等待资源的所有线程结束等待java.lang.Object 提供的这三个方法只有在 synchronized(同步锁)方法或synchronized(同步锁)代码块中才能使用,否则会报出异常: j原创 2021-08-01 17:12:27 · 133 阅读 · 0 评论 -
线程的同步锁和死锁
线程的同步线程异步问题的提出:多个线程执行的不确定性引起执行结果的不稳定多个线程对账本的共享,会造成操作的不完整性,会破坏数据多线程的异步出现了安全问题问题的原因:当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还有其他的没有执行完,另一个线程参与进来执行。导致共享数据发生错误。解决办法:对多条操作共享数据的语句,只能让一个线程先全执行完,在执行过程中,其他线程不可以参与执行。解决办法(synchronized)Java 对于多线程的安全原创 2021-08-01 17:11:23 · 234 阅读 · 0 评论 -
线程的生命周期
线程的生命周期(从生到死的经历)JDK 中用 Thread.State 枚举表示了线程的几种状态要想实现多线程,必须在主程序中创建新的线程对象,Java 语言使用 Thread 类及子类的对象来表示线程,在它的一个完整的生命周期中通常要经历如下五钟状态:新建:(线程实例的创建)当一个 Thread 类或其子类的对象被声明并创建是,新生的线程对象处于新建状态。就绪:(执行 .start() 方法之后)处于新建状态的线程被 start() 后,将进入线程队列等待 CPU 时间片,此时他已具备了运行的原创 2021-07-31 20:53:35 · 100 阅读 · 0 评论 -
线程的优先级
线程的优先级线程的优先级不代表哪个大就先输出哪个,而是哪个线程的优先级大就有更大的概率先被执行。(!!!!!!!!!!)线程的优先级用的是数字 1~10 来表示,数字越大优先级越高,如果没有设置优先级,则默认的优先级为 5。MAX_PRIORITY(10):最高优先级MIN_PRIORITY(1):最低优先级NORM_PRIORITY(5):默认优先级...原创 2021-07-31 20:52:50 · 310 阅读 · 0 评论 -
Thread 类的相关方法
Thread 类的有关方法(1)启动线程,并执行对象的 run() 方法:void start()线程在被调度时执行的操作:run()返回线程的名称:String getName()设置该线程名称:void setName(String name)返回当前线程:static currentThread()测试类public class Test { public static void main(String[] args) {原创 2021-07-31 20:52:20 · 96 阅读 · 0 评论 -
创建线程的两种方式
创建线程的两种方式继承方式实现方式继承 Thread 类定义子类继承 Thread 类。子类中重写 Thread 类中的 run() 方法。/** * 继承 Thread 类的方式实现多线程 */// 1.定义子类继承 Thread 类。public class ThreadDemo extends Thread{ // 2.子类中重写 Thread 类中的 run() 方法 @Override public void run() {转载 2021-07-31 20:51:48 · 136 阅读 · 0 评论 -
线程的介绍
线程基本概念(程序 - 进程 - 线程)程序(Program):是为了完成特定的任务,用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。进程(process):是程序的一次执行过程,或是正在运行的一个程序。动态过程:有它自身的产生、存在和消亡的过程如:运行中的QQ,英雄联盟等等程序是静态的,进程是动态的线程(thread):进程可进一步细化为线程,是一个程序内部的一条执行路径。若一个程序可同一时间执行多个线程,则这个程序就是支持多线程的。多线程:一个程序或者一个转载 2021-07-31 20:51:03 · 133 阅读 · 0 评论 -
反射——Java的动态代理
Java 的动态代理Proxy:专门完成代理的操作类。是所有动态代理类的父类。通过此类为一个或多个接口动态地生成实现类。创建一个动态代理类所对应的 Class 对象:(直接创建一个动态代理对象)static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h)动态代理的步骤创建一个实现接口 InvocationHandler 的类,他必须实现 invok转载 2021-07-30 18:42:42 · 93 阅读 · 0 评论 -
反射——调用类中的指定属性
通过反射调用指定属性在反射机制中,可以直接通过 Field 类操作类中的属性,通过 Field 类提供的 set() 和 get() 方法就可以完成设置和取得属性内容的操作。返回此 Class 对象表示的类或接口的指定 public(公有的)Field:public Field getField(String name)返回此 Class 对象表示的类或接口的指定的 Field:public Field getDeclaredField(String name)在 Fie原创 2021-07-30 18:41:59 · 313 阅读 · 0 评论 -
反射——调用类中的指定方法
通过反射调用类中的指定方法调用指定方法通过反射,调用类中的方法,通过 Method 类完成。步骤如下:Class cla = Class.forName("com.aze.reflection.Student");通过 Class 类的 getMethod(String name,Class … parameterTypes) 方法取得一个 Method 对象,并设置此方法操作时所需的参数类型。// 得到名为 showInfo,参数为 String,String 的公有方法Method原创 2021-07-30 18:41:30 · 1106 阅读 · 0 评论 -
反射——调用类的完整结构
通过反射来调用类的完整结构Field、Method、Constructor、Superclass、Interface、Annotation实现的全部接口所继承的父类全部的构造器全部的方法全部的 Field实现的所有接口确定此对象所表示的类或接口实现的接口。public Class<?>[] getInterfaces()例如:public class Test { public static void main(String[] args) {转载 2021-07-30 18:40:01 · 73 阅读 · 0 评论 -
反射——Class 类
Class 类在 Object 类中定义了一下的方法,此方法将被所有子类继承:public final Class getClass()以上的方法返回值的类型是一个 Class 类,此类是 Java 反射的源头,实际上所谓反射从程序的运行结果来看也很好理解,即:可以通过对象反射求出类的名称。Class 类,可以对所有的类进行高度的抽象,形成一个可以描述所有类的类。反射可以得到的信息:某个类的属性、方法和构造器、某个类到底实现了哪些接口。对于每个类而言,JRE 都为其保留一个不变的原创 2021-07-30 18:38:00 · 113 阅读 · 0 评论 -
反射——反射机制
反射(Reflection)Java 反射是被视为动态语言的关键,反射机制允许程序在执行期间借助于 Reflection API 取得任何类的内部信息,并能直接操作任意对象的内部属性以及方法。反射机制就是通过一个抽象的类名能够在加载类的内存中找到相匹配的类的具体信息。Java 能够反射的前提已经加载过这个类,就可以通过类名来寻找这个类的所有相关信息。就例如:和人类的记忆反射一样,事先在记忆中有了这个事物的信息,人就可以通过这个事物的名字,然后在记忆中寻找相关的具体信息Java 反原创 2021-07-30 18:37:00 · 80 阅读 · 0 评论 -
流的基本应用
流的基本应用流是用来处理数据的处理数据时,一定要先明确数据源,还有数据目的地数据源可以是文件,可以是键盘数据目的可以是文件、显示器或者其他设备流只是在帮助数据进行传输,并对传输的数据进行处理,比如过滤处理、转换处理等等。字节流-缓冲流(重点)输入流 InputStream - FileInputStream - BufferedInputStream输出流 OutputStream - FileOutputStream - BufferedOutputStream字符流-缓冲原创 2021-07-26 21:40:11 · 211 阅读 · 0 评论 -
RandomAccessFile 类
RandomAccessFile 类RandomAccessFile 类支持“随机访问”的方式,程序可以直接跳到文件的任意地方来读、写文件支持只访问文件的部分内容可以向已存在的文件后追加内容RandomAccessFile 对象包含一个记录指针,用以标示当前读写处的位置。RandomAccessFile 类对象可以自由移动记录指针:long getFilePointer():获取文件记录指针的当前位置void seek(long pos):将文件记录指针定位到 pos 位置构原创 2021-07-26 21:39:37 · 425 阅读 · 0 评论 -
处理流六:对象流
对象流ObjectInputStream 和 ObjectOutputStream用于存储和读取对象的处理流,他的强大之处就是可以把 Java 中的对象写入到数据源中,也能把对象从数据源中还原回来。person 对象的两种情况:把这个对象存到电脑的硬盘上,硬盘存储的基础是二进制,需要把对象转化为一个二进制的字节流,将这个流保存到电脑上,要是需要用这个对象,就得把流转化为对象,再使用。把对象通过网络传到另一台机器上,网络的通信基础是二进制,也就是需要把一个对象转化为二进制数据流,把这个流通原创 2021-07-26 17:26:53 · 137 阅读 · 0 评论 -
处理流四五:打印流、数据流
打印流在整个 IO 包中,打印流是输出流信息最方便的类PrintStream(字节打印流)和 PrintWriter(字符打印流)提供了一系列重载的 print 和 println 方法,用于多种数据类型的输出PrintStream 和 PrintWriter 的输出不会抛出异常PrintStream 和 PrintWriter 有自动 flush 功能System.out 返回的是 PrintStream 的实例数据流为了方便地操作 Java 语言的基本数据类型的数据,可以使用原创 2021-07-26 16:12:59 · 172 阅读 · 0 评论 -
处理流三:标准输入输出流
标准输入输出流System.in 和 System.out 分别代表了系统标准的输入和输出设备System.in 的类型是 InputStreamSystema.out 的类型是 PrintStream,是 OutputStream 的子类 FilterOutputStream 的子类默认的输入设备是键盘,输出设备是显示器练习1把控制台输入的内容写到指定的TXT文件中,当接收到字符串over,就结束程序的运行public class Test { //练习:把控制台输入原创 2021-07-26 14:45:56 · 249 阅读 · 0 评论 -
处理流二:转换流
转换流转换流提供了在字节流和字符流之间的转换Java API 提供了两个转换流:InputStreamReader 和 OutputStreamWriter字节流中的数据都是字符时,转换字符流操作更高效InputStreamReader用于将字节流读取到的字节按指定字符集解码成字符。需要和 InputStream “套接”当字节流中的数据都是字符的时候,使用转换流转换为字符流处理效率更高在转换字符流时,设置的字符集编码要与读取的文件的数据编码一致,不然会出现乱码原创 2021-07-26 13:20:03 · 81 阅读 · 0 评论 -
处理流一:缓冲流(字节、字符)
缓冲流(基于内存)缓冲流就是先把数据缓冲至内存中,在内存中去做 IO 操作,基于内存的 IO 操作大概能比基于硬盘的 IO 操作快 7w5 倍FileInputStream、FileOutputStream、FileReader、FileWriter 这些都是计算机与硬盘之间发生的 io 操作,这个操作的速度受到硬盘的读写速度,为了能够提高读写速度,一定程度上绕过了硬盘的限制,Java 提供了一种缓冲流来实现。为了提高数据的读写速度,Java API 提供了带缓冲功能的流类,在使用这些流类原创 2021-07-25 16:12:52 · 223 阅读 · 0 评论 -
文件字符流
文件字符流创建一个临时存放数据的数组使用 char 数组文件字符输入流(FileReader)读取文件操作步骤:建议一个流对象,将已存在的一个文件架在进流中FileReader fr = new FileReader("Test.txt");创建一个临时存放数据的数组char[] ch = new char[1024];调用流对象的读取方法,将流中的数据读入到数组中fr.read(ch);public class Reader { /** *原创 2021-07-22 22:38:19 · 97 阅读 · 0 评论 -
字节流复制文件
文件字节流复制文件因为引用字节流是直接使用二进制,所以文件字节流非常通用,可以用来操作字符的文档 ,还可以操作任何的其他类型文件,例如:图片、压缩包等等。编写一个程序,吧一个文件复制到指定文件夹下import java.io.FileInputStream;import java.io.FileOutputStream;public class CopyDemo { public static void copyTest(String inPath,String outPath)原创 2021-07-22 20:33:27 · 587 阅读 · 0 评论 -
文件字节流
文件字节流文件字节输入流(FileInputStream)import java.io.FileInputStream;public class InputDemo { //文件字节输入流 FileInputStream public void fileInputStream(FileInputStream in) { try { //设置一个 byte 数组接收读取文件的内容 byte[] b = new b原创 2021-07-22 18:45:13 · 112 阅读 · 0 评论 -
IO与IO流体系
IO 与 IO 流体系IO 原理IO 流用来处理设备之间的数据传输Java 程序中,对于数据的输入/输出操作以“流(Stream)”的方式进行java.io 包下提供了各种“流”类和接口,用于获取不同种类的数据,并通过标准的方法输入或输出数据输入(input):读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中。输出(output):将程序(内存)数据输出到磁盘、光盘等存储设备中。无论输出还是输入,这些都是流的操作流的分类按操作数据单位不同分为:字节流原创 2021-07-22 17:45:49 · 200 阅读 · 0 评论 -
File 类递归遍历文件
递归遍历文件利用递归,遍历多层文件夹下所有的文件,无论层级有多少,全都遍历public static void main(String[] args) { Demo04 d4 = new Demo04(); File f = new File("D:\\JAVA\\Java 基础入门\\IO 流"); d4.test(f);}//利用递归,遍历多层文件夹下所有的文件,无论层级有多少,全都遍历public void test(File file) { if (f原创 2021-07-21 21:34:42 · 148 阅读 · 0 评论 -
File 类
File 类java.io.File 类:文件和目录路径名的抽象表示形式,与平台无关File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。如果需要访问文件内容本身,则需要使用 输入/输出流(I/O流)。File 对象可以作为参数传递给流的构造函数File 类的常见构造方法如下:public File(String pathname)以 pathname 为路径创建 FIle 对象,可以是绝对路径或者相对路径,如果 pathname 是相对路径,则默认的转载 2021-07-21 19:57:57 · 69 阅读 · 0 评论 -
IO流的主要内容
IO 流(Input、Output) 什么是流?通过程序,把一个图片放到某一个文件夹下,吧图片转化为数据集(例如二进制),把这些数据一点一点传到文件夹,这个传递的过程就类似于水的流动,所以可以把这个整体的过程成为数据流。IO 流主要内容java.io.File 类的使用。java.io.File 指的是计算机操作系统中的文件夹和文件IO 原理以及流的分类文件流(FileInputStream / FileOutputStream / FileReader / FileW原创 2021-07-21 13:06:20 · 91 阅读 · 0 评论 -
注解(Annotation)
注解()注解的概述从 JDK5.0 开始,Java 增加了对元数据(MetaData)的支持,也就是注释(Annotation)Annotation 其实就是代码里的特殊标记,这些标记可以再编译、类加载、运行时被读取,并执行相应的处理。通过使用 Annotation,程序员可以再不改变原有逻辑的情况下,再资源文件中嵌入一些补充信息。Annotation 可以想修饰符一样被使用,可用于修饰包、类、构造器、方法、成员变量、参数、局部变量的声明,这些信息被保存再 Annotation 的“name =原创 2021-07-19 20:21:24 · 112 阅读 · 0 评论 -
枚举类的学习
枚举类 在某些情况下,一个类的对象是有限而且固定的。例如季节类,只能有四个对象。手动实现枚举类:private 修饰构造器属性使用 private final 修饰把该类的所有实例都是用 public static final 来修饰使用 enum 定义枚举类JDK1.5 新增的 enum 关键字用于定义枚举类枚举类和普通类的区别:使用 enum 定义的枚举类默认继承了 java.lang.Enum 类枚举类的构造器只能使用 private 访问控制符枚举类的所有实例必须在原创 2021-07-19 17:22:25 · 123 阅读 · 0 评论 -
泛型通配符
通配符通配符:?不确定集合中的元素具体的数据类型,就是用 ? 表示所有类型例如:在集合 list 中不确定这个集合是什么数据类型import java.util.ArrayList;import java.util.List;public class Demo04 { public static void main(String[] args) { D d = new D(); List<String> l1 = new Arr原创 2021-07-18 23:40:59 · 76 阅读 · 0 评论 -
泛型——泛型方法
泛型方法 方法也可以被泛型化,不管此时定义在其中的类是不是泛型化的。在泛型方法中可以定义泛型参数,此时,参数的类型就是传入数据的类型。泛型方法的格式:无返回值的泛型方法public <T> void test1(T t) { T t1 = t; System.out.println(t.toString());}有返回值的泛型方法public <T> T test2(T t) { return t;}形参为可变参数的泛型原创 2021-07-18 23:10:26 · 217 阅读 · 0 评论 -
泛型——泛型接口
泛型接口如果实现类实现泛型接口,接口未传入实际泛型时,实现类声明的时候也需要将泛型声明到类中interface IB<T> { T test(T t);}/** * 未传入泛型实参时,与泛型类的定义相同,在声明类的时候,需要将泛型的声明一起加到类中 * @param <T> */class B<T> implements IB<T> { @Override public T test(T t) {原创 2021-07-18 20:57:28 · 698 阅读 · 0 评论 -
泛型——泛型类
泛型类对象实例化时不指定泛型,默认的泛型为 Object 类型A a3 = new A();//不指定泛型时,默认的泛型为 Object 类型// A<Object> a3 = new A<Object>();a3.setKey(new Object());Object obj = a3.getKey();泛型不同的引用不能相互赋值,例如以下两个:A<Integer> a1 = new A<Integer>();A<String原创 2021-07-18 20:32:45 · 136 阅读 · 0 评论 -
泛型(为什么使用泛型)
泛型(Generic) 泛型,JDK1.5 新加入的,解决了数据类型的安全性问题,其主要原理是在类声明时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型。这样在类声明或实例化时只要指定好需要的具体的类型即可。为什么要有泛型? Java 泛型可以保证如果程序在编译时没有发出警告,运行时就不会产生 ClassCastException 异常。同时,代码更加简介、健壮。注意Java 中的泛型,只有在编译阶段有效。在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦除,并原创 2021-07-18 13:05:18 · 76 阅读 · 0 评论 -
工具类 Collections
操作集合的工具类 CollectionsCollections 是一个操作 Set、List 和 Map 等集合的工具类。Collections 中提供了大量方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象设置不可变、对集合对象实现同步控制等方法排序排序操作如下:reverse(List):反转 List 中元素的顺序// reverse 反转 List 中的元素顺序Collections.reverse(list);shuffle(List):对 List 集合元转载 2021-07-17 21:27:10 · 79 阅读 · 0 评论