
自学Java
Ingeauer俊
这个作者很懒,什么都没留下…
展开
-
小白学Java核心知识(IO流)十七:管道流(结合多线程)
import java.io.*;class Read implements Runnable{ private PipedInputStream in; Read(PipedInputStream in) { this.in = in; } public void run() { try { byte[] buf = new byte[1024]; System.out.println("读取前。。没有数据阻塞"); int len = in.read(.原创 2020-08-21 21:04:53 · 127 阅读 · 0 评论 -
小白学Java核心知识(IO流)十六:对象的序列化
两个文件:ObjectStreamDemo与personObjectStreamDemo.javaimport java.io.*;class ObjectStreamDemo { public static void main(String[] args) throws Exception { //writeObj(); readObj(); } public static void readObj()throws Exception { ObjectInputStrea原创 2020-08-21 20:46:25 · 136 阅读 · 0 评论 -
小白学Java核心知识(IO流)十五:Properties的应用、练习、合并流与切割流
1、Properties的应用/*Properties是hashtable的子类。也就是说它具备map集合的特点。而且它里面存储的键值对都是字符串。是集合中和IO技术相结合的集合容器。该对象的特点:可以用于键值对形式的配置文件。那么在加载数据时,需要数据有固定格式:键=值。练习:限制程序运行次数。当运行次数到达5次时,给出,请您注册的提示。并不再让该程序执行。*/import java.io.*;import java.util.*;class Properties原创 2020-08-21 20:43:02 · 145 阅读 · 0 评论 -
小白学Java核心知识(IO流)十四:删除文件目录、创建Java文件列表
1、删除文件目录/*删除一个带内容的目录。删除原理:在window中,删除目录从里面往外删除的。既然是从里往外删除。就需要用到递归。*/import java.io.*;class RemoveDir{ public static void main(String[] args) { File dir = new File("d:\\testdir"); removeDir(dir); } public static void removeDir(F原创 2020-08-21 09:49:13 · 160 阅读 · 0 评论 -
小白学Java核心知识(IO流)十三:File文件基本的处理、文件列表、递归(带层次)
import java.io.*;/*File类常见方法:1,创建。 boolean createNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返回false。 和输出流不一样,输出流对象一建立创建文件。而且文件已经存在,会覆盖。 boolean mkdir():创建文件夹。 boolean mkdirs():创建多级文件夹。2,删除。 boolean delete():删除失败返回false。如果文件正在被使用,则删除不了返回falsel。 voi原创 2020-08-20 22:30:30 · 149 阅读 · 0 评论 -
小白学Java核心知识(IO流)十二:异常的日志信息、系统信息
1、异常的日志信息(可以选择log4j工具)import java.io.*;import java.util.*;import java.text.*;class ExceptionInfo{ public static void main(String[] args)throws IOException { try { int[] arr = new int[2]; System.out.println(arr[3]); } catch (Exceptio原创 2020-08-18 23:01:26 · 104 阅读 · 0 评论 -
小白学Java核心知识(IO流)十一:流操作规律、转换流的应用方式、改变标准输入输出设备
import java.io.*;/*1,源:键盘录入。目的:控制台。2,需求:想把键盘录入的数据存储到一个文件中。源:键盘。目的:文件。3,需求:想要将一个文件的数据打印在控制台上。源:文件。目的:控制台。流操作的基本规律:最痛苦的就是流对象有很多,不知道该用哪一个。通过三个明确来完成。1,明确源和目的。 源:输入流。InputStream Reader 目的:输出流。OutputStream Writer。2,操作的数据是否是纯文本。 是:字符流。.原创 2020-08-18 21:47:00 · 128 阅读 · 0 评论 -
小白学Java核心知识(IO流)十:InputStreamReader与OutputStreamWriter之间的对比
https://www.cnblogs.com/niujifei/p/11497666.htmlhttps://www.cnblogs.com/niujifei/p/11497692.html转载 2020-08-18 17:29:28 · 100 阅读 · 0 评论 -
小白学Java核心知识(IO流)九:读取键盘录入、读取转换流操作
1、读取键盘录入/*读取键盘录入。System.out:对应的是标准输出设备,控制台。System.in:对应的标准输入设备:键盘。需求:通过键盘录入数据。当录入一行数据后,就将该行数据进行打印。如果录入的数据是over,那么停止录入。*/import java.io.*;class ReadIn{ public static void main(String[] args) throws IOException { InputStream in = System.原创 2020-08-18 16:44:31 · 208 阅读 · 0 评论 -
小白学Java核心知识(IO流)八:拷贝图片、通过缓冲区拷贝MP3文件、自定义缓冲区
1、拷贝图片/*复制一个图片思路:1,用字节读取流对象和图片关联。2,用字节写入流对象创建一个图片文件。用于存储获取到的图片数据。3,通过循环读写,完成数据的存储。4,关闭资源。*/import java.io.*;class CopyPic{ public static void main(String[] args) { FileOutputStream fos = null; FileInputStream fis = null; try { f原创 2020-08-18 15:13:40 · 226 阅读 · 0 评论 -
小白学Java核心知识(IO流)七:自定义装饰类、行号LineNumberReader类、自定义行号LineNumber类
1、自定义装饰类需要注意:一:Reader代替Filereader装饰一组类.缓冲区MyBufferedReader接收Reader对象r,加强r的方法.二:覆盖Reader类中的抽象方法。因为 MyBufferedReader缓冲区继承了Reader类,所以要覆盖Reader的抽象方法,不然会编译失败。三:String line = null;//line作为一个变量容器,记录住读取的数据内容。/*明白了BufferedReader类中特有方法readLine的原理后,可以自定义一个类中包含原创 2020-08-17 22:55:54 · 917 阅读 · 0 评论 -
小白学Java核心知识(IO流)六:装饰设计模式、装饰与继承的区别
1、装饰设计模式/*装饰设计模式:当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能。那么自定义的该类称为装饰类。装饰类通常会通过构造方法接收被装饰的对象。并基于被装饰的对象的功能,提供更强的功能。*/class Person{ public void chifan() { System.out.println("吃饭"); }}class SuperPerson { private Person p ; SuperP原创 2020-08-17 19:31:45 · 123 阅读 · 0 评论 -
小白学Java核心知识(IO流)五:通过缓冲区复制文本文件、readline原理图、自定义缓冲区
1、通过缓冲区复制文本文件/*通过缓冲区复制一个.java文件。*/import java.io.*;class CopyTextByBuf{ public static void main(String[] args) { BufferedReader bufr = null; BufferedWriter bufw = null; try { bufr = new BufferedReader(new FileReader("BufferedWriter原创 2020-08-17 18:56:14 · 203 阅读 · 0 评论 -
小白学Java核心知识(IO流)四:BufferedWriter、BufferedReader
1、BufferedWriter/*缓冲区的出现是为了提高流的操作效率而出现的。所以在创建缓冲区之前,必须要先有流对象。该缓冲区中提供了一个跨平台的换行符。newLine();*/import java.io.*;class BufferedWriterDemo{ public static void main(String[] args) throws IOException { //创建一个字符写入流对象。 FileWriter fw = new FileWr原创 2020-08-16 22:14:11 · 106 阅读 · 0 评论 -
小白学Java核心知识(IO流)三:文件的续写、文本文件读取方式及练习、拷贝文本文件
1、文件的续写/*演示对已有文件的数据续写。*/import java.io.*;class FileWriterDemo3{ public static void main(String[] args) throws IOException { //传递一个true参数,代表不覆盖已有的文件。并在已有文件的末尾处进行数据续写。 FileWriter fw = new FileWriter("demo.txt",true); fw.write("nihao\r\nxiexi原创 2020-08-16 21:12:16 · 169 阅读 · 0 评论 -
小白学Java核心知识(IO流)二:IO异常处理
需要注意:一、FileWriter fw = null;建立引用,让fw成为全局变量。否则若FileWriter fw = new FileWriter(“demo.txt”);在try代码块内,则fw变量只在try代码块内有效,只是一个局部变量。二、fw.close(); 也会发生异常需要单独try catch。三、对于fw = new FileWriter(“k:\demo.txt”);初始化过程,用try语句会抛出异常,一旦抛出异常就代表对象初始化失败,对象就不存在,只能为null。对于引用为原创 2020-08-16 16:38:29 · 199 阅读 · 0 评论 -
小白学Java核心知识(IO流)一:FileWrite的应用
/*字符流和字节流:字节流两个基类:InputStream OutputStream字符流两个基类:Reader Writer先学习一下字符流的特点。既然IO流是用于操作数据的,那么数据的最常见体现形式是:文件。那么先以操作文件为主来演示。需求:在硬盘上,创建一个文件并写入一些文字数据。找到一个专门用于操作文件的Writer子类对象。FileWriter。 后缀名是父类名。 前缀名是该流对象的功能。*/import java.io.*;class Fi原创 2020-08-16 16:23:54 · 149 阅读 · 0 评论 -
小白学Java核心知识(其他对象)三:Date的应用、Calender的应用、Math-Random的应用
1、Date的应用import java.util.*;import java.text.*;class DateDemo { public static void main(String[] args) { Date d = new Date(); System.out.println(d);//打印的时间看不懂,希望有些格式。 //将模式封装到SimpleDateformat对象中。 SimpleDateFormat sdf = new SimpleDateFormat原创 2020-08-16 16:22:26 · 98 阅读 · 0 评论 -
小白学java核心知识(其他对象)二:Runtime类以及exec()方法的应用
/*Runtime对象该类并没有提供构造函数。说明不可以new对象。那么会直接想到该类中的方法都是静态的。发现该类中还有非静态方法。说明该类肯定会提供了方法获取本类对象。而且该方法是静态的,并返回值类型是本类类型。由这个特点可以看出该类使用了单例设计模式完成。该方式是static Runtime getRuntime();*/class RuntimeDemo{ public static void main(String[] args) throws Exception原创 2020-08-16 16:17:07 · 152 阅读 · 0 评论 -
小白学Java核心知识(其他对象)一:System以及Properties的应用
/*System:类中的方法和属性都是静态的。out:标准输出,默认是控制台。in:标准输入,默认是键盘。描述系统一些信息。获取系统属性信息:Properties getProperties();*/import java.util.*;class SystemDemo { public static void main(String[] args) { Properties prop = System.getProperties(); //因为Properti原创 2020-08-14 21:27:10 · 117 阅读 · 0 评论 -
小白学Java核心知识(集合框架)十二:扩展知识高级for循环、静态导入、可变参数、binarysearch、synlist、array、reverse、reverseorder等
1、collections/*集合框架的工具类。Collections:集合框架的工具类。里面定义的都是静态方法。Collections和Collection有什么区别?Collection是集合框架中的一个顶层接口,它里面定义了单列集合的共性方法。 它有两个常用的子接口, List:对元素都有定义索引。有序的。可以重复元素。 Set:不可以重复元素。无序。Collections是集合框架中的一个工具类。该类中的方法都是静态的 提供的方法中有可以对list集合进行排序,二分查原创 2020-08-14 19:32:50 · 122 阅读 · 0 评论 -
小白学Java核心知识(集合框架)十一:一对多映射关系练习、利用List集合解决一对多映射关系
/*map扩展知识。map集合被使用是因为具备映射关系。"yureban" Student("01" "zhangsan");"yureban" Student("02" "lisi");"jiuyeban" "01" "wangwu";"jiuyeban" "02" "zhaoliu";一个学校有多个教室。每一个教室都有名称。*/import java.util.*;class Student{ private String id; private Strin原创 2020-08-13 23:02:55 · 264 阅读 · 0 评论 -
小白学Java核心知识(集合框架)十: TreeMap练习-字母出现的次数
/*练习:"sdfgzxcvasdfxcvdf"获取该字符串中的字母出现的次数。希望打印结果:a(1)c(2).....通过结果发现,每一个字母都有对应的次数。说明字母和次数之间都有映射关系。注意了,当发现有映射关系时,可以选择map集合。因为map集合中存放就是映射关系。什么使用map集合呢?当数据之间存在这映射关系时,就要先想map集合。思路:1,将字符串转换成字符数组。因为要对每一个字母进行操作。2,定义一个map集合,因为打印结果的字母有顺序,所以使用treem原创 2020-08-13 22:20:53 · 262 阅读 · 0 评论 -
小白学java核心知识(集合框架)九:Map子类对象的特点、keyset、entryset、Map练习、TreeMap练习
1、Map子类对象的特点/*Map集合:该集合存储键值对。一对一对往里存。而且要保证键的唯一性。 1,添加。 put(K key, V value) putAll(Map<? extends K,? extends V> m) 2,删除。 clear() remove(Object key) 3,判断。 containsValue(Object value) containsKey(Object key) isEmpty() 4,获取原创 2020-08-13 21:07:57 · 136 阅读 · 0 评论 -
小白学Java核心知识(集合框架)八:map集合概述、子类对象的概述、共性方法
map集合概述、子类对象的概述、共性方法/*Map集合:该集合存储键值对。一对一对往里存。而且要保证键的唯一性。 1,添加。 put(K key, V value) putAll(Map<? extends K,? extends V> m) 2,删除。 clear() remove(Object key) 3,判断。 containsValue(Object value) containsKey(Object key) isEmpty()原创 2020-08-13 14:24:51 · 81 阅读 · 0 评论 -
小白学Java核心知识(集合框架)七:泛型概述、使用、泛型类、泛型方法、静态泛型方法、泛型接口、泛型限定
1、泛型概述import java.util.*;/*泛型:JDK1.5版本以后出现新特性。用于解决安全问题,是一个类型安全机制。好处1.将运行时期出现问题ClassCastException,转移到了编译时期。,方便于程序员解决问题。让运行时问题减少,安全。,2,避免了强制转换麻烦。泛型格式:通过<>来定义要操作的引用数据类型。在使用java提供的对象时,什么时候写泛型呢?通常在集合框架中很常见,只要见到<>就要定义泛型。其实<> 就是用来接收类原创 2020-08-13 14:23:42 · 139 阅读 · 0 评论 -
小白学Java核心知识(集合框架)六:Treeset集合、实现Compartor比较器(接口)、练习
1、TreeSet概述、存储自定义对象import java.util.*;/*Set:无序,不可以重复元素。 |--HashSet:数据结构是哈希表。线程是非同步的。 保证元素唯一性的原理:判断元素的hashCode值是否相同。 如果相同,还会继续判断元素的equals方法,是否为true。 |--TreeSet:可以对Set集合中的元素进行排序。 底层数据结构是二叉树。 保证元素唯一性的依据: compareTo方法return 0. Tr原创 2020-08-12 15:30:38 · 158 阅读 · 0 评论 -
小白学Java核心知识(集合框架)五:Hashset框架、练习
1、Hashet框架import java.util.*;/*|--Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。、 |--HashSet:底层数据结构是哈希表。是线程不安全的。不同步。 HashSet是如何保证元素唯一性的呢? 是通过元素的两个方法,hashCode和equals来完成。 如果元素的HashCode值相同,才会判断equals是否为true。 如果元素的hashcode值不同,不会调用equals。 注意,对于判断元素是否存在,以原创 2020-08-12 11:45:45 · 106 阅读 · 0 评论 -
小白学java核心知识(集合框架)四:ArrayList练习1、练习2
练习1import java.util.*;/*去除ArrayList集合中的重复元素。*/class ArrayListTest { public static void sop(Object obj) { System.out.println(obj); } public static void main(String[] args) { ArrayList al = new ArrayList(); al.add("java01"); al.add("原创 2020-08-11 21:19:11 · 110 阅读 · 0 评论 -
小白学java核心知识(集合框架)三:Linkedlist与练习
1、Linkedistimport java.util.*;/*LinkedList:特有方法:addFirst();addLast();getFirst();getLast();获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementExceptionremoveFirst();removeLast();获取元素,但是元素被删除。如果集合中没有元素,会出现NoSuchElementException在JDK1.6出现了替代方法。offerFirst原创 2020-08-11 20:24:19 · 108 阅读 · 0 评论 -
小白学Java核心知识(集合框架)二:集合框架的共性方法
import java.util.*;/*Collection定义了集合框架的共性功能。1,添加 add(e); addAll(collection);2,删除 remove(e); removeAll(collection); clear();3,判断。 contains(e); isEmpty();4,获取 iterator(); size();5,获取交集。 retainAll();6,集合变数组。 toArray();1,add方法的参数类型原创 2020-08-11 16:19:19 · 115 阅读 · 0 评论 -
小白学Java核心知识(集合框架)一:List集合共性方法、ListIterator
ListIterator需要注意:一、迭代器Iterator不能与ArrayList同时对同一组元素进行操作,否则有可能会引发并发修改异常。二、迭代器Iterator没有添加功能,但是Iterator的子接口ListIterator有添加元素功能。/*Collection |--List:元素是有序的,元素可以重复。因为该集合体系有索引。 |--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。 |--LinkedList:底层使用的链表数原创 2020-08-11 16:17:47 · 98 阅读 · 0 评论 -
小白学Java核心知识点(多线程)十二:多线程运行与匿名内部类的结合
用Thread 匿名内部类、Runable接口匿名内部类的方式建立线程,让三个方法同时运行。class ThreadTest { public static void main(String[] args) { new Thread() { public void run() { for(int x=0; x<100; x++) { System.out.println(Thread.currentThread().getName()+".原创 2020-08-08 16:41:51 · 91 阅读 · 0 评论 -
小白学java核心知识点(多线程)十一:多线程中的join 方法、yield方法
/*join:当A线程执行到了B线程的.join()方法时,A就会等待。等B线程都执行完,A才会执行。join可以用来临时加入线程执行。*/class Demo implements Runnable{ public void run() { for(int x=0; x<70; x++) { System.out.println(Thread.currentThread().toString()+"....."+x); Thread.yield();原创 2020-08-08 16:18:21 · 114 阅读 · 0 评论 -
小白学Java核心知识(多线程)知识点十:interrupt停止线程、守护线程
/*stop方法已经过时。如何停止线程?只有一种,run方法结束。开启多线程运行,运行代码通常是循环结构。只要控制住循环,就可以让run方法结束,也就是线程结束。特殊情况:当线程处于了冻结状态。就不会读取到标记。那么线程就不会结束。当没有指定的方式让冻结的线程恢复到运行状态是,这时需要对冻结进行清除。强制让线程恢复到运行状态中来。这样就可以操作标记让线程结束。Thread类提供该方法 interrupt();*/class StopThread implement原创 2020-08-08 16:00:36 · 121 阅读 · 0 评论 -
小白学Java核心知识点(多线程)九:线程间的通信(生产者与消费者)及jdk5.0新特性
线程间的通信(消费者与生产者)class ProducerConsumerDemo { public static void main(String[] args) { Resource r = new Resource(); Producer pro = new Producer(r); Consumer con = new Consumer(r); Thread t1 = new Thread(pro); Thread t2 = new Thread(pro); T原创 2020-08-08 14:57:06 · 135 阅读 · 0 评论 -
小白学Java核心知识点(多线程)八:多线程等待唤醒机制以及代码优化
/*线程间通讯:其实就是多个线程在操作同一个资源,但是操作的动作不同。*/class Res{ String name; String sex; boolean flag = false;}class Input implements Runnable{ private Res r ; Input(Res r) { this.r = r; } public void run() { int x = 0; while(true) { synchro原创 2020-08-08 10:36:45 · 136 阅读 · 0 评论 -
小白学java核心知识(多线程)六:死锁
需要注意:死锁:就是同步中嵌套同步。class Test implements Runnable{ private boolean flag; Test(boolean flag) { this.flag = flag; } public void run() { if(flag) { while(true) { synchronized(MyLock.locka) { System.out.println(Thread.currentT原创 2020-08-06 23:03:48 · 92 阅读 · 0 评论 -
小白学Java核心知识(多线程)单例设计模式五:懒汉式
需要注意:一、多线程里面使用的锁是静态函数的锁,对象是类名.class二、懒汉式单例设计模式能可以使用双重判断来提高多线程的效率。三、懒汉式与饿汉式的区别是懒汉式会延迟加载。/*单例设计模式。*///饿汉式。/*class Single{ private static final Single s = new Single(); private Single(){} public static Single getInstance() { return s; }}*原创 2020-08-06 22:40:03 · 96 阅读 · 0 评论 -
小白学java核心知识(多线程)四:同步函数的锁是this,静态方法的同步锁的对象是类名.class或类名.静态成员引用
/*同步函数用的是哪一个锁呢?函数需要被对象调用。那么函数都有一个所属对象引用。就是this。所以同步函数使用的锁是this。通过该程序进行验证。使用两个线程来买票。一个线程在同步代码块中。一个线程在同步函数中。都在执行买票动作。*/class Ticket implements Runnable{ private int tick = 100; Object obj = new Object(); boolean flag = true; public voi.原创 2020-08-06 22:24:57 · 649 阅读 · 0 评论