
Java EE
文章平均质量分 81
JavaSE入门到进阶
pipizhen_
昨日之日不可留。
展开
-
jdk8新特性stream流式计算常用方法
jdk8新特性stream流式计算Stream的特点:(1)不存储元素;(2)不改变源数据;(3)具有延迟执行,类似懒加载。特此记录Stream的学习案例:先设计一个类:package com.pipi.test;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import lombok.experimental.Accessors;import org.jun原创 2021-04-16 17:59:04 · 1182 阅读 · 0 评论 -
自定义日期的格式转换
自定义日期的格式转换工具类代码:package com.pipi.myutils;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class MyDateFormat { // 支持多种日期格式 public static final SimpleDateFormat[] dateArray = { new S原创 2020-09-06 11:27:44 · 453 阅读 · 0 评论 -
Java中使用TCP协议的Socket通信
使用TCP的Socket通信:基本测试代码:客户端:package tcpsocket;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;/* 客服端: 创建Socket连接服务器(指定IP地址,端口号) 调用Socket的getInputStream()和getOutputStream()方法获取输入输出流 输入流可以读取服务器原创 2020-07-29 19:28:37 · 655 阅读 · 0 评论 -
Java中使用UDP协议的Socket通信
Java中使用UDP协议的Socket通信:基本测试代码:客户端:package udpsocket;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;public class Demo1_Send { public static void main(String[] args) throws Exception { // 在发生数据之原创 2020-07-29 19:23:07 · 373 阅读 · 0 评论 -
JDK8新特性,方法引用的4种形式
JDK8新特性,方法引用的4种形式:前提条件是:定义的接口中只能有一个方法,才能实现方法的引用。引用静态方法: 类名::静态方法名引用某个对象的方法: 对象::实例方法引用特定类型的方法: 特定类::实例方法引用构造方法: 类名::new测试代码:package newjdk;public class Test04 { public static void main(String[] args) { // 引用静态方法原创 2020-07-28 17:23:47 · 902 阅读 · 0 评论 -
JDK8新特性,Lamda简化匿名内部类写法
Lamda表达式:作用:对匿名内部类的简化。写法:3种。(参数) -> 单行语句(参数) -> { 多行语句 }(参数) -> 表达式测试代码:public class Test05 { public static void main(String[] args) { // 使用匿名内部类的方式 m1(new MyInterface1() { @Override public void原创 2020-07-28 16:25:09 · 814 阅读 · 0 评论 -
JDK8新特性,接口增强使用default和static
JDK8新特性,接口增强使用default,static关键字:JDK8之前,接口中只能有公开的常量,和公开的抽象方法。之后接口中还可以写有方法体的方法。接口中可以写普通方法,有方法体的方法,但必须使用default关键字修饰。接口中的default方法子类可以重写,也可以不重写。接口中可以存在静态方法。通过“接口名.”的方式调用。静态方法不能重写。我们在使用接口中,也可以不用这些新特性,只要知道接口还存在这种语法就行。测试代码:public class Test04 { publ原创 2020-07-28 16:20:51 · 295 阅读 · 0 评论 -
了解一下简单工厂模式概述和使用
设计模式(简单工厂模式概述和使用)(了解)A:简单工厂模式概述:又叫静态工厂方法模式,它定义一个具体的工厂类负责创建一些类的实例。B:优点客户端不需要在负责对象的创建,从而明确了各个类的职责。C:缺点这个静态工厂类负责所有对象的创建,如果有新的对象增加,或者某些对象的创建方式不同,就需要不断的修改工厂类,不利于后期的维护。D:案例演示动物抽象类:public abstract Animal { public abstract void eat(); }具体狗类:public class原创 2020-07-28 14:18:40 · 473 阅读 · 0 评论 -
关于线程池的概述
A:线程池概述程序启动一个新线程成本是比较高的,因为它涉及到要与操作系统进行交互。而使用线程池可以很好的提高性能,尤其是当程序中要创建大量生存期很短的线程时,更应该考虑使用线程池。线程池里的每一个线程代码结束后,并不会死亡,而是再次回到线程池中成为空闲状态,等待下一个对象来使用。在JDK5之前,我们必须手动实现自己的线程池,从JDK5开始,Java内置支持线程池。B:内置线程池的使用概述JDK5新增了一个Executors工厂类来产生线程池,有如下几个方法:public static Executo原创 2020-07-28 14:08:59 · 224 阅读 · 0 评论 -
线程组的概念
线程组概述:Java中使用ThreadGroup来表示线程组,它可以对一批线程进行分类管理,Java允许程序直接对线程组进行控制。默认情况下,所有的线程都属于主线程组。public final ThreadGroup getThreadGroup();//通过线程对象获取他所属于的组。public final String getName();//通过线程组对象获取他组的名字。我们也可以给线程设置分组。1,ThreadGroup(String name) 创建线程组对象并给其赋值名字。2,原创 2020-07-28 14:01:21 · 825 阅读 · 0 评论 -
用Calendar类判断一个年份是否是闰年
用Calendar类判断一个年份是否是闰年:键盘输入任意一个年份,用Calendar判断是闰年还是平年:分析:创建Calendar对象。将对象的年份设置成键盘输入的年份。将月份设置成2月28日。将天数加1,再判断天数是否是29即可。测试代码:package calendartest;import java.util.Calendar;import java.util.Scanner;public class Test03 { public static void main(S原创 2020-07-28 13:09:22 · 1367 阅读 · 0 评论 -
关于Calendar类的常用方法
Calendar类的常用方法:Calendar.getInstance();静态方法,获取当前系统的日历对象。public int get(int field);获得对象中指定字段的值。public abstract void add(int field, int amount);对Calendar对象的指定字段进行加减数操作。public void set(int field, int value);对Calendar对象的指定字段直接修改set()方法还有参数3-6个不等,分别代表年月原创 2020-07-28 13:05:49 · 526 阅读 · 0 评论 -
关于Calendar日历类的基本使用
关于Calendar的基本使用:Calendar是一个抽象类,直接继承Object。Calendar只有一个子类:GregorianCalendar。格里高里历,就是我们常说的:公历。但一般不会使用这个子类new对象,那怎么办,抽象类不是不能new对象吗?确实如此,但是Calendar有一个静态方法getInstance(),底层返回的其实就是子类对象。Calendar c = Calendar.getInstance();我们通过API帮助文档,或者直接查看源码,发现Calendar类中属性几原创 2020-07-28 13:01:12 · 306 阅读 · 0 评论 -
大整数类BigInteger的基本使用
import java.math.BigInteger;public class Demo4_BigInteger { /** ** A:BigInteger的概述 * 可以让超过Integer范围内的数据进行运算 * B:构造方法 * public BigInteger(String val) * C:成员方法 * public BigInteger add(BigInteger val) * public BigInteger subtract(BigInte原创 2020-07-27 21:29:07 · 331 阅读 · 0 评论 -
正则表达式的常用字符
正则表达式的基本使用:package patterntest;import java.util.regex.Matcher;import java.util.regex.Pattern;/* 看一下字符类: []表示一个字符: [abc]: abc其中的一个字符。 [a-z]: a-z中的任意一个字符。 [0-9]: 0-9中任意一个数字。 [a-zA-Z]: a-z或者A-Z中任意一个字符。 [^原创 2020-07-27 21:19:01 · 6844 阅读 · 2 评论 -
反射机制获取一个类的注解
反射机制获取一个类的注解:先定义一个注解,并设置为可以被反射:package homework01;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;// 让这个注解可反射到@Retention(value = RetentionPolicy.RUNTIME)public @interface MyAnnotation { int id(); String na原创 2020-07-27 14:46:22 · 758 阅读 · 0 评论 -
注解的定义及使用
注解的定义及使用:(1)先自定义一些注解,学会定义注解:测试代码:package annotationtest;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;public @interface MyAnnotation {原创 2020-07-27 14:42:04 · 831 阅读 · 0 评论 -
注解的基本概述
注解的基本概述:1、注解,或者叫注释类型,英文单词是:Annotation。注意:注解不是“//”,也不是多行注释。2、注解Annotation是一种引用数据类型,编译之后也是生成“xxx.class”文件。3、怎么自定义注解?语法格式是什么?[修饰符列表] @interface 注解类型名 { // ...}4、注解怎么使用?用在什么地方?第一:注解使用时的语法格式:@注解类型名第二:注解可以出现在类上,属性上,方法上,变量上等…注解还可以出现在注解类型上面。5、比如JDK自带原创 2020-07-27 14:34:45 · 480 阅读 · 0 评论 -
反射一个类的父类,及其实现的接口
反射一个类的父类,及其实现的接口:测试代码:package reflect;public class Test16 { public static void main(String[] args) throws Exception { // 反射获取一个类 Class theClass = Class.forName("java.lang.String"); // 获取这个类的父类(一个类只能继承一个父类) Class su原创 2020-07-27 10:32:32 · 262 阅读 · 0 评论 -
反射构造方法,用构造方法实例化对象
反射构造方法,用构造方法实例化对象:测试代码:package reflect;import java.lang.reflect.Constructor;public class Test15 { public static void main(String[] args) throws Exception { // 不使用反射机制创建对象 Student15 s1 = new Student15(); Student15 s2 = new原创 2020-07-27 10:30:18 · 349 阅读 · 0 评论 -
模拟反编译,输出一个类的构造方法
模拟反编译,输出一个类的构造方法:测试代码:package reflect;import java.lang.reflect.Constructor;import java.lang.reflect.Modifier;public class Test14 { public static void main(String[] args) { // 反射获取一个类 Class theClass = null; try {原创 2020-07-27 10:28:02 · 166 阅读 · 0 评论 -
反射机制实例化对象,调用对象的方法
反射机制实例化对象,调用对象的方法:测试代码:package reflect;import java.lang.reflect.Method;public class Test13 { public static void main(String[] args) throws Exception { // 不用反射机制调用方法 UserService us = new UserService(); /* 调用方法的原创 2020-07-27 10:25:39 · 603 阅读 · 0 评论 -
模拟反编译,输出一个类的属性及方法
模拟反编译,输出一个类的属性及方法:测试代码:package reflect;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.lang.reflect.Modifier;public class Test12 { public static void main(String[] args) { // 反射获取一个类 String className原创 2020-07-26 21:05:52 · 198 阅读 · 0 评论 -
反射机制反射类中方法Method
反射机制反射类中方法Method:测试代码:package reflect;import java.lang.reflect.Method;import java.lang.reflect.Modifier;public class Test11 { public static void main(String[] args) throws Exception { // 反射获取类 Class uClass = Class.forName("refle原创 2020-07-26 19:20:40 · 349 阅读 · 0 评论 -
可变长度参数的了解
可变长度参数:int… args:这就是可变长度参数。语法:数据类型…(注意:一定是写3个点)1、可变长度参数要求的参数个数是:0 ~ N个任意。2、可变长度参数在参数列表中必须在最后位置上,即最后位置只能有一个可变长度参数。3、可变长度参数可以看成一个对应类型的数组,且有下标。测试代码:package reflect;public class Test10 { public static void main(String[] args) { m1(); // m原创 2020-07-26 17:18:16 · 980 阅读 · 0 评论 -
反射机制读写对象的属性Field
怎么通过反射机制访问一个java对象的属性?给属性赋值set获取属性的值get测试代码:package reflect;import java.lang.reflect.Field;public class Test09 { public static void main(String[] args) throws Exception { // 反射获得一个类的字节码 Class stuClass = Class.forName("reflect.S原创 2020-07-26 17:16:47 · 234 阅读 · 0 评论 -
模拟反编译,输出一个类的所有属性
模拟反编译,输出一个类的所有属性:测试代码:package reflect;import java.lang.reflect.Field;import java.lang.reflect.Modifier;public class Test08 { public static void main(String[] args) { String className = "java.lang.String"; Class aClass = null;原创 2020-07-26 17:14:41 · 226 阅读 · 0 评论 -
反射机制反射类中的Field
反射机制获取一个类的属性Field:Field是一个类,称为字段,属性。例如:public int id; 整个属性的代码组成一个字段对象。测试代码:package reflect;import java.lang.reflect.*;public class Test07 { public static void main(String[] args) { // 获取指定类的字节码文件 Class stuClass = null;原创 2020-07-26 17:12:49 · 535 阅读 · 0 评论 -
资源绑定器ResourceBundle获取“.properties”属性配置文件的内容
资源绑定器ResourceBundle:java.util.ResourceBundle:这个类是专门用来获取属性配置文件的内容。只能读取“xxx.properties”属性配置文件,且该文件一定得放在src类路径下。注意:这个类只能读取“xxx.properties”属性配置文件,且该文件一定得放在src类路径下。ResourceBundle bundle = ResourceBundle.getBundle(“filetest01”);后缀不能写,写了会出异常先准备一个属性配置文件:在原创 2020-07-26 13:17:27 · 594 阅读 · 0 评论 -
文件路径通用的一种写法
文件路径通用的一种写法:思考一下这样写代码有什么问题?FileReader fr = new FileReader(“IOtest\reflecttest01.properties”);这种方式的路径缺点是:移植性差,在IDEA中默认的当前路径是project的根。这个代码假设离开了IDEA,换到了其他位置,可能当前路径就不是project的根了。此时路径就没有效果了。所以我们以后不会这样写路径。接下来说一种比较通用的一种路径方式。即使代码换位置了,也能找得到路径。注意:使用这种通用的方式的前原创 2020-07-26 12:13:04 · 1219 阅读 · 0 评论 -
Class.forName()的执行会导致类加载
Class.forName()的执行发生了什么?会导致类加载,类加载就会执行静态代码块。如果你只想让某个类,只执行静态代码块,可以使用此方法。提示:后续的JDBC技术还需要这样执行原理。测试代码:package reflect;public class Test04 { public static void main(String[] args) { try { Class.forName("reflect.MyClass"); // 导致re原创 2020-07-26 12:04:06 · 1234 阅读 · 0 评论 -
验证反射机制的灵活性
验证反射机制的灵活性:代码写一次,不用改变代码,只需该文件的内容,就可以创建不同类的实例对象,非常灵活。先创建一个配置文件,以properties结尾:测试代码:package reflect;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.util.Properties;public class Test03 { pub原创 2020-07-26 12:01:23 · 138 阅读 · 0 评论 -
通过反射机制获取Class,再实例化对象
通过反射机制获取Class,再实例化对象:测试代码:package reflect;public class Test02 { public static void main(String[] args) { // 不使用反射机制创建对象 User u1 = new User(1001); System.out.println(u1); // User{id=1001} // 使用反射机制创建对象 try {原创 2020-07-26 11:54:48 · 364 阅读 · 0 评论 -
反射机制获取Class字节码文件的三种方式
反射机制:1、反射机制有什么用?通过java语言中的反射机制可以操作字节码文件,可以读和改字节码文件。操作代码片段,即读写class文件。2、反射机制的相关类在哪个包下?java.lang.reflect.*;3、反射机制相关的重要类有哪些?java.lang.Class:代表整个字节码,代表整个类,不是代表某个对象。java.lang.reflect.Method:代表字节码中的方法字节码。java.lang.reflect.Field:代表字节码中的属性字节码。java.lang原创 2020-07-26 11:52:52 · 940 阅读 · 0 评论 -
关于Object类中的wait()和notify()方法实现生产者和消费者模式
package thread;/*关于Object类中的wait()和notify()方法(生产者和消费者模式): 1、首先,wait()和notify()方法不是线程对象的方法,是java中任何一个对象都有的方法, 因为这两个方法是Object类中自带的。 2、这两个方法的作用: (1)wait()方法的作用: Object obj = new Object(); obj.wait(); 表示:让正在obj对象上活动的当前线程进入等待状态,永久原创 2020-07-25 15:22:20 · 288 阅读 · 0 评论 -
实现线程的第三种方式
实现线程的第三种方式:实现Callable接口,实现接口中的call()方法。(JDK8新特性)这种方式实现的线程可以获取线程的返回值,返回Object类型,属于引用类型。之前的两种线程实现方式无法获取线程的返回值,因为run()方法返回类型是void。复习一下之前的两种实现线程的方式:(1)编写一个类,直接继承java.lang.Thread,并重写run()方法。(2)编写一个类,实现java.lang.Runnable接口,实现接口中的run()方法。再创建线程Thread对象。编写的类原创 2020-07-25 11:25:27 · 174 阅读 · 0 评论 -
关于定时器Timer类的使用
关于定时器Timer类:定时器的作用:间隔特定的时间,执行特定的程序。在实际开发中,每隔一定的时间执行一段特定的程序,这种需求是很常见的, 那么在java中其实可以采用多种方式实现:(1)可以使用Thread.sleep()方法,睡眠,设置好休眠的时间,在特定的时间醒来,这种方式是最原始的定时器,比较低级。(2)在java的类库中已经写好了一个定时器:java.util.Timer,可以直接拿来用。不过,这种方式在目前的开发中也很少用,因为现在有很多高级框架都是支持定时任务的。(3)目前使用原创 2020-07-25 11:21:20 · 927 阅读 · 0 评论 -
关于守护线程的概念
关于守护线程:java语言中线程分为两大类:用户线程,守护线程(后台线程)。守护线程最具有代表性的就是:垃圾回收线程。守护线程的特点:一般守护线程是一个死循环,所有的用户线程结束后,守护线程会自动结束。注意:主线程main方法是一个用户线程。如何将线程设置成守护线程?在线程启动之前,调用:线程对象.setDaemon(true);守护线程用在什么地方呢?通常用在,所有的用户线程结束后,你希望自己设置的守护线程也跟着结束。测试代码:public class Test11 {原创 2020-07-25 11:17:36 · 575 阅读 · 0 评论 -
死锁的代码怎么写
死锁的代码要会写,只有会写死锁的代码,以后才会注意避免产生死锁的问题。测试代码:public class Test01 { public static void main(String[] args) { Object o1 = new Object(); Object o2 = new Object(); MyThread1 t1 = new MyThread1(o1, o2); MyThread2 t2 = new MyTh原创 2020-07-25 11:15:17 · 432 阅读 · 0 评论 -
看一道关于synchronized的面试题
看一道关于synchronized的面试题:问题:m2()方法的执行 需要 等待m1()方法执行结束吗?如果m2()方法上也有synchronized修饰呢,同样的问题,需要等吗?题目代码:public class Test02 { public static void main(String[] args) { MyClass mc = new MyClass(); MyThread t1 = new MyThread(mc); MyTh原创 2020-07-24 21:29:25 · 171 阅读 · 0 评论