
JavaSE
JavaSE基础学习
陪雨岁岁年年
从放弃到入门
展开
-
JavaSE图画一览
原创 2021-07-17 18:14:03 · 142 阅读 · 0 评论 -
接口、多态
一.接口1.接口的定义和使用 2.接口的成员热原创 2021-06-24 13:41:25 · 118 阅读 · 0 评论 -
继承、抽象
继承、抽象一.继承1.继承解决的问题:共性抽取子类中有共性的内容(成员变量、成员方法)抽取到父类中,子类可以直接使用父类非私有的成员。2.继承的格式public cLass 父类{ //成员变量、构造方法、成员方法}public class 子类 extends 父类{ //成员变量、构造方法、成员方法}3.继承的特点(1)Java只支持单一继承:一个类只能有一个父类。(2)java可以多层继承:父类也可以有自己的父类,且子类可以继承父类的父类注:任何一个类都直接或者间接的继原创 2021-06-24 14:42:02 · 214 阅读 · 0 评论 -
static修饰符
static关键字、代码块二.代码块1.概念代码块其实就是一对{ },根据其放的位置不同,它的特性也不同2.分类(1)构造代码块位置:类中方法外作用:提取构造方法中共性的代码,每次执行构造方法都会执行。(2)静态代码块位置:类中方法外 ,被static修饰作用:随着类的加载而加载,用于数据的初始化,与创建无关系(3)局部代码块位置:方法里面作用:限定变量的作用域,在括号中的变量,出了括号就用不了...原创 2021-06-24 18:30:08 · 143 阅读 · 0 评论 -
多种代码块
代码块1.概念代码块其实就是一对{ },根据其放的位置不同,它的特性也不同2.分类(1)构造代码块位置:类中方法外作用:提取构造方法中共性的代码,每次执行构造方法都会执行。(2)静态代码块位置:类中方法外 ,被static修饰作用:随着类的加载而加载,用于数据的初始化,与创建无关系(3)局部代码块位置:方法里面作用:限定变量的作用域,在括号中的变量,出了括号就用不了public class CodeBlock { //静态代码块 static { ne原创 2021-06-24 18:37:06 · 119 阅读 · 0 评论 -
object面试题
equals方法public class Demo { public static void main(String[] args) { String s1 = "abc"; StringBuilder sb = new StringBuilder("abc"); //System.out.println(sb.append("a")); //s1是字符串,则equals为字符串比较内容, // 由于比较对象不为字符串原创 2021-06-27 11:24:29 · 144 阅读 · 0 评论 -
基本数据类型与字符串的转换
包装类型与字符串的转换1.字符串转化成其他类型口诀:需要转成什么类型就用什么类型的包装类调用方法byte Byteshort Shortint Integerlong Longchar Characterfloat Floatdouble Doubleboolean Boolean2.其他类型转换成字符串方法:(1)String.valueOf;(2) “”+;(3)先转化为包装类再调用其toStri原创 2021-06-27 14:02:43 · 215 阅读 · 0 评论 -
BigDecimal习题
BigDecimal习题1.定义一个double类型的数组double[] array={1.2, 0.6, 0.01, 3.2, 5.56, 7.21};2.使用BigDecimal求数组中元素的平均值,保留2位小数(四舍五入)注意:每一个元素都需要封装为BigDecimal对象,才能进行运算,运算的结果也是BigDecimal对象解法一:将double类型的数组转化为字符串数组,再将字符元素用BigDecimal两两相加,精准计算public class Demo2 { public原创 2021-06-27 14:16:06 · 424 阅读 · 0 评论 -
数据交换方法
数据交换方法一.定义三方变量【代码实现常用】int a=9;int b=10;//定义第三方变量int temp=a;a=b;b=temp;System.out.println("a="+a);//a=10System.out.println("b="+b);//b=9二.基本位运算(^)概念:参加运算的两个数据,按二进制位进行“异或”运算。运算规则:0^0=0; 0^1=1; 1^0=1; 1^1=0;【特点(可应用于面试题):一个数被另一个数异或两次,等于这个原创 2021-06-27 14:36:33 · 113 阅读 · 0 评论 -
匿名内部类与Lambda表达式
匿名内部类与Lambda表达式一.匿名内部类谁没有名字:匿名内部类指的是接口的实现类 或者 抽象类的子类没有名字。1.前提:1)必须要有一个接口、抽象类(普通类也可以,但是方法不会强制重写,不建议)2)格式:new 接口/抽象类(){//复写抽象方法}3)本质:匿名内部类的本质其实是一个接口的实现类【对象】,或者抽象类的子类【对象】2.使用场景:在实际运用中,如果方法的参数是父类类型,那么调用方法时可以传递子类对象,但是为了图省事不想写子类,那么这个时候可以使用匿名内部类。publi原创 2021-06-27 15:05:57 · 740 阅读 · 1 评论 -
匿名内部类与Lambda表达式习题
匿名内部类与Lambda表达式习题1.写一个函数式接口public Operation{public int calc(int a,int b);}在测试类中写一个method方法,参数为Operation和a,bpublic static void method(Operation op)int result = op.calc(a,b);System.out.println(result);}在测试类中写一个main方法,完成下面的需求1)调用method方法,传递Lambda表达原创 2021-06-27 16:08:40 · 278 阅读 · 0 评论 -
二分查找实现
二分查找实现调用Arrays中的binarySearch方法即可实现public class Demo1 { public static void main(String[] args) { int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; //查找元素定为4 int key = 4; int index1 = Arrays.binarySearch(arr, 4); //3原创 2021-06-27 16:52:24 · 84 阅读 · 0 评论 -
冒泡排序、快排实现
冒泡排序实现原创 2021-06-27 18:12:34 · 96 阅读 · 0 评论 -
JDK7的日期时间类
JDK7的日期时间类Date类1.概念Date类表示时间,时间可以精确到毫秒。创建一个Date对象,其实就表示时间的对象2.构造方法和成员方法public class Demo1 { public static void main(String[] args) { //空参构造(将系统当前时间封装为时间对象[毫秒值]) Date date1 = new Date(); System.out.println(date1); //原创 2021-06-29 20:55:01 · 393 阅读 · 0 评论 -
JDK8的日期时间类1
localDateTime类1.分类将时间分成localDate类【年月日]】localTime类【时分秒】localDateTime类【年月日时分秒】2.localDateTime类【常用】(1)构造方法public class Demo1 { public static void main(String[] args) { //localDateTime[天时分秒]三者使用方法一致,它较为常用 //对象获取方法都为静态 //now[原创 2021-06-29 21:23:33 · 97 阅读 · 0 评论 -
JDK8的日期时间类2
1.localDateTime类格式化和解析概念(1)格式化:把localDateTime对象转换为String,需通过DateTimeFormatter对象指定格式(2)解析:把String转换为localDateTime对象,需通过DateTimeFormatter对象指定格式public class Demo4 { public static void main(String[] args) { LocalDateTime ldt = LocalDateTime.now原创 2021-06-29 21:32:32 · 84 阅读 · 0 评论 -
JDK8的日期时间类3
计算两个时间的间隔方法:between【静态方法】1.获取相隔的年月日用Period调用,参数用LocalDate类对象封装的时间2.获取相隔的天年月日用Duration调用,参数用LocalDateTime类对象封装的时间//计算两个时间的间隔public class Demo7 { public static void main(String[] args) { //Period[年月日],需要LocalDate对象 LocalDateTime ldt1原创 2021-06-29 21:41:11 · 145 阅读 · 0 评论 -
处理可能发生的异常
什么是异常?异常指的时程序在【编译】和【运行时】的一些不正常的状况。 Java的工程师其实早就想到可能会出现这些问题,他们把常见的问题写成类。 当我们出现这些异常时,可以根据API中去查找这些异常产生的原因。ArrayIndexOutOfBoundsException: 数组索引越界异常NullPointerException: 空指针异常…异常的体系结构?异常的根类Throwable,它下面有两个子类Error和ExceptionThrowable– Error: 非常严重的问题(..原创 2021-06-30 11:18:01 · 71 阅读 · 0 评论 -
自定义异常类
如果产生一个异常?//在写一个方法时,由于不能确定调用者传递的参数是否正确,所以在方法内部需要对参数进行有效性的校验//如果不符合要求,就给调用者产生一个异常。public static void method(参数) throws 异常类{if(参数校验){//产生一个异常throw new 异常对象(); //如果产生的是编译时异常,就需要在方法上声明}//一般API中的方法,在正式执行方法功能代码之前,会做很多有效性的校验(丑话说在前头)}自定义异常?异常类其实就是描述问..原创 2021-06-30 11:19:35 · 161 阅读 · 0 评论 -
单双列集合总述
Collection[单列集合]接口有List 和 Set子接口 和Map接口[双列集合]并列**1.**List接口 实现类:ArrayList 和 LinkedList 特点:有序,可重复,有对索引的增删改查相对操作的方法ArrayList:底层为数组 查询快[根据地址和索引查找],增删慢LinkedList:底层为链表 查询慢,增删快[直接修改地址指向]**2.**Set接口 实现类:TreeSet 和 HashSet 特点:无序,不可重复,没有特有方法,全部继承父类TreeS原创 2021-07-02 20:44:03 · 174 阅读 · 0 评论 -
单列集合List的实现类
List接口 [Collection】的子类1.ArrayList【查询快,增删慢】(1)ArrayList常见方法【部分】//list[Collection的子类,也是接口],ArrayList也是其实现类public class Demo2 { public static void main(String[] args) { List<String> list =new ArrayList<>(); //ArrayList<S原创 2021-07-02 21:08:34 · 290 阅读 · 0 评论 -
泛型的使用
泛型概述1.使用场景Java中如果在写代码的时候,不知道数据类是什么类型,那么就可以使用泛型。泛型其实就是任意的数据类型。2.泛型的使用a.【泛型类】类上的泛型: 创建该类对象时,确定的数据类型。b.【泛型方法】方法上的泛型:调用方法的时候,确定的数据类型。c.【泛型接口】接口上的泛型:1)在实现类上确定的数据类型2)把泛型沿用到实现类上,在创建实现类对象来确定的数据类型3.通配符?: 表示任意的类型【使用时不用定义】? extends Number: Number或者Number原创 2021-07-02 21:30:49 · 124 阅读 · 0 评论 -
List集合相关应用
1.定义一个Collection类型的集合,存储以下字符串:“JavaEE企业级开发指南”,“Oracle高级编程”,“MySQL从入门到精通”,“Java基础教程”完成以下功能1.删除书名字符小于10个的元素,并打印2.打印书名中包含“Java”的元素public class Demo5 { public static void main(String[] args) { ArrayList<String> list = new ArrayList<原创 2021-07-02 21:32:54 · 206 阅读 · 0 评论 -
单列集合Set的实现类TreeSet
List接口 [Collection】的子类1.ArrayList【查询快,增删慢】(1)ArrayList常见方法【部分】//list[Collection的子类,也是接口],ArrayList也是其实现类public class Demo2 { public static void main(String[] args) { List<String> list =new ArrayList<>(); //ArrayList<S原创 2021-07-03 10:01:31 · 150 阅读 · 0 评论 -
单列集合Set的实现类HashSet
2.HashSet(1)LinkedList常见方法【部分】//LinkedList 具体实现类,【双向】链表public class Demo3 { public static void main(String[] args) { LinkedList<String> list = new LinkedList<>(); list.add("aaa"); list.add("bbb"); list.add原创 2021-07-03 10:31:11 · 220 阅读 · 0 评论 -
双列集合Map的实现类
Map接口【和Collection接口并列】Map接口成员方法【实现于Map接口,TreeMap也可实现,这里以HashMap为例】//HashMap实现类 :无序[HashSet底存原理] 哈希表public class Demo1 { public static void main(String[] args) { HashMap<String, Integer> map = new HashMap<>(); //添加键值对[put原创 2021-07-03 11:31:38 · 121 阅读 · 0 评论 -
Map集合相关应用
1.键盘录入一个字符串,求该字符串中每一个字符出现的次数。要求:按照字母顺序打印如: 录入的字符串为"apple",打印 a(1) e(1) l(1) p(2)public class Demo4 { public static void main(String[] args) { //键盘录入 Scanner sc = new Scanner(System.in); System.out.println("请输入字符串"); S原创 2021-07-03 11:41:41 · 141 阅读 · 0 评论 -
Stream流
1.概念概念:Stream流指的是流式编程(链式编程),Stream类中提供了一些操作集合或者数组的方法,很方便。2.Stream的获取方法1)单列集合获取流 Stream<元素类型> stream1 = list集合.stream(); Stream<元素类型> stream2 = set集合.stream(); 2)双列集合获取流:不能直接获取流,需要转换为单列集合、再获取流 //获取键集,获取流 Stream<元素类型> strea原创 2021-07-06 21:32:03 · 99 阅读 · 0 评论 -
File类
1.概念File类表示文件或者文件夹的路径,这个路径可以是相对路径也可以是绝对路径。2.路径//绝对路径:从盘符开始的路径 File file1 = new File("D:\\ideaJavaSE_project2\\day11_myFile\\a.txt");//相对路径:相对项目的根路径来说的,不用写项目根路径的目录,而直接写目录以下的路径 File file2 = new File("day11_myFile\\a.txt"); //注:如果文原创 2021-07-06 21:52:06 · 343 阅读 · 0 评论 -
File类对文件的操作应用
1.在不存在的文件夹下创建文件//在当前模块下aaa文件下ddd下eee中创建一个e.txt文件public class Demo2 { public static void main(String[] args) throws IOException { File file = new File("day11_myFile\\aaa\\ddd\\eee"); //createNewFile()建立文件需要文件夹存在 //如果文件不存在,则先创建出原创 2021-07-06 22:02:06 · 180 阅读 · 0 评论 -
IO流总述
1.IO流分类1)按照流向分类:输入流:读取数据用的输出流:写数据用的2)按照读写的数据分类(体系结构)<1>字节流[读写任何类型的文件(任何文件底层都是字节数据)]字节输入流:IntputStream(抽象类)–FileInuptStream: 读取文件中的字节–BufferedInputStream: 对InputStream进行包装,提高读取数据的效率字节输出流: OutputStream(抽象类)–FileOutputSteam: 往文件中写字节–BufferedO原创 2021-07-09 09:14:29 · 126 阅读 · 0 评论 -
IO流相关应用
1.字节输入流:IntputStream(抽象类)–FileInuptStream: 读取文件中的字节–BufferedInputStream: 对InputStream进行包装,提高读取数据的效率2.字节输出流: OutputStream(抽象类)–FileOutputSteam: 往文件中写字节–BufferedOutputStream: 对OutputStream进行包装,提高写入数据的效率...原创 2021-07-09 20:07:48 · 77 阅读 · 0 评论 -
Properties类与IO流
1.概念Properties是Map的子类,是一个双列集合,键和值都是字符串类型。Map集合的方法它都能使用;但是推荐是Properties自己特有的方法,对集合进行操作。2.特有方法//properties属于Map集合【该集合一般添加字符串键值对】//特有方法[名字不同,但是用法一样,区别是参数类型不同]public class Demo1 { public static void main(String[] args) { Properties pro = new原创 2021-07-09 20:54:16 · 398 阅读 · 0 评论 -
其他流总述
1.转换流InputStreamReader: 把InputStream转换为Reader,可以指定编码表OutputStreamWriter: 把OutputStream转换为Writer,可以指定编码表//转换流[用于指定编码表读入或写出]public class Demo1 { public static void main(String[] args) throws IOException { //jdk11以前使用转化流[按照指定的编码表,将字节流转化为字符流]原创 2021-07-09 20:55:21 · 65 阅读 · 0 评论 -
多线程的实现
1.多线程概念<1>并行和并发a.并行:多个指令多核CPU上同时执行b.并发:同一个CPU核心,交替执行多条指令<2>进程和线程a.进程:正在执行的程序b.线程:线程是进程中的一个执行单元(路径),如果一个进程中包含多个线程,这个程序就是多线程程序;如:QQ、迅雷、360、飞秋等2.创建线程的方式【Java的API提供了一个Thread类表示线程,创建一个Thread及其子类对象,即是线程对象】<1>继承Thread(线程)类[继承之后不能继承其他类]原创 2021-07-09 22:00:00 · 89 阅读 · 0 评论 -
多线程安全问题1
1.问题的产生原因:多个线程操作同一个共享数据。原理:多个线程在访问共享数据时,由于CPU的随机性,一个线程还没有执行完,执行权被其他线程抢走了,这个时候就有可能出现线程安全问题。解决方式:把操作共享数据的代码锁起来,让单一线程执行完毕才能执行其他的2.解决方法三种方法的测试类【测试类相同】public class Demo { public static void main(String[] args) { //创建线程任务对象 TicketRunnab原创 2021-07-10 10:31:30 · 103 阅读 · 0 评论 -
生产者和消费者案例
1.案例描述这里以吃饭为例,假设有一个桌子,用来存汉堡包,然后有厨师和消费者,厨师往桌子上放汉堡包,消费者从桌子上取走汉堡包。当两者在一个时间段同时进行多次自己的操作时,很明显这就是多线程编程的生产者消费者实例了。在这里,我们希望厨师每次生产一个汉堡包,消费者就拿走一个汉堡包,如果汉堡包还没有被取走,那么厨师应该等待,而如果桌子上没有汉堡包,则消费者应该等待。2.案例分析厨师类(Cooker):实现Runnable接口,包含放汉堡包的方法消费者类(Foodie):实现Runnable接口,包含拿汉堡原创 2021-07-10 11:20:29 · 730 阅读 · 0 评论 -
多线程安全问题2
1.volatile关键字<1>作用:强制线程每次在使用的时候,都会看一下共享区域最新的值[用于提供线程安全]<2>与synchronized的区别和联系:把代码块声明为 synchronized,有两个重要后果,通常是指该代码具有 原子性(atomicity)和 可见性(visibility);volatile变量具有 synchronized 的可见性特性,但是不具备原子性。这就是说线程能够自动发现 volatile 变量的最新值<3>使用条件您只能在有原创 2021-07-10 15:48:12 · 70 阅读 · 0 评论 -
线程池的实现
1.创建线程池API提供了一个工具类叫Executors,可以用它的方法生成不同特点的线程池,返回一个ExecutorService对象。<1>Executors.newCachedThreadPool() 【池子中默认是空的,最多可以容纳int类型的最大值】<3>Executors.newSingleThreadExecutor() 【单个线程的线程池】//都为工具类Executors的静态方法,返回一个ExecutorService对象public class原创 2021-07-10 16:02:52 · 135 阅读 · 0 评论 -
并发工具类【线程安全相关的类】
1.Hashtable和ConcurrentHashMapHashtable:哈希表结构(数组+链表),线程安全的(同步代码块,效率低)ConcurrentHashMap:哈希表结构(数组+链表+红黑树),线程安全的(同步代码块+CAS算法,效率高)【注:使用线程不安全的类可能会出现赋值为null的情况】public class Demo3 { public static void main(String[] args) throws InterruptedException {原创 2021-07-10 16:37:12 · 227 阅读 · 1 评论