![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java基础
文章平均质量分 56
没有阳光,也一样灿烂
吃个柚子、写段代码
展开
-
Java循环结构:while循环、for循环
while循环While是最基本的循环结构,语法为:while(布尔表达式){ //循环语句块}public class LoopWhile01 { public static void main(String[] args) { //使用while循环输出1~100 int x=0; while (x<100){ x++; System.out.println(x);原创 2021-06-01 16:38:41 · 205 阅读 · 1 评论 -
Java 多线程(Java.Thread)----- 使用线程池
使用线程池背景:经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影响很大思路:提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中;可以避免频繁创建销毁、实现重复利用好处:提高响应速度(减少了创建新线程的时间)降低资源消耗(重复利用线程池中的线程,不需要每次都创建)便于线程管理corePoolSize:核心池的大小maximumPoolSize:最大线程数keepAliveTime:线程再没有任务时最多保持多长时间后会终止JDK ..原创 2020-12-13 15:40:30 · 101 阅读 · 1 评论 -
Java 多线程(Java.Thread)------ 线程协作(生产者消费者模式)
线程协作应用场景:生产者消费者模式假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中产品取走消费如果仓库中没有产品,则生产者将产品放入仓库,否则停止生产并等待,直到仓库中的产品被消费者取走为止如果仓库中放有产品,则消费者可以将产品直接取走,否则停止消费并等待,直到仓库中再次放入产品为止分析:这是一个线程同步问题,生产者和消费者共享同一个资源,并且生产者和消费者相互依赖,互为条件在生产者和消费者问题中,仅有synchronized是不够的synchron原创 2020-12-13 15:39:36 · 88 阅读 · 0 评论 -
Java 多线程(Java.Thread)----- 死锁和Lock锁
死锁多个线程各自占用一些共享资源,并且互相等待其他线程占有的资源才能运行,而导致两个或者多个线程都在等待对方释放资源,都停止执行的情形。某一个同步块同时拥有“两个以上对象的锁”时,就可能会发生“死锁”的问题产生死锁的四个必要条件:互斥条件:一个资源每次只能被一个进程使用请求与保持条件:一个进程因请求资源而阻塞时,对方获得的资源保持不放不剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系破解死锁只需要破解以上任意一个或多个原创 2020-12-13 15:37:04 · 187 阅读 · 0 评论 -
Java 多线程(Java.Thread)----线程同步(并发问题处理)
线程同步并发并发:同一个对象被多个线程同时操作:多人同时抢1张票、多人同时在一个账号里取钱//并发问题举例1://不安全的买票:会出现负数、0、不同的人抢到同一张表package www.bh.c.threadtest;public class BuyTickets implements Runnable{ public static void main(String[] args) { BuyTickets buyTickets = new BuyTickets(原创 2020-12-13 15:35:00 · 328 阅读 · 7 评论 -
Java 多线程(Java.Thread)-----线程状态观测(Thread.State)、线程优先级和守护线程(daemon)
线程状态观测(Thread.State)new、runnable、blocked、waiting、timed waiting、terminatedpackage www.bh.c.threadtest;public class StateTest { public static void main(String[] args) { Thread thread=new Thread(()->{ try {原创 2020-12-13 15:32:04 · 79 阅读 · 0 评论 -
Java 多线程(Java.Thread)-----线程休眠(Thread.Sleep)、线程礼让(Thread.Yield)和线程阻塞(Thread.Join)
线程休眠(Thread.Sleep)sleep(时间)指定当前线程阻塞的毫秒数sleep存在异常InterruptedExceptionsleep时间达到后线程进入就绪状态sleep可以模拟网络延时,倒计时等每一个对象都有一个锁,sleep不会释放锁//模拟网络延时package www.bh.c.threadtest;public class ThreadSleepTest implements Runnable { //票数 private int ticket=1原创 2020-12-13 15:30:10 · 214 阅读 · 0 评论 -
Java 多线程(Java.Thread)------线程状态和线程方法
线程五大状态创建状态:Thread t=new Thread();线程对象一旦创建就进入到新生状态(new)就绪状态:调用start()方法时,线程进入就绪状态,但不意味着立即调度执行阻塞状态:当调用sleep、wait或同步锁定时,线程进入阻塞状态,就是代码不往下执行,阻塞事件解除后,重新进入就绪状态,等待cpu调度执行运行状态:进入运行状态,线程才真正执行线程体的代码块死亡状态:线程中断或者结束,一旦进入死亡状态,就不能再次启动线程方法setPriority(in原创 2020-12-13 15:27:52 · 62 阅读 · 0 评论 -
Java 多线程(Java.Thread)------Lamda(λ)表达式详述
Lamda(λ)表达式为什么要使用lambda表达式避免匿名内部类定义过多让代码更简洁其实质属于函数式编程的概念(params)–>expression[表达式](params)–>statements[语句](params)–>{statements}函数式接口的定义:如果一个接口包含一个唯一的抽象方法,那么就是一个函数式接口public interface Runnable{ public abstract void run原创 2020-12-09 19:59:26 · 807 阅读 · 0 评论 -
Java 多线程(Java.Thread)----- 静态代理
静态代理/*真实对象和代理对象都要实现同一个接口代理对象要代理真实角色好处:1.代理对象可以做很多真实对象做不了的事情2.真实对象专注做自己的事情*/package www.bh.c.threadtest;public class Test6 { public static void main(String[] args) { You you = new You();//实例化结婚对象:你 //代理对象接收真实对象 WaddingC原创 2020-12-09 19:53:57 · 98 阅读 · 0 评论 -
Java 多线程(Java.Thread)的创建(Thread、Runnable、Callable三种方式)详述
线程简介普通方法调用和多线程的区别普通方法调用:只有主线程一条执行路径多线程:多条执行路径,主线程和子线程并行交替执行进程和线程程序:指令和数据的有序集合进程(Process):在操作系统中运行的程序,执行程序的一次执行过程。是系统资源分配的单位线程(Thread):一个进程可以有多个线程,线程是CPU调度和执行的单位注:1.真正的多线程是指有多个cpu,即多核。如果是模拟出来的多线程,即在一个cpu的情况下,在同一个时间点,cpu只能执行一个代码,因为切换的原创 2020-12-09 19:52:48 · 101 阅读 · 0 评论 -
Java IO流-------RabdomAccessFile类总结
RabdomAccessFile类RabdomAccessFile声明在java.io包下,但直接继承于java.lang.Object类,并且实现了DataInput和DataOutput这两个接口,也就是说这个类既可以读也可以写RabdomAccessFile类支持“随机访问”的方式,程序可以直接跳到文件的任意地方来读、写文件RabdomAccessFile对象包含一个记录指针,用来标识当前读写处的位置long getFilePointer():获取文件记录指针的当前位置void seek原创 2020-12-03 18:59:13 · 147 阅读 · 0 评论 -
Java IO流------对象流总结
对象流对象流也是处理流的一种,包括ObjectInputStream和ObjectOutputStream对象流用于读取和存储基本数据类型的数据或者对象,即可以将Java中的对象写到数据源中,也可以把对象从数据源中还原回来序列化:用ObjectOutputStream类保存基本数据类型或对象的机制反序列化:用ObjectInputStream类读取基本数据类型数据或对象的机制//序列化过程:将内存中的java对象保存到磁盘中或通过网络传输出去//使用ObjectOutputStream实现原创 2020-12-03 18:58:37 · 170 阅读 · 0 评论 -
Java IO流------标准输入输出流、打印流和数据流总结
标准输入输出流标准输入、输出流也是处理流之一System.in和System.out分别代表了系统标准的输入和输出设备默认输入设备:键盘;输出设备:显示器(控制台)System类的setIn(InputStream is)/ setOut(printStream ps)方式重新指定输入和输出/*从键盘输入字符串,要求将读取到的整行字符串转成大写输出,然后继续进行输入操作,直至当输入“e”或者“exit”时,退出程序方法一:使用Scanner实现,调用next()返回一个字符串方法二:使用原创 2020-12-03 18:57:40 · 165 阅读 · 0 评论 -
Java IO流-------转换流(字符编码)详述
转换流转换流也是处理流的一种,提供了在字节流和字符流之间的转换Java API提供的两个转换流InputStreamReader:将InputStream转换为Reader,即将一个字节的输入流转换为字符的输入流(解码)package www.bh.c.iotest;import java.io.*;public class Test12 { public static void main(String[] args) { InputStreamReader原创 2020-12-02 16:35:36 · 204 阅读 · 0 评论 -
Java IO流-----缓冲流详述
缓冲流处理流:缓冲流为处理流的一种,处理流,即“套装”在已有的流的基础上缓冲流动的作用:提高流的读取、写入的速度提高读写速度的原因:内部提供了一个缓冲区BufferedInputStreamBufferedOutputStreampackage www.bh.c.iotest;import java.io.*;public class Test8 { public static void main(String[] args) { Buffe原创 2020-12-02 16:34:13 · 78 阅读 · 0 评论 -
Java IO流-----节点流(文件流)说明
节点流(文件流)字符流FileReaderpackage www.bh.c.iotest;import java.io.File;import java.io.FileReader;import java.io.IOException;public class Test1 { public static void main(String[] args) { /* 将calss下的hello.txt文件内容读入到内存中,并输出到控制台原创 2020-12-02 16:32:42 · 116 阅读 · 0 评论 -
Java IO流原理及流的分类
IO流原理及流的分类Java IO原理I/O是Input/Output的缩写,用于处理设备之间的数据传输;如读/写文件,网络通讯等输入Input:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中输出Output:将程序(内存)数据输出到磁盘、光盘等存储设备中Java程序中,对于数据的输入/输出操作以“流(stream)”的方式进行java.io包下提供了各种“流”类和接口,用以获取不同种类的数据,并通过标准的方法输入或输出数据流的分类按操作数据单位的不同分:字节流(8原创 2020-12-02 16:30:18 · 103 阅读 · 0 评论 -
Java File类构造器和常用方法说明
Java File类概述java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关File能新建、删除、重命名文件和目录,但不能访问文件内容本身,访问文件内容本身,需要使用输入/输出流想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对象,但是Java程序中的一个对象,可能没有一个真实存在的文件或目录File对象可以作为参数传递给流的构造器常用构造器public File(String pathname)package www.bh.c.file原创 2020-12-02 16:15:41 · 482 阅读 · 1 评论 -
Java 泛型的应用举例说明
泛型应用题目:/*- 定义一个泛型类DAO<T>,在其中定义一个Map成员变量,Map的键为String类型,值为T类型- 分别创建以下方法: - public void save(String id,T entity):保存T类型的对象到Map成员变量中 - public T get(String id):从Map中获取id对应的对象 - public void update(String id,T entity):替换map中key为id的内容,改为entity对象 -原创 2020-11-27 16:14:25 · 212 阅读 · 0 评论 -
java 泛型在继承上的体现和通配符的使用
泛型在继承上的体现 //类A是类B的父类,但G<A>和G<B> 二者不具备子父类关系,二者是并列关系package www.bh.c.genetest;import java.util.List;public class Test6 { public static void main(String[] args) { List<Object> list1=null; List<String> list2=nul原创 2020-11-27 16:11:07 · 193 阅读 · 0 评论 -
Java 自定义泛型结构(泛型类、泛型接口和泛型方法)说明和使用举例
自定义泛型结构package www.bh.c.genetest;//自定义泛型类public class Test2<E> { String testName; int testAge; //类的内部结构就可以使用类的泛型 E testT; public Test2() { } public Test2(String testName, int testAge, E testT) { t原创 2020-11-27 16:07:49 · 309 阅读 · 0 评论 -
Java 泛型的作用和集合中使用泛型
泛型的作用泛型:类似于标签标签集合容器类在设计阶段/声明阶段不能确定这个容器是用来装什么类型的对象,所以在jdk1.5之前只能把元素类型设计为Object,在jdk1.5之后使用泛型来解决故把元素的类型设计成一个参数,叫泛型,如:Cllection、List,其中的就是类型参数,即泛型所谓泛型,就是允许在定义类、接口时通过一个标识标识类中某个属性的类型或者是某个方法的返回值及参数类型;这个类型参数将在使用时确定泛型的作用在集合中未使用泛型时:package www.bh原创 2020-11-27 15:59:14 · 350 阅读 · 0 评论 -
Collections工具类常用方法和使用介绍
Collections工具类Collections是一个操作Set、list和Map等集合的工具类Collections中提供了一系列静态的方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象设置不可变、对集合对象实现同步控制等方法Collections常用方法reverse(List):反转List中元素的顺序package www.bh.c.maptest;import java.util.ArrayList;import java.util.Collections;p原创 2020-11-27 15:55:19 · 283 阅读 · 0 评论 -
Java Map接口和Map接口实现类(hashMap、LinkedHashMap、TreeMap、Hashtable、Properties)
Map接口Map的实现类的结构Map:双列数据,存储key-value对的数据hashMap:Map的主要实现类:线程不安全,效率高,可以存储null的key和valueLinkedHashMap:作为HashMap的子类,遍历map元素时,可以按照添加的顺序实现遍历(LinkedHashMap在原有的HashMap底层结构基础上,添加了一堆指针,指向前一个和后一个元素,所以对于频繁的遍历操作,此类的执行效率高于HashMap)TreeMap:可以按照添加的key-value对进行原创 2020-11-25 17:57:59 · 142 阅读 · 0 评论 -
JavaSet接口实现类(hashSet、LinkedHashSet、TreeSet),附两道常见面试题
Collection子接口二:SetSet接口是Collection的子接口,Set接口没有提供额外的方法,直接调用Collection的方法就可以Set集合中不允许添加相同的元素Set判读两个对象是否相同不是使用==运算符,而是根据equals方法Set:元素无序、不可重复的集合hashSet:Set接口的主要实现类:线程不安全,可以存储null值LinkedHashSet:作为HashSet的子类,遍历其内部数据时,可以按照添加的顺序遍历TreeSet:可以按照添加原创 2020-11-25 17:51:46 · 190 阅读 · 0 评论 -
Java List接口实现类(ArrayList、LinkedList、Vector)简述
Collection子接口一:List通常用List替代数组List集合类中的元素都是有序、可重复的,集合中的每个元素都有其对应的顺序索引JDK API中List接口实现类常用的有:ArrayList、LinkedList、VectorArrayList、LinkedList、Vector的异同点:同:三个类都实现了List接口,存储数据的特点相同:存储有序的、可重复的数据异:ArrayList:为List的主要实现类,线程不安全,效率高:底层使用Object[] elemen原创 2020-11-20 16:48:48 · 132 阅读 · 0 评论 -
Java Iterator迭代器和常用方法简介
Iterator迭代器接口Iterator接口主要用于遍历集合元素集合对象每次调用iterator()方法都会得到一个全新的迭代器对象,默认游标都在几个的第一个元素之前遍历集合元素的方法:package www.bh.c.collectiontest;import java.util.ArrayList;import java.util.Collection;import java.util.Date;import java.util.Iterator;public class It原创 2020-11-20 16:41:54 · 303 阅读 · 0 评论 -
Java集合框架概述和Collection接口常用方法
Java集合框架概述Java集合也称为容器,可以动态地把多个对象的引用放到容器中数据存储多个数据的特点:一旦初始化以后,其长度就确定了数组一旦定义好,其类型也就确定了,也就只能操作指定类型的数据了,比如String[] arr;int[] arr1数组存储多个数据的缺点:一旦初始化后,长度便不可修改数组中提供的方法有限,效率也不高获取数组中实际元素的个数的需求,数组没有现成的属性或方法可用数组存储数据的特点:有序、可重复;对于无序、不可重复的需求,不能满足Java原创 2020-11-20 09:58:49 · 97 阅读 · 0 评论 -
Java枚举类
Java枚举类 定义枚举类枚举类的使用:定义:类的对象只有有限个,确定的,称此类为枚举类当需要定义一组常量时,使用枚举类会很方便如果枚举类中只有一个对象,则可以作为单例模式的实现方式定义枚举类方式一:jdk5.0之前,自定义枚举类package www.bh.c.enumtest;public class Test1 { public static void main(String[] args) { Season spring = Seaso原创 2020-11-18 18:30:10 · 80 阅读 · 0 评论 -
Java JDK8新日期时间API(LocalDate、LocalTime、LocalDateTime类和比较器说明)
Java JDK8新日期时间API(LocalDate、LocalTime、LocalDateTime类)JDK8之前日期时间API存在的问题:可变性:一般需要的日期和时间这样的类应该是不可变的偏移性:Date中的年份是从1900年开始的,而月份都是从0开始的package www.bh.c.datanewtest;import java.util.Date;public class Test01 { public static void main(String[] args原创 2020-11-17 18:33:06 · 504 阅读 · 0 评论 -
Java中与日期时间相关的类(JDK8之前)
Java中与日期时间相关的类(JDK8之前)java.lang.System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差currentTimeMillis()适合于计算时间差package www.bh.c.datetest;public class Test01 { public static void main(String[] args) { long原创 2020-11-17 18:29:31 · 129 阅读 · 0 评论 -
Java字符串(String)相关的类:String、StringBuffer、StringBuilder
Java字符串(String)相关的类String类及常用方法String类String的特性String类:代表字符串。Java程序中的所有字符串字面值(如"abc")都作为此类的实例实现String类是一个final类,代表不可变的字符序列字符串是常量,用双引号引起来表示,它们的值在创建后不可更改String对象的字符内容是储存在一个字符组value[]中的public final class String implements java.io.Serializable, java.原创 2020-11-10 18:01:29 · 289 阅读 · 0 评论 -
Java 内部类
Java 内部类内部类即在一个类的内部再定义一个类,比如,在A类中定义了一个B类,那么B类相对于A类来说就是内部类,而A类相对于B类来说就是外部类成员内部类package oop.demo06;public class Demo01 { //定义一个私有属性 private int age=20; //定义一个方法 public void out(){ System.out.println("外部类的一个方法"); } //定原创 2020-11-06 18:24:53 · 42 阅读 · 0 评论 -
Java抽象类和接口
Java抽象类和接口抽象类抽象的关键词是:abstract,当用来修饰方法的时候,方法为抽象方法;当用来修饰类的时候,类为抽象类package oop.demo05;//abstract,抽象类,抽象类只能单继承//被继承后由子类实现具体事务public abstract class Demo01 { //抽象方法,只有方法名字,没有方法体 public abstract void method();}//抽象类和抽象方法用来约束,让子类必须去实现在一个抽象类中可原创 2020-11-06 18:20:21 · 53 阅读 · 0 评论 -
Java static关键字详解
Javastatic关键字详解静态的变量package oop.demo04;public class Demo01 { private static int age=20;//静态的变量,static private String name="少年";//非静态的变量 public static void main(String[] args) { Demo01 d= new Demo01(); //静态的变量可以直接调用,不需要实例原创 2020-11-06 08:49:42 · 55 阅读 · 0 评论 -
Java instanof关键字详解
Java instanof关键字详解instanof和类型转换instanof主要用于判断引用类型之间的关系(类型转换)引用类型,判断一个对象是什么类型package oop.demo03;//父类public class Student {}package oop.demo03;//子类Highpublic class High extends Student {}package oop.demo03;//子类Juniorpublic class Junior exte原创 2020-11-06 08:44:00 · 285 阅读 · 0 评论 -
Java面向对象的三大特性(封装、继承、多态)
Java面向对象的三大特性(封装、继承、多态)封装程序设计要向“高内聚,低耦合”方向努力。高内聚就是累的内部数据操作细节自己完成,不允许外部干涉;低耦合就是暴露少量的方法给外部使用封装:数据细节的隐藏,通常要禁止直接访问一个对象中数据的实际表示,而是通过操作接口来访问,这称作信息隐藏在编程时设计属性为私有,然后编写get/set方法对外调用package oop.demo02;//创建一个类,将对象的属性和方法封装到这个类中public class Demo01 { //属性私有原创 2020-11-05 09:18:33 · 95 阅读 · 0 评论 -
Java面向对象基础
Java面向对象基础面向过程和面向对象编程思想面向过程思想面向过程即按步骤编程,第一步做什么、第二步做什么…面向过程适合处理一些较为简单的问题面向对象思想面向对象以分类的思维模式,思考问题首先会考虑解决问题需要将问题分为哪些类,然后再对类进行单独思考,最后对类下面的细节进行面向过程处理面向对象适合处理复杂的问题,适合处理需要多人进行协作的问题对于处理复杂的项目,为了从宏观上把握、从整体上合理分析,我们需要使用面向对象的思路来分析整个系统;但是在具体到微观操作时,则还是需要原创 2020-11-05 09:13:19 · 57 阅读 · 0 评论 -
Java异常机制详述
Java异常机制异常概述在实际软件程序运行过程中,我们会遇到一些预期之外的事情,比如用户输入格式不对、打开文件的格式不对或者不存在、网络连接失败等,类似这些异常问题,就叫做异常:英文用Exception表示异常发生在程序运行期间,它影响了正常的程序执行流程package exception;public class Demo01 { public static void main(String[] args) { System.out.println(11/0);/原创 2020-11-04 19:33:59 · 44 阅读 · 0 评论