04 2020 档案
摘要:案例:牛奶工(生产者)送牛奶,送第几瓶奶时,消费者就接受第几瓶,比如送第一瓶奶,消费者就收到第一瓶奶。 使用奶箱(Milk Box)来作为共享数据区域。 那么在生产者类中就要有存储牛奶的方法,消费者就要有获取牛奶的方法。 奶箱类(Milk Box),需要对方法添加synchronized关键则,否则
阅读全文
摘要:使用try...finally...来保证释放锁unlock()一定会被执行。 public class SellTickets implements Runnable{ //共有100张票 private int tickets = 100; private Object obj = new Ob
阅读全文
摘要:public class SellTickets implements Runnable{ //共有100张票 private int tickets = 100; private Object obj = new Object(); private int x = 0; @Override pub
阅读全文
摘要:在卖票案例中会出现两个问题: 1.多个线程执行同一条语句产生了冲突 2.导致数据出现异常 以上两个问题可以总结为:数据安全问题。 Java提供了解决数据安全的方式:使用同步代码块 public class SellTickets implements Runnable{ //共有100张票 priv
阅读全文
摘要:public class SellTickets implements Runnable{ //共有100张票 private int tickets = 100; @Override public void run() { //票数大于0就买票,并告知是哪个窗口卖的 //每卖一张后,总票数要减1
阅读全文
摘要:public class MyRunnable implements Runnable { @Override public void run() { for (int i=0;i<100;i++){ System.out.println(Thread.currentThread().getName
阅读全文
摘要:static void sleep(long millis) 使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行),具体取决于系统定时器和调度程序的精度和准确性。 public class ThreadSleep extends Thread{ @Override public void run(
阅读全文
摘要:int getPriority() 返回此线程的优先级。 public class MyThreadDemo { public static void main(String[] args) { MyThread mt1 = new MyThread(); MyThread mt2 = new My
阅读全文
摘要:String getName() 返回此线程的名称。 public class MyThread extends Thread { @Override public void run() { for (int i = 1 ; i<100 ; i++){ //String getName() 返回此线
阅读全文
摘要:有需要源文件的同学可以留下邮箱,里面的笔记内容有一些具体的代码实现不能以图片的形式展示。
阅读全文
摘要:游戏类: public class GuessNumber { public GuessNumber() { } public static void start(){ //随机数生成数字 Random r = new Random(); int number = r.nextInt(100) +
阅读全文
摘要://void store(Writer writer, String comments) 将此属性列表(键和元素对)写入此 Properties表中 public class PropertiesDemo03 { public static void main(String[] args) thro
阅读全文
摘要://Object setProperty(String key, String value) 设置集合的键和值,都是String类型,底层调用时HashTable public class PropertiesDemo02 { public static void main(String[] arg
阅读全文
摘要:用对象序列化流序列化了一个对象后,假如我们修改了对象所属的类文件,读取数据会不会出问题呢? 如果出问题了,如何解决? 如果一个对象中的某个成员变量的值不想被序列化,又该如何实现 以下面代码为例来演示具体的问题(测试是需要单一注释掉write和read方法): public static void m
阅读全文
摘要:ObjectInputStream反序列化先前使用ObjectOutputStream编写的原始数据和对象。 构造方法:ObjectInputStream(InputStream in)创建从指定的InputStream读取的ObjectInputStream。 readObject()从Objec
阅读全文
摘要:ObjectOutputStream将Java对象的原始数据类型和图形写入OutputStream。 可以使用ObjectInputStream读取(重构)对象。 可以通过使用流的文件来实现对象的持久存储。 构造方法: ObjectOutputStream(OutputStream out) 创建一
阅读全文
摘要:public class CopyJavaDemo { public static void main(String[] args)throws IOException { /* //根据数据源创建字符输入流对象 BufferedReader br = new BufferedReader(new
阅读全文
摘要:测试两个构造方法 PrintWriter(String fileName) 使用指定的文件名创建一个新的PrintWriter,而不需要自动执行行刷新。 public PrintWriter(OutputStream out,boolean autoFlush) 从现有的OutputStream创建
阅读全文
摘要:首先测试,使用父类方法(write)来读取数据 public static void main(String[] args) throws IOException { //PrintStream(String fileName) 使用指定的文件名创建新的打印流,无需自动换行。 PrintStream
阅读全文
摘要:在System类中,有两个静态成员变量: public static final InputStream in 通常,该流对应于键盘输入或由主机环境或用户指定的另一个输入源。 public static final PrintStream out 通常,此流对应于显示输出或由主机环境或用户指定的另一
阅读全文
摘要:public class CopyFileDemo { public static void main(String[] args) { } //JDK9改进方案: public static void method4() throws IOException{ FileReader fr= new
阅读全文
摘要:硬盘没分区,所以我就把D:\\JavaTest 复制到C盘好了 数据源文件内容: 代码实现: public class CopyFoldersDemo { public static void main(String[] args) throws IOException{ //1.创建数据源File
阅读全文
摘要:数据源目录内容: public class CopyFolderDemo { public static void main(String[] args) throws IOException{ //1.创建数据源目录对象 File srcFolder = new File("D:\\JavaTes
阅读全文
摘要:首先说明一下Comparator接口中,关于比较器的默认规则: 返回负数的时候,第一个参数排在前面(理解就是第一个参数-第二个参数是负数,那么就说明第二个参数>第一个参数,也就是升序排列) 返回正数的时候,第二个参数排在前面(理解就是第二个参数-第一个参数是正数,那么就说明第二个参数<第一个参数,也
阅读全文
摘要:public class FileToArrayListDemo { public static void main(String[] args) throws IOException { //创建字符缓冲输入流对象 BufferedReader br = new BufferedReader(ne
阅读全文
摘要:public class TxtToArrayListDemo { public static void main(String[] args) throws IOException { //创建ArrayList集合对象 ArrayList<Student> arrayList = new Arr
阅读全文
摘要:name.txt中的内容: public class CallNameDemo { public static void main(String[] args) throws IOException { //创建字符缓冲入流对象 BufferedReader br = new BufferedRea
阅读全文
摘要:bw.txt内容: 代码实现: public class TxtToArrayListDemo { public static void main(String[] args) throws IOException { //创建字符缓冲入流对象 BufferedReader br = new Buf
阅读全文
摘要:public class ArrayListToTxtDemo { public static void main(String[] args) throws IOException { //创建ArrayList集合 ArrayList<String> arrayList = new ArrayL
阅读全文
摘要:public class CopyJavaDemo4 { public static void main(String[] args) throws IOException { //根据数据源创建字符缓冲输入流对象 BufferedReader br = new BufferedReader(new
阅读全文
摘要:public class CopyJavaDemo3 { public static void main(String[] args) throws IOException{ //根据数据源创建字符缓冲输入流对象 //BufferedReader(Reader in) 创建使用默认大小的输入缓冲区的
阅读全文
摘要:下面的示例与图上的文件名不相同,不影响具体操作。代码实现: public class CopyJavaDemo { public static void main(String[] args)throws IOException { //根据数据源创建字符输入流对象 InputStreamReade
阅读全文
摘要:四种方式实现复制视频,并记录每种方式复制视频的时间 基本字节流一次读写一个字节 基本字节流一次读写一个字节数组 字节缓冲流一次读写一个字节 字节缓冲流一次读写一个字节数组 public class CopyAviDemo { public static void main(String[] args
阅读全文
摘要:字节缓冲输出流演示: public class BufferStreamDemo { public static void main(String[] args) throws IOException { //字节缓冲输出流:BufferedOutputStream (OutputStream ou
阅读全文
摘要:学习到IO流时,对输入流和输出流这两个词的理解产生了误区。 一般情况下,对于输入和输出的理解,输入就是把一个数据输入到文件中,输出就是把文件中的内容给我们看。 到了输入流和输出流时,情况却正好反过来,输入流呈现的反而是为了读取,输出流呈现反而是为了存储。 通过查阅资料发现,书本中早就给出了明确的答案
阅读全文
摘要:通过之前一次读取一个字节数据的示例中,发现当读取到流的末尾是会返回-1,读取字节数组时同样也是返回-1时作为终止循环的条件 public class FileInputDemo01 { public static void main(String[] args) throws IOException
阅读全文
摘要:分析如上面的图,文件路径在代码中与上图不相同 public class CopyTxtDemo { public static void main(String[] args)throws IOException { //1.根据数据源创建字节输入流对象 FileInputStream fis =
阅读全文
摘要:fos.txt文件内容: public class FileInputStreamDemo { public static void main(String[] args) throws IOException { //创建字节输入流对象 FileInputStream fis = new File
阅读全文
摘要:首先使用try...catch来处理 public class FileOutputStreamDemo03 { public static void main(String[] args) { try { //创建文件输出流以指定的名称写入文件 FileOutputStream fos = new
阅读全文
摘要:字节流写数据的两个常用构造方法: FileOutputStream(String name)创建文件输出流以指定的名称写入文件。 FileOutputStream(File file)创建文件输出流以写入由指定的 File对象表示的文件 先说结论:通过分析源码可知,两者的实现是一样的,下面给出示例。
阅读全文
摘要:/* FileOutputStream:文件输出流用于将数据写入File */ public class FileOutPutStreamDemo01 { public static void main(String[] args) throws IOException { //创建字节输出流对象
阅读全文
摘要:需求:给定一个路径(F:\\java),请通过递归完成遍历该目录下的所有内容,并把所有文件的绝对路径输出在控制台 /* 需求:给定一个路径(F:\\java),请通过递归完成遍历该目录下的所有内容,并把所有文件的绝对路径输出在控制台 */ public class DiGuiDemo01 { pub
阅读全文
摘要:public class FileDemo04 { public static void main(String[] args) throws IOException { //需求1:在当前模块目录下创建java.txt文件 File f1 = new File("myFile\\java.txt"
阅读全文
摘要:public class FileDemo03 { public static void main(String[] args) { File f1 = new File("myFile\\java.txt"); // public boolean isDirectory():测试此抽象路径名表示的
阅读全文
摘要:public class PokerDemo { public static void main(String[] args) { //创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现 ArrayList<String> array = new ArrayList<String>(
阅读全文
摘要:public class CollectionsDemo { public static void main(String[] args) { //创建集合对象 ArrayList<Student> arrayList = new ArrayList<Student>(); //创建学生对象 Stu
阅读全文
摘要:public class CollectionsDemo { public static void main(String[] args) { //创建集合对象 List<Integer> list = new ArrayList<Integer>(); //添加元素 list.add(50); l
阅读全文
摘要:public class HashMapDemo { public static void main(String[] args) { //键盘录入一个字符串 Scanner sc = new Scanner(System.in); System.out.println("请输入一个字符串:");
阅读全文
摘要:public class HashMapDemo { public static void main(String[] args) { //创建HashMap集合 HashMap<String, ArrayList<String>> hm = new HashMap<String, ArrayLis
阅读全文
摘要:public class ArrayListDemo { public static void main(String[] args) { //创建ArrayList集合 ArrayList<HashMap<String,String>> arrayList = new ArrayList<Hash
阅读全文
摘要:public class MapDemo { public static void main(String[] args) { //创建HashMap集合对象 HashMap<Student,String> hm = new HashMap<Student, String>(); //创建学生对象
阅读全文
摘要:public class MapDemo01 { public static void main(String[] args) { //创建集合对象 HashMap<String, Student> map = new HashMap<String, Student>(); //创建学生对象 Stu
阅读全文
摘要:方式1: public class MapDemo3 { public static void main(String[] args) { //创建集合对象 Map<String,String> map = new HashMap<String, String>(); //添加元素 map.put(
阅读全文
摘要:public class MapDemo02 { public static void main(String[] args) { //创建集合对象 Map<String,String> map = new HashMap<String, String>(); //添加元素 map.put("张无忌
阅读全文
摘要:public class MapDemo01 { public static void main(String[] args) { //创建集合对象 Map<String,String> map = new HashMap<String, String>(); //V put(K key, V va
阅读全文
摘要:public class ArgsDemo2 { public static void main(String[] args) { //Arrays工具类中有一个静态方法: //public static <T> List<T> asList(T... a):返回由指定数组支持的固定大小的列表 Li
阅读全文
摘要:public class ArgsDemo { public static void main(String[] args) { System.out.println(sum(10, 20)); System.out.println(sum(10, 20, 30)); System.out.prin
阅读全文
摘要:public class GenericDemo { public static void main(String[] args) { //类型通配符:<?> List<?> list1 = new ArrayList<Object>(); List<?> list2 = new ArrayList
阅读全文
摘要:用最原始的调用方法来输出不同数据类型的元素时,需要创建不同数据类型参数的重载方法,例如: //普通方法 public class Generic { public void show(String s){ System.out.println(s); } public void show(Integ
阅读全文
摘要:public class SetDemo { public static void main(String[] args) { //创建集合对象,分别使用两种子类 //Set<Integer> set = new HashSet<Integer>(); //Set<Integer> set = ne
阅读全文
摘要:首先根据思路编写代码,然后根据要求分析排序的主要条件和次要条件(分析思路在文末),在学生类中有三个成员变量,姓名(name),语文成绩(chinese),数学成绩(math),要求按照总分排序,在本需求中仅需要两科成绩,如果需要多门成绩时多次调用get方法就比较麻烦,可以在学生类中提供一个公开的获取
阅读全文
摘要:public class TreeSetDemo { public static void main(String[] args) { //创建集合对象 TreeSet<Student> treeSet = new TreeSet<Student>(new Comparator<Student>()
阅读全文
摘要:首先说明用TreeSet集合存储自定义时,无参构造方法使用的是自然排序对元素进行排序的 然后,使用自然排序的前提是,让元素所属的类实现Comparable接口并重写comparaTo(T o)方法,来完成。 其次要注意,重写方法时,一定要注意排序规则必须按照要求的主要条件和条件来写。 下面通过一个需
阅读全文
摘要:由于Set集合是不存储重复元素的,所以在做此案例时,如果我正常添加一个重复元素是什么结果呢? public class HashSetDemo { public static void main(String[] args) { //创建HashSet集合对象 HashSet<Student> ha
阅读全文
摘要:由于LinkedList底层数据结构是链表,因此有一些特有的功能从链表对应到集合中。 框架代码: public class LinkedListDemo { public static void main(String[] args) { //创建集合对象 LinkedList<String> li
阅读全文
摘要:使用ArrayList存储字符串并遍历 public class ListDemo { public static void main(String[] args) { //创建ArrayList集合对象 ArrayList<String> arrayList = new ArrayList<Str
阅读全文
摘要:public class ListDemo { public static void main(String[] args) { //创建List集合对象 List<Student> list = new ArrayList<Student>(); //创建学生对象 Student s1 = new
阅读全文
摘要:public class ListDemo { public static void main(String[] args) { //示例1: int[] arr = {1,2,3,4,5}; for (int i : arr){ System.out.println(i); } System.ou
阅读全文
摘要:案例需求: 一个集合,里面有三个元素:list.add("hello"); list.add("world"); list.add("java"); 遍历集合,如果有”world“这个元素,我们就添加一个”javaee“元素进去。 代码如下: public class list_03 { publi
阅读全文
摘要:public class ListDemo { public static void main(String[] args) { //创建List集合对象 List<Student> list = new ArrayList<Student>(); //创建学生对象 Student s1 = new
阅读全文
摘要:集合元素框架 public class ListDemo02 { public static void main(String[] args) { //创建集合对象 List<String> list = new ArrayList<String>(); //添加元素 list.add("hello
阅读全文
摘要:public class CollectionDemo { public static void main(String[] args) { //创建collection集合对象 Collection<Student> c = new ArrayList<Student>(); //创建学生对象 S
阅读全文
摘要:Iterator : 迭代器,集合的专用遍历方式Iterator <E> iterator() : 返回此集合中元素的迭代器,通过集合的iterator()方法得到迭代器是通过集合的iterator()方法得到的,所以我们说它是依赖于集合而存在的Iterator中的常用方法 E next() : 返
阅读全文
摘要:boolean add(E e) import java.util.ArrayList; import java.util.Collection; public class CollectionDemo_02 { public static void main(String[] args) { //
阅读全文
摘要:/* 自定义异常:ScoreException */ public class ScoreException extends Exception { //无参构造 public ScoreException(){} //带参构造 public ScoreException(String messag
阅读全文