java小白
不会写代码的菜
这个作者很懒,什么都没留下…
展开
-
Java IO流的使用方法(操作步骤)
我们首先以文件流FileReader为基础,介绍一些流的基本使用方法这里我们首先要创建一个".txt"的文件,然后将文件中的内容读入流中,并输出到控制台package io;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;public class IOTest { public static voi..原创 2022-04-02 00:15:00 · 935 阅读 · 0 评论 -
Java IO流的概述及分类,体系
一.Java IO概述 I/O是Input/Output的缩写,I/O技术是一种非常实用的技术,主要用于处理设备之间的数据传输. 如: 读/写文件,网络传输等 Java 程序中,对于数据的输入/输出操作以"流(Stream)",的形式进行 java.io包下提供了各种"流"的类型和接口,用以获取不同种类的数据,并通过标准的方法输入或输出数据 什么是输入输出? 输入 intput: 读取外部数据(磁盘,光盘等存储设备中的数据)到程序(内存)中 输出 output:原创 2022-04-01 23:30:00 · 523 阅读 · 0 评论 -
Java比较器
一.Java比较器的概述1.为什么要使用比较器?当java涉及到数组排序时,就会使用到比较器import java.util.Arrays;public class ComparableTest1 { public static void main(String[] args) { String [] arr = {"AA","FF","SS","BB","DD","CC"}; Arrays.sort(arr); ...原创 2022-04-01 22:00:00 · 2638 阅读 · 0 评论 -
Java File类
一.File类的概述 File类位于java.io包中 File类的对象可表示一个文件或目录 ● File对象可以对文件或目录的属性进行操作,如:文件名、最后修改日期、文件 大小等; ● File对象无法操作文件的具体数据,即不能直接对文件进行读/写操作。 二.File类的构造方法①直接从根目录获取File file2 = new File("F:/Java:/text2.txt");②间接获取 String p = "F:/Java:/"; Fil...原创 2022-04-01 21:30:00 · 980 阅读 · 0 评论 -
Java Stream流的终端操作
流的终端操作会从流的流水线生成结果,其结果可以是任何不是流的值 如: List,Integer 流进行了终端操作后不能再使用. 流的终端操作也涉及到很多种方法,下面我们分为3大类进行介绍1.匹配与查找 allMatch() //检查是否匹配所有元素 anyMatch() //检查是否至少有一个元素匹配 noneMatch() //检查是否没有元素匹配 findFirst() //返回第一个元素 findAny() //返回任意元素..原创 2022-04-01 08:30:00 · 451 阅读 · 0 评论 -
Java stream流的中间操作
多个流的中间操作可连成一个流水线,除非流水线上触发终端操作,否则中间操作不会执行任何的处理!而在终止操作执行时一次性全部处理.将这种处理方式称为"惰性求值"下面我们分三个部分来介绍流的中间操作1.筛片与切片筛选与切片中共涉及一下几个方法 filter() //过渡,从流中排除某些元素 limit() //截断流,使之不超过指定数量 distinct() //筛选,通过流所生成元素的hashCode()和equals()方法去除重复元素 skip() /...原创 2022-03-31 23:27:17 · 683 阅读 · 0 评论 -
Java stream获取流的方法及流的基本操作步骤
一.获取流的方法 目前,我们共有四种获取流的方法,下面进行一一介绍:①从集合中获取流 ArrayList<String> list = new ArrayList<>(); Stream<String> stream = list.stream(); 这里我们通过调用stream()方法,将集合中的数据存放到Stream对象中,直接对Stream中的数据进行操作②从数组中获取流 Integ...原创 2022-04-01 15:35:25 · 2852 阅读 · 0 评论 -
Java 泛型通配符和类型擦除
一.泛型通配符1.什么是泛型通配符?"?" 表示实际参数类型,可以是任意类型void test(Demo <?> d){}2.类型通配符上限? extends Number (以Number为例)表示传入的实参类型只能是Number及其子类void test(Demo<? extends Number> d){ }3.类型通配符下限? super Number (以Number为例)表示传入的实际参数类型原创 2022-01-02 12:45:31 · 155 阅读 · 0 评论 -
Java 自定义泛型类的举例
下面我们首先写出一个泛型类package genericity;public class Order<T> { String ordername; int orderID; //类内部就可以直接使用类的泛型 T orderT; public Order(){ } public Order(String ordername,int orderID,T orderT){ this.orderID=order原创 2021-12-31 10:15:00 · 580 阅读 · 0 评论 -
Java 泛型使用示例
1.在集合中使用泛型的示例 首先演示一下不适用泛型的情况下可能会出现的问题 public class Demo1 { public static void main(String[] args) { ArrayList list = new ArrayList(); list.add(48); list.add(68); list.add(51); li...原创 2021-12-31 08:30:00 · 866 阅读 · 0 评论 -
Java Stream(流)API的概述
一.Stream API的说明 Stream是Java 8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找,过滤和映射等操作 使用Stream API对集合数据进行操作,就类似于使用SQl执行的数据库查询,也可以使用Stream API来并行执行操作,简言之.Stream API提供了一种高效且易于使用的处理数据的方式 二.为什么要使用Stream API? 实际的开发过程中,项目中的多数数据源都来自于MySql,Oracle等,但现在数据源可以原创 2021-12-28 22:15:00 · 265 阅读 · 0 评论 -
Java 函数式接口概述及理解
一.什么是函数式接口?如果一个接口中,之声明了一个抽象方法,那么此接口就称为函数式接口如: Runnable接口,Comparator接口 可通过Lambda表达式来创建该接口的对象(若Lambda抛出一个受检异常(非运行时异常),那么该异常需在目标接口的抽象方法上声明) 可在一个接口上使用@FunctionalInterface注解标识,来检验该接口是否为函数式接口,同时javadoc也会包含一条声明,说明这个接口为函数式接口 在java.util.function包下定原创 2021-12-28 18:01:29 · 205 阅读 · 0 评论 -
Java Lambda表达式的使用方法及总结
下面将Lambda表达式的使用共分为六种情况介绍,代码块上半部分为原有方式,下半部分为使用Lambda表达式的简化方式,从而使我们进一步体会使用Lambda表达式的便捷之处①格式一:无参,无返回值//在这里我们使用创建多线程的Runnable方法举例 //此为原有方式 Runnable r1 = new Runnable() { @Override public void run() {...原创 2021-12-26 11:30:00 · 1012 阅读 · 0 评论 -
Java 集合之ArrayList和LinkedList的区别
ArrayList和LinkedList是集合中List接口的两种不同实现方式,并且两者都不是线程安全的.通常情况下,ArrayList和LinkedList的区别有如下几点:①两者底层实现方式不同 ArrayList底层是基于动态数组的数据结构实现的,而LinkedList底层是基于双向链表的数据结构实现的,这也是两者最本质的区别②访问元素效率不同 对于访问集合中的元素,ArrayList要优于LinkedList 因为LinkedList底层是基于链表实现的...原创 2021-12-25 18:45:00 · 277 阅读 · 0 评论 -
Java GUI综合运用
import javax.swing.*;import java.awt.*;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.net.URL;public class Plane1 extends JFrame { private int x = 900; private int y = 900; public Plane1(){ this....原创 2021-12-25 09:30:00 · 326 阅读 · 0 评论 -
Java 泛型(Denericity)概述
一.为什么要使用泛型?早期Object类型可以接收任意的对象类型,但在涉及到向下转型时就会存在安全隐患,这时引入泛型的概念二.什么是泛型? 泛型,即“参数化类型”. 参数化类型,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式,然后在使用/调用时传入具体的类型 三.泛型的使用方式共有三种使用方式:泛型类,泛型接口,泛型方法1.泛型类①基本泛型类示例public class CommonResult <T>{原创 2021-12-25 15:15:00 · 232 阅读 · 0 评论 -
Java Map之Hashtable实现类
Hashtable作为古老的实现类,线程安全,执行效率低 Hashtable不能存储null的key-value,即不能存储空值 注意: Hashtable的"table"中"t"为小写import java.util.Hashtable;public class HashtableDemo { public static void main(String[] args) { Hashtable<String,Integer>...原创 2021-12-22 20:08:13 · 372 阅读 · 0 评论 -
Java HashMap源码分析
这里我们直接截取jdk中的源码进行分析: final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) { Node<K,V>[] tab; Node<K,V> p; int n, i; if ((tab = table) == null || (n = tab.length) == 0) /原创 2021-12-22 17:45:00 · 55 阅读 · 0 评论 -
Java HashMap的底层实现原理
一.Java HashMap的底层实现原理(以jdk7为例)1.HashMap map = new HashMap(); 在实例化以后,才在底层创建了一个长度为16的一维数组 Entry [] table2.map.put(key1,value1); 首先,调用key1所在类的hashCode()计算key1的哈希值,此哈希值经过某种算法计算之后,得到在Entry数组中的存放位置 如果此位置上的数据为空,则此时的key1-value1添加成功 ① 如果此位置上..原创 2021-12-22 13:24:36 · 1722 阅读 · 0 评论 -
Java Collection之Map接口概述及常用方法示例
一.Map实现类的结构 Map为双列数据,存储key-value对(即键值对)的数据,类似于高中学习的函数: y = f(x) HashMap: 作为Map的主要实现类 线程不安全,效率高,可以存储null的key和value LinkedHashMap: 保证在遍历map元素时,可以按照添加的顺序实现遍历 原因: 在原有的HashMap底层结构的基础上,又添加了一对指针,指向前一个元素和后一个元素,因此可以实现按照添加的顺序遍历 对...原创 2021-12-22 13:24:11 · 184 阅读 · 0 评论 -
Java GUI 对话框 JOptionPane
一.对话框的分类:可分为两种 ①showMessageDialog(): 消息对话框 ②showConfirmDialog():确认对话框二.每种对话框对应的消息类型 showMessageDialog() :消息对话框 具有五种类型,类型不同,对应的消息不同① ERROR_MESSAGE 错误消息提示②INFORMATION_MESSAGE 信息提示③WARNING_MESSAGE 警告提示④QUESTION_MESSAGE 问题...原创 2021-12-25 06:45:00 · 1236 阅读 · 0 评论 -
Java GUI事件处理
到目前为止我们编写的只是图形用户界面,并没有特殊的功能,想要实现一定的功能必须进行事件处理 当用户与GUI组件进行交互,就会产生事件,比如: 按下一个按钮,点击鼠标等 一.事件处理思路: 一个源(事件源)产生一个事件(事件对象)并把它送到监听器那里,监听器只是简单地等待,直到它收到一个事件,一旦事件被接受,监听器将处理这些事件 一个事件源必须注册监听器以便监听器可以接受关于一个特定事件的通知 二.常用事件处理方式: 为按钮添加事件监听 jB...原创 2021-12-24 15:45:00 · 685 阅读 · 0 评论 -
使用GUI编写一个基本窗口
首先我们需要观察所需窗口的布局方式,我们可以将上面的窗口面板看做一个以网格布局为基础的布局方式,将整个面板分为3行1列,接下来在每行中在设置自己的布局方式.比如第1,2行可以再嵌套一个流式布局方式,添加文本框及密码框,第3行可以也嵌套一个流式布局,添加连个按钮,实现所需的功能 代码演示:import javax.swing.*;import java.awt.*;public class loginJFrame extends JFrame { public...原创 2021-12-24 08:15:00 · 566 阅读 · 0 评论 -
Java GUI常用组件介绍
注意: 所有组件创建并设置完成后都必须使用add()方法添加到窗口中,否则无法显示 jp.add(jButton4); //将设置好的按钮添加到窗口 this.add(jp); JLable(标签) //用来显示文字或图片 JPanel jp = new JPanel(); jp.setLayout(new FlowLayout(FlowLayout.CENTER)); JLabel accou...原创 2021-12-24 11:30:00 · 1103 阅读 · 0 评论 -
Java GUI面板的布局方式
有四种布局方式: FlowLayout //流式布局,即一种横向的布局,以行为基础,逐个进行组件的排列,当一行排列满时,自动排列到下一行 流式布局示例: package javaGUI;import javax.swing.*;import java.awt.*;public class JFrameDemo2_1 extends JFrame { public JFrameDemo2_1(){ this.setSize(500,300);...原创 2021-12-23 20:45:00 · 3270 阅读 · 1 评论 -
Java GUI(图形用户界面)概述
1.GUI概述 目前,我们编写的程序都是基于控制台的程序 GUI(Graphical User Interface)即图形用户界面,它能够使应用程序看上去更加友好 2.Swing概念 位于javax.swing Swing是纯java组件,使得应用在不同平台中有相同的外观和行为 3.什么是组件,容器? java的图形用户界面的基本组成是组件,组件是一个以图形化的方式显示在屏幕上,并且能和用户进行交互的对象 组件不能单独的显示出来,所以必须放在一定的容器原创 2021-12-23 16:45:00 · 3086 阅读 · 0 评论 -
Java foreach循环(增强for循环)
1.foreach循环概述: JDK5.0之后新增foreach循环迭代访问Collection和数组 遍历操作不需获取Collection或数组的长度,无需使用索引访问元素 遍历集合的底层调用Iterator迭代器完成 2.申明格式:for(Person person : persons){ System.out.println(person); }说明: Person为需要遍历的元素类型 person为遍历后自定义元素的名称,将所...原创 2021-12-20 22:16:02 · 1174 阅读 · 0 评论 -
Set中关于equasl()和hashCode()方法的重写
向 Set中添加的数据,其所在类一定要重写hashCode()方法和equals()方法 要求: 重写的hashCode()和equals()尽可能保持一致性,即"相同元素必有相等的散列码" 1.自定义类中默认没有重写hashCode()方法,使用时是回去调用Object类中的hashCode()方法public native int hashCode(); //默认取得的是对象在内存中的地址 //所new出来的对象的地址都不同...原创 2021-12-20 15:15:00 · 331 阅读 · 0 评论 -
Set不可重复性的理解
Set中不可重复性保证添加的元素按照equals()判断时,不能返回true,即: 相同的元素只能添加一个 Set添加元素的过程: 以HashSet为例: 我们向HashSet添加元素a,首先调用a所在类的hashCode()方法,计算a的哈希值,此哈希值接着通过某种算法计算出在HashSet底层数组中存放位置(即为索引),接着判断数组在此位置上是否有元素 如果此位置上有没有其他元素,则a直接添加到此数组中相应的索引位置上 ① 如果此位置上有其他元素b(...原创 2021-12-20 08:45:00 · 576 阅读 · 0 评论 -
HashSet的无序性的理解
无序性不等于随机性 import java.util.HashSet;public class HashSetDemo { public static void main(String[] args) { HashSet set = new HashSet(); set.add(456); set.add(123); set.add("cc"); ...原创 2021-12-19 23:30:58 · 255 阅读 · 0 评论 -
Collection 之Set接口概述及常用方法
一.Set接口的概述 Set接口是Collection的子接口,未额外提供自己的方法,即使用的方法为Collection中的方法 Set不允许包含相同的元素,即不可重复性 如果试加入两个相同元素,则加入失败 Set判断是否相等 不适用 == ,而是使用equals()方法二.Set接口的实现类 HashSet 无序 LinkedHashSet LinkedHashSet作为HashSet的子类,在添加数据时,每个...原创 2021-12-19 23:30:39 · 789 阅读 · 0 评论 -
Java Collection 之List接口概述及常用方法
一.List接口概述 在List接口中值可重复 含有三个常用的实现类: ArrayList LinkedList Vector List接口中含有索引值,因此含有get()方法,可以获取属性 二.List常用类及方法介绍1.ArrayList实现类 底层为数组结构,因此在ArrayList中查询快,但是添加/删除时需要移动大量元素,效率低 继承自AbctractList,实现了List接口 允许nul原创 2021-12-19 19:01:50 · 340 阅读 · 0 评论 -
Java 集合概念及常用方法
一.集合与数组1.集合与数组存储数据概述 集合与数组都是对多个数据进行存储操作的结构,简称Java容器 说明: 此时的存储主要是指内存层面的存储,不涉及持久化存储2.数组存储的特点 数组一旦初始化后,长度确定,不可更改 数组一定定义好之后,元素的数据类型确定,因此只能操作指定数据类型的数据 如: String [] arr; int [] arr1; Object [] arr2;3.数组存储的弊端 初始化后,...原创 2021-12-15 00:44:41 · 298 阅读 · 0 评论 -
Java 线程的通信问题
1.什么是线程通信?线程的通信即线程的交流2.线程通信涉及到的3个方法1.wait()//一旦执行此方法,线程进入阻塞状态,并释放同步监视器2.nitify()//一旦执行此方法,就会唤醒被wait的一个线程;如果有多个线程都等着被唤醒,则优先唤醒优先级高的那个线程3.notidyAll()//一旦执行到此方法,就会唤醒所有被wait的线程3.说明;1.wait(),notify(),notifyAll()必须使用在同步代码块或同步方法中2.这三个方法的调用者必须原创 2021-12-13 20:10:47 · 82 阅读 · 0 评论 -
Java 多线程的综合运用
栗子:实现目标: 生产者/消费者问题 此题目需实现一个生产者,店员,消费者之前程序.生产者生产产品,生产好之后交给店员,店员只能持有固定数量的产品,店员与生产者之间保持信息交流,即店员持有的产品数量小于所需持有的固定数量时,生产者开始生产产品至固定数量而后停止生产;消费者与店员之间也保持信息交流,消费者每消费一个产品,店员持有的产品数量减少相应的数目,如此往复循环分析问题: 1.是否是多线程? 是,生产者线程,消费者线程 2.是否存在线程安全问题(是否共享数据)? 是...原创 2021-12-13 20:11:09 · 173 阅读 · 0 评论 -
Java 线程的创建方式四--使用线程池
1.线程池的使用背景:经常创建和销毁线程,及使用量特别大的资源,比如并发情况下的线程,对计算机性能影响特别大,这时就需要一个能存储这些经常使用的线程的东西,线程池因用而生2.线程池的实现思路: 提前创建好多个线程,放入线程池中,使用时直接获取,使用后放回池中 可以避免频繁创建和销毁线程,实现重复利用(类似生活中的公共交通工具,使用时借用一下,使用后放回规定地方,无需自己创建一个) 3.使用线程池的好处: 提高响应速度(减少了创建新线程的时间) 降低资源消耗(重复利原创 2021-12-11 16:18:43 · 388 阅读 · 0 评论 -
Java 线程的创建方式三--实现Callable接口
新增的线程创建方式(JDK5.0及以后)实现Callable接口 与使用Runnable接口相比,Callable接口功能更加强大 相比run()方法,call()方法可以有返回值 call()方法可以抛出异常,从而被外界操作捕获 支持泛型的返回值 需要借助FutureTask类,比如获取返回结果 Future接口 可对具体Runnable,Callable任务的执行结果进行取消,查询是否完成,获取结果等原创 2021-12-10 22:42:34 · 75 阅读 · 0 评论 -
Java 线程的死锁问题
一.什么是死锁? 不同线程分别占用对方需要的同步资源不放弃,都在等在对方放弃自己所需要的同步资源,就形成了线程的死锁,这时程序也不会报错,只会停在出现死锁的位置,不再往下执行比如: 两个人在吃饭,饭桌上只有一个两根筷子,这时两个人各拿了一根筷子,都在等待对方放下另外一根,结果谁也吃不到饭二.说明: 出现死锁问题后,不会出现异常,不会出现提示,只是所有的线程都处于阻塞状态,无法继续执行三.我们在编写程序时要避免死锁问题 不是说程序执行完了,就一定不存在死锁问题...原创 2021-12-09 23:08:33 · 307 阅读 · 0 评论 -
Java 解决线程安全的方式三--Lock(锁)
Lock(锁)一.什么是lock? 从JDK5.0开始,Java提供了更强大的线程同步机制--通过显示定义同步锁对象来实现同步,同步锁使用lock对象充当 java.util.concurrent.lock.Lock 接口是控制多个线程对共享资源进行访问的工具 锁提供了对共享资源的独占访问,每次只能有一个线程对lock对象加锁,线程开始访问共享资源之前应先获得lock对象 二.如何实现lock锁? ReentrantLock类实现了Lock,它拥有与synchro..原创 2021-12-09 23:07:33 · 175 阅读 · 0 评论 -
Java 线程的安全问题及解决方式
线程的安全问题一.问题提出: ①多个线程执行的不确定性引起执行结果不稳定 ②多线程对数据的共享,造成操作不完整性,破坏数据 某个执行中的线程操作过程中,尚未完成相关操作时,其他线程参与进来也执行相同的操作,这时就会出现线程安全问题二.如何解决? 当一个线程a在操作共享数据时,使其他线程不能参与进来,直到a的相关操作完成时,其他线程才可以操作,即使a被阻塞,也不能被改变 在java中通过同步机制来解决线程安全问题三.解决线程安全问题的方式:方式一:...原创 2021-12-09 23:06:43 · 1349 阅读 · 0 评论