首页
留言
Search
1
在Centos7下搭建Socks5代理服务器
1,036 阅读
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 反射反射(Reflection)反射就是:加载类,并且允许以编程的方式解剖类中的各种成分(成员变量、方法、构造器等)。获取类的信息并且操作类1.反射第一步:加载类,获取类的字节码:Class对象2.获取类的构造器:Constructor对象3.获取类的成员变量:Field对象4.获取类的成员方法:Method对象获取Class对象的三种方式Class c1 = 类名.class调用Class提供方法:public static Class forName(String package);Object提供的方法:public Class getClass(); Class c3 = 对象.getClass(); public static void main(String[] args) throws ClassNotFoundException { Class c1 = Object.class; System.out.println(c1.getName()); System.out.println(c1.getSimpleName()); Class c2 = Class.forName("java.lang.Object"); System.out.println(c1==c2); Object obj = new Object(); Class c3 = obj.getClass(); System.out.println(c3 == c2); }运行结果java.lang.Object Object true true定义Students类 class Student{ private String name; private int age; public int publicName; public Student(){ System.out.println("无参构造"); } public Student(int a){ System.out.println("有参构造"); } Student(int a,int b){ System.out.println("default修饰有参构造"); } private Student(int a, int b, int c){ System.out.println("private修饰有参构造"); } public String getName() { return name; } public void setName(String name) { this.name = name; } private void run(){ System.out.println("私密方法运行"); } }获取类的构造器 public class Reflection { public static void getAll(){ // 1.反射第一步:必须得到这个类的Class对象 Class<Student> c = Student.class; // 2.获取类的全部构造器 // getConstructors只能获取public修饰的全部构造器 // Constructor[] constructors = c.getConstructors(); // getDeclaredConstructors可以获取所有存在的构造器 Constructor[] constructors = c.getDeclaredConstructors(); // 3.遍历数组中的每个构造器对象 for (Constructor constructor : constructors){ System.out.println(constructor.getName() + "---->" + constructor.getParameterCount()); } } public static void getOne() throws Exception { // 1.反射第一步:必须得到这个类的Class对象 Class c = Student.class; // 2.获取类的某个构造器 // getConstructor只能获取public修饰的单个构造器 // Constructor<Student> constructor = c.getConstructor(); // getDeclaredConstructor可以单个存在的构造器 Constructor constructor = c.getDeclaredConstructor(); System.out.println(constructor.getName() + "---->" + constructor.getParameterCount()); // 3.获取有参数构造器 Constructor constructor1 = c.getDeclaredConstructor(int.class); System.out.println(constructor1.getName() + "---->" + constructor1.getParameterCount()); } public static void main(String[] args) throws Exception { getAll(); System.out.println("----------------------"); getOne(); } }运行结果study.Student---->3 study.Student---->2 study.Student---->1 study.Student---->0 ---------------------- study.Student---->0 study.Student---->1类构造器的作用setAccessible(true)禁止检查访问控制(可以破坏封装性)newInstance()执行构造器的方法 public static void main(String[] args) throws InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException { Class c = Student.class; Constructor constructor = c.getDeclaredConstructor(); constructor.newInstance(); Constructor constructor1 = c.getDeclaredConstructor(int.class,int.class,int.class); constructor1.setAccessible(true); constructor1.newInstance(1,2,3); }运行结果无参构造 private修饰有参构造获取类的成员变量setAccessible(true)禁止检查访问控制(可以破坏封装性)set 赋值get 取值 public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException { // 1.反射第一步:必须是先得到类的Class对象 Class studentClass = Student.class; System.out.println(studentClass.getName()); System.out.println("------------------------"); // 2.获取类的全部成员变量 // getFields获取类的全部public修饰的成员变量 Field[] publicFields = studentClass.getFields(); for (Field field : publicFields){ System.out.println("public成员变量:" + field.getName() + "--->" + field.getType()); } System.out.println("------------------------"); // getDeclaredFields获取类的全部存在成员变量 Field[] Fields = studentClass.getDeclaredFields(); for (Field field : Fields){ System.out.println("所有成员变量:" + field.getName() + "--->" + field.getType()); } System.out.println("------------------------"); // 3.定位某个成员变量 { Field field = studentClass.getDeclaredField("name"); System.out.println("所有成员变量:" + field.getName() + "--->" + field.getType()); System.out.println("------------------------"); // 赋值 Student student = new Student(); field.setAccessible(true); // 禁止访问控制权限 field.set(student,"暴力赋值"); System.out.println(student.getName()); System.out.println("------------------------"); //取值 String name = (String) field.get(student); System.out.println(name); } }运行结果------------------------ public成员变量:publicName--->int ------------------------ 所有成员变量:name--->class java.lang.String 所有成员变量:age--->int 所有成员变量:publicName--->int ------------------------ 所有成员变量:name--->class java.lang.String ------------------------ 无参构造 暴力赋值 ------------------------ 暴力赋值获取类的成员方法setAccessible(true)禁止检查访问控制(可以破坏封装性)invoke(),执行方法,括号内必须传入类的对象 public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { Class c = Student.class; // getMethods获取所有public修饰的成员方法 Method[] publicMethods = c.getMethods(); // getDeclaredMethods获取所有存在的成员方法 Method[] methods = c.getDeclaredMethods(); for (Method method : methods) { System.out.println(method.getName() + "----" + method.getParameterCount() + "----" + method.getReturnType()); } System.out.println("-------------------------"); Student student = new Student(); Method run = c.getDeclaredMethod("run"); run.setAccessible(true); run.invoke(student); System.out.println("-------------------------"); Method setName = c.getDeclaredMethod("setName", String.class); setName.invoke(student,"方法赋值"); Method getName = c.getDeclaredMethod("getName"); System.out.println(getName.invoke(student));; }运行结果getName----0----class java.lang.String run----0----void setName----1----void ------------------------- 无参构造 私密方法运行 ------------------------- 方法赋值
2023年02月20日
121 阅读
0 评论
0 点赞
2023-02-20
Java 二分查找(折半查找)
Java 二分查找(折半查找)二分查找的前提:必须是排序好的数据折半的条件:min<=max public static boolean towSearch(int[] a,int search){ int min = 0; int max = a.length - 1; int mid = (min + max) / 2; int i = 0; while (min <= max){ System.out.println("第 " + ++i + " 次查找"); if (search == a[mid]){ return true; } if (search < a[mid]){ max = mid - 1; mid = (min + max) / 2; } if (search > a[mid]){ min = mid + 1; mid = (min + max) / 2; } } return false; } public static void main(String[] args) { int[] a = {1,2,3,4,5,6,7,8,9,10}; int search = 3; System.out.println(towSearch(a,3)); }结果第 1 次查找第 2 次查找true
2023年02月20日
108 阅读
0 评论
0 点赞
2023-02-20
Java 选择排序
Java 选择排序从0索引开始,拿着每一个索引上的元素跟后面的元素依次比较 public static void main(String[] args) { int[] a = {5,4,2,1,3,6,8,9,10}; for (int i = 0; i < a.length - 1; i++) { for (int j = i + 1; j < a.length; j++) { if (a[i] > a[j]){ a[i] = a[i] ^ a[j]; a[j] = a[i] ^ a[j]; a[i] = a[i] ^ a[j]; } } } System.out.println(Arrays.toString(a)); }结果[1, 2, 3, 4, 5, 6, 8, 9, 10]
2023年02月20日
140 阅读
0 评论
0 点赞
2023-02-20
Java 冒泡排序
Java 冒泡排序 public static void main(String[] args) { int[] a = {5,4,2,1,3,6,8,9,10}; for (int i = 0; i < a.length - 1; i++) { for (int ii = 0;ii < a.length - 1 - i;ii++){ if (a[ii] > a[ii+1]){ a[ii] = a[ii] ^ a[ii+1]; a[ii+1] = a[ii] ^ a[ii+1]; a[ii] = a[ii] ^ a[ii+1]; } } } System.out.println(Arrays.toString(a)); } }结果[1, 2, 3, 4, 5, 6, 8, 9, 10]
2023年02月20日
108 阅读
0 评论
0 点赞
2023-02-20
Java Integer值比较
Java Integer值比较 Integer i1 = 127; Integer i2 = 127; System.out.println(i1 == i2);结果为:true Integer i1 = 129; Integer i2 = 129; System.out.println(i1 == i2);结果为:false Integer i1 = -128; Integer i2 = -128; System.out.println(i1 == i2);结果为:true public static Integer valueOf(int i) { if (i >= -128) && i <= 127)) return IntegerCache.cache[i + (--128)]; return new Integer(i); }查看Integer类源代码中,传入的数值如果在-128和127之间,将会进行自动装箱,自动帮我们调用Integer.valueOf(值),所以在-128到127之间的数据,将会直接冲底层数值中取出提前创建好的数据并返回,所以为true,如果装箱的数据不在范围之间,则会创建新的对象,对象地址不相同,所以为false
2023年02月20日
110 阅读
0 评论
0 点赞
1
2
3
4