![](https://img-blog.csdnimg.cn/20190918140145169.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
小黄学习JavaSE
啊,终于把JavaSE学完啦!!!
贼爱学习的小黄
这个作者很懒,什么都没留下…
展开
-
JDK8新特性——Optional
Optional常用方法创建Optional类对象的方法Optional.of(T t):创建一个Optional实例,t必须非空Optional.ofNullable(T t):t可以为null获取Optional容器的对象T get():如果调用对象包含之,返回该值,否则抛出异常T orElse(T other):如果有值,则将其返回,否则返回other使用Optional看一下如何处理空指针异常此方法会抛空指针异常@Testpublic void test1(原创 2021-07-30 10:48:58 · 734 阅读 · 0 评论 -
JDK8新特性——Stream API
Stream APIStream API关注的是对数据的计算,与CPU打交道集合关注的是对数据的存储,与内存打交道特点Stream自己不会存储数据Stream自己不会改变源对象,而是会返回一个持有结果的新的StreamStream的操作是延时执行的,意味着他们会等到需要结果的时候再执行Stream执行流程Stream的实例化Stream一系列的中间操作Stream的终止操作说明一个中间操作链对数据源的数据进行处理一旦执行终止操作,就开始执行中间操作链,并产原创 2021-07-30 10:11:16 · 99 阅读 · 0 评论 -
JDK8新特性——方法引用/构造器引用
方法引用使用情景当要传给Lambda体的操作,已经有了实现的方法,可以使用方法引用说明方法引用本质上还是Lambda表达式,Lambda表达式作为函数式接口的实例,所有方法引用也作为函数式接口的实例使用格式类(或对象):: 方法名使用分为3种情况情况1 对象 :: 非静态方法名情况2 类 :: 静态方法名情况3 类 :: 非静态方法名使用要求接口中抽象方法的形参列表以及返回值类型与方法引用的形参列表以及返回值类型完全相同(适用于情况1,情况2)原创 2021-07-29 11:22:55 · 133 阅读 · 0 评论 -
JDK8新特性——函数式接口
函数式接口(FunctionalInterface)只声明了一个抽象方法的接口称为函数式接口可以在接口上添加注解(@FunctionalInterface)来判断此接口是否为函数式接口/** * Java内置的4大核心函数式接口 * 消费型接口:Consumer<T> void accept(T t) * 供给型接口:Supplier<T> T get() * 函数型接口:Function<T,R> R apply(T t)原创 2021-07-29 11:21:43 · 95 阅读 · 0 评论 -
JDK8新特性——Lambda表达式
Lambda表达式举例: (o1,o2) -> Integer.compare(o1,o2)格式:-> : Lambda操作符或者箭头操作符-> 左边 : 重写方法的形参-> 右边 : 重写方法的方法体使用:分6种情况(见代码)-> 左边 : Lambda表达式的形参类型可省略(类型推断),如果只有一个形参时"()"可以省略-> 右边 : Lambda表达体应用"{}“包起来,如果方法体只有一条原创 2021-07-29 11:21:00 · 85 阅读 · 0 评论 -
Java反射实例——动态代理
说动态代理之前,先来看一下静态代理的实现//静态代理实例public class StaticProxyTest { public static void main(String[] args) { ErkeClothFactory erkeClothFactory = new ErkeClothFactory(); ClothFactory proxyClothFactory = new ProxyClothFactory(erkeClothFactory);原创 2021-07-28 10:41:55 · 109 阅读 · 0 评论 -
Java反射——调用运行时类的属性、方法、构造器
调用运行时类的属性getDeclaredField(String fieldName):获取当前运行时类的指定变量名的属性setAccessible(true):确保可以访问所有权限的属性set(p,123):获取、设置指定对象的此属性@Test //调用运行时类的属性 public void testField() throws Exception { Class<Person> clazz = Person.class; Perso原创 2021-07-27 15:29:54 · 182 阅读 · 0 评论 -
Java反射——Class类
Class类讲Class类之前先来认识一下反射什么是反射?反射被认为是动态语言的关键,反射机制允许程序在执行期间获取任何类的内部信息,并能操作其内部方法属性简单来说,自定义类的时候经常会有private修饰的内部类,使用new方法创建实例是无法访问内部信息,但是通过反射机制可以访问通过new方法创建实例或者使用反射机制创建实例,均可调用公共方法,怎么选择?一般情况下还是建议使用new方法来创建实例反射的特征:动态性。当需要动态调用时,则使用反射机制创建反射机制是否与封装机制冲突原创 2021-07-26 17:14:46 · 552 阅读 · 0 评论 -
网络编程——URL
使用URL下载网络上的资源获取下载地址连接资源操作资源关闭资源public class Url { public static void main(String[] args) throws IOException { //1.获取地址 URL url = new URL("https://webfs.ali.kugou.com/202107231643/70b397612e158f5573738a7925370d48/part/0/960115/KGT原创 2021-07-23 17:00:40 · 69 阅读 · 0 评论 -
网络编程——UDP
UDP发送端获取接收端的地址造一个包发送数据关闭资源public class UdpClientDemo { //发送端 //实际开发中必须使用try-catch-finally public static void main(String[] args) throws Exception { //1.获取接收端的地址 DatagramSocket socket = new DatagramSocket(); //2.原创 2021-07-22 15:54:56 · 61 阅读 · 1 评论 -
网络编程——TCP
通过TCP协议传输信息客户端获取服务器IP及端口号连接服务器:实例化一个Socket发送消息:调用Socket.getOutputStream()关闭资源public class TcpClientDemo { public static void main(String[] args) throws UnknownHostException { //1.获取服务器IP及端口 InetAddress inetAddress = InetA原创 2021-07-22 11:14:10 · 351 阅读 · 0 评论 -
Java网络编程
网络编程网络编程中存在两个主要的问题如何准确的定位网络上的一台或多台主机找到主机后如何进行通信网络编程的要素IP和端口号网络通信协议IPJava中的IP类:InetAddress定位唯一一台网络上的计算机127.0.0.1 :本机(localhost)IP地址的分类ipv4/ipv6IPV4:127.0.0.1 由4个字节组成IPV6:128位,8个无符号正数公网(互联网)- 私网(局域网)ABCD类地址192.168.xx原创 2021-07-21 17:26:48 · 64 阅读 · 0 评论 -
JavaIO流——其他处理流
标准的输入输出流System.in:标准的输入流System.out:标准的输出流public static void main(String[] args) { BufferedReader br = null; try { InputStreamReader isr = new InputStreamReader(System.in); br = new BufferedReader(isr);原创 2021-07-21 10:52:03 · 65 阅读 · 0 评论 -
JavaIO流——对象流
对象流的作用用于存储和读取基本数据类型或对象,他的强大之处在于可以将内存层面的数据与磁盘或网络相互传输对象流的序列化和反序列化序列化:将内存层面存储的数据传输到磁盘层面或者通过网络传输出去,使用ObjectOutputStream反序列化:将磁盘层面或者网络传输过来的数据转化成内存层面存储的数据,使用ObjectInputStream注意点:在读取数据的时候,要按照输入的顺序读取自定义类如何实现可序列化实现serializable接口定义一个long类型的全局常量serialVersi原创 2021-07-21 09:40:33 · 151 阅读 · 0 评论 -
JavaIO流——转换流
作用将字节输入流转换为字符输入流(InputStreamReader)将字符输出流转换成字节输出流(OutPutStreamWriter)使用方法造文件造流操作文件关闭流实现uft-8文件转换成gbk文件实际上应该使用try-catch-finally方法,这里为了看的简洁明了,直接抛出异常 @Test public void test1() throws IOException { FileInputStream fis = new FileInputStr原创 2021-07-19 16:30:32 · 61 阅读 · 0 评论 -
JavaIO流——缓冲流
缓冲流的作用及如何使用作用提高文件写入与读取的速度原因:内部定义了一个缓冲区使用造文件造流造节点流造缓冲流处理文件关闭流:先关闭处理流再关闭节点流。系统默认关闭了处理流会自动关闭节点流使用BufferedInputStream和BufferedOutputStream//使用缓冲流实现非文本文件的传输 @Test public void test01(){ BufferedInputStream bis = null; B原创 2021-07-19 11:08:09 · 125 阅读 · 0 评论 -
JavaIO流——节点流
FileReaderFileReader读取数据注意点:一个流打开,在我们使用完之后一定要关闭流。 在新建流、读取流、关闭流都需要抛出异常,这里抛出异常的方法必须是try-catch-finally创建一个File类的对象,将需要读取的文件路径作为参数传入构造器创建一个FileReader类的对象,将上述File类的对象作为参数传入构造器调用FileReader.read(),返回结果是整型,将他转换为字符,如果都不到字符则返回-1调用FileReader.cloce()关闭流原创 2021-07-16 13:57:06 · 165 阅读 · 0 评论 -
JavaIO流的基本概述
流的分类按照传输数据类型分字节流:底层数据类型为byte字符流:底层数据类型为char按照流的流向不同分(站在程序的角度上)输入流:文档----->程序输出流:程序----->文档按照流的角色分节点流:文档和程序之间直接传输处理流:文档和程序之间多套了一层流来传输用图片来体验一下...原创 2021-07-15 16:12:25 · 63 阅读 · 0 评论 -
Java中File类的使用
创建File类实例在创建实例时,只是在内存层面创建了一个对象File(String pathname)File(String parentPath,String childPath)File(File parentFile,String pathname)@Test public void test01(){ //构造器1 //File(String pathname) File file1 = new File("abc.txt");/原创 2021-07-15 13:37:33 · 246 阅读 · 2 评论 -
Java泛型以及通配符的使用
自定义泛型类public class Order<E> { private String name; private int age; private E order; public Order(){} public Order(String name,int age,E order){ this.name = name; this.age = age; this.order = order;原创 2021-07-14 16:00:18 · 133 阅读 · 0 评论 -
Collections类的常用方法
Collections类的常用方法reverse(List list):反转list中的顺序shuffle(List list):对list集合中的元素随机排序sort(List list):对list中的顺序进行自然排序,升序swap(List list,int startIndex,int lastIndex):将list中索引为startIndex和lastIndex交换frequency(List list,Object obj):返回list集合中出现obj的次数copy(List原创 2021-07-13 17:31:52 · 243 阅读 · 0 评论 -
Java集合——Map接口
Map接口类的介绍HashMap:map接口中最常用的类,线程不安全的,效率高,可以在key或value上存储nullLinkedHashMap:在HashMap上基础上新增了两个变量,用于指向前一个元素或后一个元素,在遍历操作比较频繁的时候,LinkedHashMap效率比HashMap高TreeMap:保证按照添加(key-value)的顺序进行排序,使用自然排序或者定制排序,底层实现原理:红黑树Hashtable:map接口中最古老的类,线程安全,效率低,不能在key或value上存储nu.原创 2021-07-12 17:19:20 · 183 阅读 · 0 评论 -
Java集合——Set接口
HashSet、LinkedHashSet、TreeSet三者的区别HashSet:作为Set接口的主要实现类,线程不安全的,可存储null值LinkedHashSet:是HashSet的子类,遍历内部数据时,可根据添加顺序显示TreeSet:实现算法:红黑树,可以按照添加对象的指定属性进行排序Set的特点——无序性、不可重复性(以HashSet为例)无序性:Set底层也是利用数组储存,添加的顺序并非根据索引来添加,而是根据哈希值进行排序不可重复性:保证添加元素按照equals()时,返.原创 2021-07-12 13:49:45 · 68 阅读 · 0 评论 -
Java集合——List接口
ArrayList、LinkendList、Vector的异同相同点:三者都实现了List接口,用于存储有序的、可重复的数据ArratList:JDK1.2新增,线程不安全的,效率高,底层用Object[]储存LinkedList:JDK1.2新增,底层用双向链表储存,对于频繁的插入、删除等操作时,用此类效率比ArrayList高很多Vector:JDK1就存在,相对古老,现场是安全的,效率不高,底层用Object[]储存ArrayList源码分析JDK7之前:使用ArrayList .原创 2021-07-11 20:57:58 · 112 阅读 · 1 评论 -
Java集合——Collection接口的常用方法
Collection接口的常用方法注意点:在对集合进行操作时,底层判断是调用equals(),所以自定义类必须重写equals()add():往集合中添加对象size():返回集合中有几个对象addAll(Collection coll):往集合中添加一个集合所有的对象clear();清空集合中的对象isEmpty():判断集合中是否有对象contains(Object obj):用于判断集合中是否存在obj的值或对象containsAll(Collection coll):用于判断集合.原创 2021-07-10 10:48:50 · 127 阅读 · 1 评论 -
Java中的注解(Annotation)
Java中的注解(Annotation)Annotation介绍Annotation其实是代码中的标识符,可以在编译时,类加载时,运行时被读取,可以在不改变原有逻辑的情况下,在源文件中嵌入一些信息在JavaSE中注解的功能就只是一些标识符,在JavaEE中注解可以代替繁琐的代码或则XML文件Annotation的使用场景场景一:生成文档相关注释(比如在文件头部添加作者、版本等其他信息)场景二:在编译时进行格式检查(JDK内置三种基本注解)@Override:用于重写父类的方法@Dep原创 2021-07-09 16:24:40 · 439 阅读 · 0 评论 -
Java枚举类详解
Java枚举类的使用方式一:JDK5.0之前的自定义枚举类创建枚举类的对象的属性,声明为private final创建枚举类的构造方法,并给属性赋值定义多个枚举类的对象,声明为public static final如有需要:添加常用方法,例如get(),toString()通过代码来感受一下public class SeasonTest { //自定义枚举类 public static void main(String[] args) { Season sp原创 2021-07-09 10:58:48 · 124 阅读 · 0 评论 -
Date、LocalDate与java.sql.Date之间的转化
Date转化需要借助SimpleDateFormatLocalDate需要借助DateTimeFormatter@Test public void test1() throws ParseException { String str = "2020-07-19"; //JDK8之前的方法 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = .原创 2021-07-08 16:20:16 · 424 阅读 · 0 评论 -
Java自定义类型如何进行排序?
Java自定义类型如何进行排序?方式一:实现Comparable接口String类型是可以进行排序的,是因为他实现了Comparable接口,重写了compareTo()方法先来看一下String类是怎么重写compareTo(obj)方法的public int compareTo(String anotherString) { int len1 = value.length; int len2 = anotherString.value.length;原创 2021-07-07 22:43:13 · 845 阅读 · 0 评论 -
JDK8中新增的日期时间API——LocalDate,LocalTime,LocalDateTime
LocalDate,LocalTime,LocalDateTime的使用介绍:JDK8新增类,主要特征:不可变性实例化对象调用now方法:返回当前日期时间调用of方法:返回指定的日期时间方法getXxx:获取指定时间with:设置当前的时间plus:在当前时间基础上加上一段时间minus:在当前时间寄出上减去一段时间@Test public void test01(){ //1.实例化对象 //创建当前时间的对象调用now()原创 2021-07-07 17:17:55 · 492 阅读 · 0 评论 -
Java日期之SimpleDateFormat
Java日期之SimpleDateFormat可以发现我们使用Date类时,他总是返回指定格式的日期,这不利于用户的读取SimpleDateFormat类可以很好的解决这个问题这个类允许进行格式化:Date---->String,解析:String---->Date格式化调用format方法解析调用parse方法通过代码来看一下public class DateTimeTest02 { @Test public void test1() throws Parse原创 2021-07-07 11:11:14 · 137 阅读 · 0 评论 -
关于StringBuffer、StringBuilder的小理解
String、StringBuffer、StringBuilder的异同String:String是不可变的,线程安全StringBuffer:可变的(具体体现在char[]数组没有final修饰),线程安全的,效率低StringBuilder:可变的,线程不安全,效率高效率:StringBuilder > StringBuffer > String接下来从源码来分析以下这三者的底层逻辑String s = new String(); //char[] value = new原创 2021-07-06 14:40:05 · 57 阅读 · 0 评论 -
Java获取a字符串在b字符串中所出现的次数
思路遍历b字符串,使用string.indexOf方法,查到所在位置,如果这个位置大于等于0的话,则说明存在a字符串public class StringTest2 { public static void main(String[] args) { String str = "abcdabdweeheabdeababc"; String instr = "ab"; int count = 0; for (int i = 0; i原创 2021-07-05 23:21:12 · 2597 阅读 · 2 评论 -
Java中手动实现trim方法
如何手写一个trim方法?思路用char数组来接收字符串找出左边第一个不为空格的字符的下标找出右边第一个不为空格的字符的下标使用substring方法,从左下标读取到右下标我们来看一下代码如何实现public class StringHomeWork01 { public static void main(String[] args) { String abc = " a b c ddsa "; char[] chars = abc.toC原创 2021-07-05 15:38:48 · 751 阅读 · 1 评论 -
多线程通信经典例子:生产者/消费者问题
多线程通信一个经典例子:生产者/消费者问题先一起来看一下题目一个生产者(producer)生产一件产品,当产品数量超过20时将不再生产,另有一个消费者(consumer)问店员(clerk)来购买这个产品,当产品数量少于或等于时,店员将不再售卖这件产品分析一下题目需不需要使用多线程?需要,一条是生产者的线程,一条是消费者的线程需不需要共享数据?需要,共享数据为店员,或者产品共享数据的时候会不会出现线程安全问题?会,需要用synchronized或者lock来解决需不需要线程之间进行通信?需要原创 2021-07-01 16:25:23 · 211 阅读 · 0 评论 -
单例模式之饿汉式、懒汉式
Java之单例模式单例模式:保证类的内存中只存在一个对象,分为饿汉式和懒汉式饿汉式:在类加载时就创建一个对象并实例化对象懒汉式:在类加载时创建一个对象,但不实例化在运行的速度上,因为饿汉式对象已经实例化了,所以优于懒汉式在占用的内存上面,饿汉式不管用不用到这个对象都会占用内存,而懒汉式如果不用此对象就不会占用内存注意:懒汉式是线程不安全的,需要使用同步机制解决通过代码来看一下package com.yellowstar.demo01;/** * 单例模式之饿汉式、饿汉式 * 单例原创 2021-07-01 10:18:40 · 179 阅读 · 0 评论 -
关于Java多线程的一些小知识(持续更新)
关于多线程的一些小知识线程的生命周期新建:new出一个实现Runnable接口或者继承Thread类的对象就绪:调用对象的start方法,等待cpu分配内存,注意,这时候cpu还没有分给你内存运行:cpu给你分配了内存,开始实现run方法阻塞:在这个线程运行的时候有其他线程插入进来,或者使这个线程暂停死亡:线程全部运行结束或者报错,这个线程完全停止用图片来感受一下线程的生命周期...原创 2021-06-30 16:07:38 · 67 阅读 · 0 评论 -
多线程的4种创建与使用
多线程的创建创建一个继承于Thread的子类重写Thread中的run方法 ----> 将此线程需要执行的程序写到run方法中新建一个继承于Thread的子类的对象调用此对象的start方法用代码做一个小例子,遍历100以内的偶数//1.创建一个继承于Thread的子类class Test extends Thread{ //2.重写Thread类中的run方法 ---> 将此线程所执行的操作,写在run方法中 @Override public原创 2021-06-29 17:17:02 · 196 阅读 · 0 评论 -
关于Java中clone方法的一些小理解
Java中clone()的用法一个类如果不显示的重写clone(),那么这个类就不能直接调用clone方法在类中重写了clone方法后,发现系统还是会报错:CloneNotSupportedException如何处理?一个类如果没有实现cloneable接口,但却又调用了clone方法,系统就会给出上述错误,所以我们必须要实现cloneable接口并且重写clone方法,才可以正常的使用接下来看clone的其中一种用法:浅拷贝拷贝对象和原始对象的引用类型引用相同的对象定义一个类,实现clon原创 2021-06-29 15:58:17 · 669 阅读 · 0 评论 -
关于hashCode()和equals()的重写
关于hashCode()和equals()的重写拿Students举例,当一个学生姓名,年纪相同时,我们就当作时同一个学生,比如A = new Students(“张三”,“20”) B = new Students(“张三”,“20”),理论上来说这应该时同一个人,我们来看下代码的实现Students类public class Students { private String name; private String age; public Students(){原创 2021-06-29 14:38:07 · 307 阅读 · 0 评论