首页
留言
Search
1
在Centos7下搭建Socks5代理服务器
1,035 阅读
2
在windows11通过Zip安装Mysql5.7
574 阅读
3
Mysql5.7开放远程登录
482 阅读
4
数据库
469 阅读
5
mysql5.7基本命令
377 阅读
综合
正则表达式
git
系统
centos7
ubuntu
kali
Debian
网络
socks5
wireguard
运维
docker
hadoop
kubernetes
hive
openstack
ElasticSearch
ansible
前端
三剑客
Python
Python3
selenium
Flask
PHP
PHP基础
ThinkPHP
游戏
我的世界
算法
递归
排序
查找
软件
ide
Xshell
vim
PicGo
Typora
云盘
安全
靶场
reverse
Java
JavaSE
Spring
MyBatis
C++
QT
数据库
mysql
登录
Search
标签搜索
java
centos7
linux
centos
html5
JavaScript
php
css3
mysql
spring
mysql5.7
linux全栈
ubuntu
BeanFactory
SpringBean
python
python3
ApplicationContext
kali
mysql8.0
我亏一点
累计撰写
139
篇文章
累计收到
8
条评论
首页
栏目
综合
正则表达式
git
系统
centos7
ubuntu
kali
Debian
网络
socks5
wireguard
运维
docker
hadoop
kubernetes
hive
openstack
ElasticSearch
ansible
前端
三剑客
Python
Python3
selenium
Flask
PHP
PHP基础
ThinkPHP
游戏
我的世界
算法
递归
排序
查找
软件
ide
Xshell
vim
PicGo
Typora
云盘
安全
靶场
reverse
Java
JavaSE
Spring
MyBatis
C++
QT
数据库
mysql
页面
留言
搜索到
19
篇与
JavaSE
的结果
2023-02-20
Java 动态代理作用与应用场景
Java 动态代理作用与应用场景场景某系统有一个用户管理类,包含用户登录,删除用户,查询用户等功能,系统要求统计每个功能的执行耗时情况,以便后期观察程序性能定义接口public interface UserService { void login(String loginName,String passWord) throws Exception; void deleteUsers() throws Exception; String[] selectUsers() throws Exception; }定义接口重写实现类public class UserServiceable implements UserService{ @Override public void login(String loginName, String passWord) throws Exception { if (loginName.equals("admin") && passWord.equals("123456")){ System.out.println("登入成功"); }else { System.out.println("登入失败"); } Thread.sleep(1000); } @Override public void deleteUsers() throws Exception { System.out.println("删除成功"); Thread.sleep(1500); } @Override public String[] selectUsers() throws Exception { System.out.println("查询用户成功"); Thread.sleep(500); return new String[]{"张三", "李四", "王五"}; } }主函数执行方法public static void main(String[] args) throws Exception { UserService u = new UserServiceable(); UserService userService = (UserService) Proxy.newProxyInstance(UserServiceable.class.getClassLoader(), UserServiceable.class.getInterfaces(), new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("-----------------"); System.out.println(method.getName() + "方法开始执行"); long startTime = System.currentTimeMillis(); System.out.println("运行开始时间:" + String.valueOf(startTime)); Object invoke = method.invoke(u,args); long endTime = System.currentTimeMillis(); System.out.println("运行结束时间:" + String.valueOf(endTime)); System.out.println("deleteUsers方法耗时" + (endTime - startTime) / 1000.0 + "秒"); System.out.println("-----------------"); return invoke; } }); userService.login("admin","123456"); userService.login("admin1","1234561"); userService.selectUsers(); userService.deleteUsers(); }运行结果login方法开始执行 运行开始时间:1676900709812 登入成功 运行结束时间:1676900710820 deleteUsers方法耗时1.008秒 ----------------- ----------------- login方法开始执行 运行开始时间:1676900710825 登入失败 运行结束时间:1676900711832 deleteUsers方法耗时1.007秒 ----------------- ----------------- selectUsers方法开始执行 运行开始时间:1676900711832 查询用户成功 运行结束时间:1676900712335 deleteUsers方法耗时0.503秒 ----------------- ----------------- deleteUsers方法开始执行 运行开始时间:1676900712335 删除成功 运行结束时间:1676900713846 deleteUsers方法耗时1.511秒 -----------------
2023年02月20日
95 阅读
0 评论
0 点赞
2023-02-20
Java 动态代理
Java 动态代理程序为什么需要代理?对象如果嫌身上干的事情太多,可以通过代理来转移部分职责对象有什么方法写被代理,代理就一定要有对应的方法定义接口public interface Star { String sing(String name); void dance(); }定义继承接口重写类public class BigStar implements Star{ private String name; public BigStar(String name){ this.name = name; } public String sing(String name){ System.out.println(this.name + "正在唱" + name); return "谢谢!谢谢"; } public void dance(){ System.out.println(this.name + "正在跳舞"); } }主方法运行import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class Main { public static void main(String[] args) { Star star = new BigStar("小明"); /* ClassLoader loader,Class<?>[] interfaces,InvocationHandler h 参数1:用于指定一个类加载器 参数2:指定生成的代理长什么样子,有哪些方法 参数3:用来指定生成的代理对象要干什么事情 */ Star starProxy = (Star) Proxy.newProxyInstance(BigStar.class.getClassLoader(), BigStar.class.getInterfaces(), (Object proxy, Method method, Object[] args1) -> { if (method.getName().equals("sing")){ System.out.println("准备话筒"); }else if (method.getName().equals("dance")){ System.out.println("准备场地"); } return method.invoke(star,args1); }); starProxy.dance(); String text = starProxy.sing("好日子"); System.out.println(text); } }结果输出准备场地 小明正在跳舞 准备话筒 小明正在唱好日子 谢谢!谢谢
2023年02月20日
120 阅读
0 评论
0 点赞
2023-02-20
Java 注解作用与应用场景
Java 注解作用与应用场景模拟Junit框架需求:定义若干个方法,只要加了MyTest注解,就会触发该方法执行。分析:定义一个自定义注解MyTest,只能注解方法,存活范围是一直都在。定义若干个方法,部分方法加上@MyTest注解修饰,部分方法不加模拟一个junit程序,可以触发加了@MyTest注解方法执行package frame; import java.lang.annotation.ElementType; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.lang.annotation.Retention; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @Target(ElementType.METHOD) //注解只能在方法使用 @Retention(RetentionPolicy.RUNTIME) //让注解可以一直存活 @interface MyTest { } public class DEMO { // @MyTest private void test1(){ System.out.println("-----test1-----"); } @MyTest public void test2(){ System.out.println("-----test2-----"); } // @MyTest public void test3(){ System.out.println("-----test3-----"); } @MyTest private void test4(){ System.out.println("-----test4-----"); } public static void main(String[] args) throws InvocationTargetException, IllegalAccessException { Class demoClass = DEMO.class; DEMO demo = new DEMO(); Method[] declaredMethods = demoClass.getDeclaredMethods(); for (Method declaredMethod : declaredMethods) { if (declaredMethod.isAnnotationPresent(MyTest.class)){ declaredMethod.setAccessible(true); declaredMethod.invoke(demo); } } } }运行结果-----test2----- -----test4-----
2023年02月20日
113 阅读
0 评论
0 点赞
2023-02-20
Java 注解
Java 注解注解(Annotation)就是Java代码里的特殊标记,比如:@Override、@Test等,作用是:让其他程序根据注解信息来决定怎么执行该程序。注意:注解可以用在类上、构造器上、方法上、成员变量上、参数上等位置自定义注解自己定义注解value: 特殊属性,只有一个value参数(或者其他参数有默认值)可以直接省略value写值模板: public @interface 注解名称{ public 属性类型 属性名() default 默认值; }案例@interface MyTest1 { String aaa(); boolean bbb() default true; String[] ccc(); } @interface MyTest2 { String value(); //特殊属性,只有一个value参数(或者其他参数有默认值)可以直接省略value写值 } @interface MyTest3 { String value(); //特殊属性,只有一个value参数(或者其他参数有默认值)可以直接省略value写值 int age() default 1; } @MyTest1(aaa = "类注解",ccc = {"a","b","c"}) public class AnnotationTest1 { @MyTest1(aaa = "函数注解",ccc = {"aa","bb","cc"}) public void test1(){ } @MyTest2("只有一个value参数(或者其他参数有默认值)可以直接省略value写值2") public void test2(){ } @MyTest3("只有一个value参数(或者其他参数有默认值)可以直接省略value写值3") public void test3(){ } }注解的原理可以查看注解编译后的文件,本质上是接口,里面写的一些属性都是抽象方法字节码文件@interface MyTest1 { String aaa(); boolean bbb() default true; String[] ccc(); } @interface MyTest2 { String value(); } @interface MyTest3 { String value(); int age() default 1; }元注解指的是修饰注解的注解常见的元注解:@Target、@Retention@Target 声明被修饰的注解只能在哪些位置使用@Target(ElementType.TYPE)TYPE,类,接口FIELD,成员变量METHOD,成员方法PARAMETER,方法参数CONSTRUCTOR,构造器LOCAL_VARIABLE,局部变量@Target(ElementType.TYPE) // 当前被修饰的注解只能在类上使用 @interface MyTest4{ } @Target({ElementType.TYPE,ElementType.METHOD}) // 当前被修饰的注解只能在类和方法上使用 @interface MyTest5{ }@Retention 声明注解的保留周期@Retention()SOURCE 只作用在源码阶段,字节码文件中不存在CLASS(默认值) 保留到字节码文件阶段,运行阶段不存在RUNTIME(开发常用) 一直保留到运行阶段@Retention(RetentionPolicy.SOURCE)//只作用在源码阶段,字节码文件中不存在 @interface MyTest6 { } @Retention(RetentionPolicy.CLASS)//保留到字节码文件阶段,运行阶段不存在 @interface MyTest7 { } @Retention(RetentionPolicy.RUNTIME)//一直保留到运行阶段 @interface MyTest8 { }注解的解析判断类上、方法上、成员变量上是否存在注解,并把注解里的内容给解析出来使用反射package Annotations; import java.lang.annotation.*; import java.lang.reflect.Method; import java.util.Arrays; @Target({ElementType.METHOD,ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface MyTestAnnotation { String value(); double aaa() default 100; String[] bbb(); } @MyTestAnnotation(value = "类注解",aaa = 99.5,bbb = {"a","b"}) class TestClass { @MyTestAnnotation(value = "方法注解",aaa = 199.5,bbb = {"b","a"}) public void test1(){ } } public class MyTestClass{ public static void main(String[] args) throws Exception{ { // 1.获取class对象 Class c = TestClass.class; // 2.解析类上的注解 // 判断类上是否包含了某个注解 if (c.isAnnotationPresent(MyTestAnnotation.class)){ MyTestAnnotation myTestAnnotation = (MyTestAnnotation) c.getDeclaredAnnotation(MyTestAnnotation.class); System.out.println(myTestAnnotation.value()); System.out.println(myTestAnnotation.aaa()); System.out.println(Arrays.toString(myTestAnnotation.bbb())); } } System.out.println("--------------------------"); { // 1.获取class对象 Class c = TestClass.class; Method m = c.getDeclaredMethod("test1"); // 2.解析方法上的注解 // 判断方法上是否包含了某个注解 if (m.isAnnotationPresent(MyTestAnnotation.class)){ MyTestAnnotation myTestAnnotation = (MyTestAnnotation) m.getDeclaredAnnotation(MyTestAnnotation.class); System.out.println(myTestAnnotation.value()); System.out.println(myTestAnnotation.aaa()); System.out.println(Arrays.toString(myTestAnnotation.bbb())); } } } }输出结果类注解 99.5 [a, b] -------------------------- 方法注解 199.5 [b, a]
2023年02月20日
101 阅读
0 评论
0 点赞
2023-02-20
Java 反射作用与应用场景
Java 反射作用与应用场景反射的作用基本使用:可以得到一个类的全部成分然后操作可以破坏封装性最重要的用途是:适合做java的框架,基本上,主流的框架都会基于反射设计出一些通用的功能。案例使用反射做一个简易版的框架对于任意一个对象,该框架都可以把对象的字段名和对应的值,保存到文件中去。实现代码: public class frame { class Student{ private String name; private int age; private char sex; private double height; private String hobby; Student(String name, int age, char sex, double height, String hobby) { this.name = name; this.age = age; this.sex = sex; this.height = height; this.hobby = hobby; } } class Teacher{ private String name; private double salary; Teacher(String name, double salary) { this.name = name; this.salary = salary; } } public static void save(Object obj) throws IllegalAccessException, FileNotFoundException { // 打开io文件写入流 PrintStream printStream = new PrintStream(new FileOutputStream("1.txt",true)); // obj 是任意对象,到底有多少个字段要保存 Class c = obj.getClass(); printStream.println("-----------" + c.getSimpleName() + "-----------"); // 从这个类中提取它的全部成员变量 Field[] fields = c.getDeclaredFields(); // 遍历每个成员变量 for (Field field : fields) { // 破坏权限检查 field.setAccessible(true); // 取值 String name = field.getName(); String value = String.valueOf(field.get(obj)); // 写入文件 printStream.println(name + " = " + value); } // 关闭io文件写入流 printStream.close(); } public static void main(String[] args) throws NoSuchFieldException, FileNotFoundException, IllegalAccessException { System.out.println("创建学生变量"); Student student = new frame().new Student("张三",18,'男',170.1,"学生"); System.out.println("写入信息到文本"); save(student); System.out.println("创建教师变量"); Teacher teacher = new frame().new Teacher("李四",5000); save(teacher); System.out.println("写入信息到文本"); } }执行结果创建学生变量 写入信息到文本 创建教师变量 写入信息到文本文本输出(1.txt)-----------Student----------- name = 张三 age = 18 sex = 男 height = 170.1 hobby = 学生 this$0 = Reflection.frame@b4c966a -----------Teacher----------- name = 李四 salary = 5000.0 this$0 = Reflection.frame@1d81eb93
2023年02月20日
129 阅读
0 评论
0 点赞
1
2
...
4