先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
正文
}
2.2 java.lang.reflect.Method
(一)反射类当中所有的Method
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
//如何通过反射机制获取方法
public class reflectTest08 {
public static void main(String[] args) {
//获取类
Class userServiceClass = null;
try {
userServiceClass = Class.forName(“javasetest.UserService”);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//获取所有的方法
Method[] methods = userServiceClass.getDeclaredMethods();
//看一下有多少方法
System.out.println(methods.length);//2
//遍历
for (Method method : methods){
//修饰符列表
System.out.println(Modifier.toString(method.getModifiers()));
//获取返回值类型
System.out.println(method.getReturnType().getSimpleName());
//获取方法名
System.out.println(method.getName());
//方法参数的修饰符列表
Class[] parameterTypes = method.getParameterTypes();
for(Class p:parameterTypes){
System.out.println(p.getSimpleName());
}
}
}
}
(二)通过反射机制调用对象的方法
import javasetest.UserService;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/*
-
重点:必须掌握
-
通过反射机制再怎么调用一个对象的方法
-
*/
public class reflectTest09 {
public static void main(String[] args) {
//不使用反射机制怎么调用方法?
UserService user1 = new UserService();
//调用方法
boolean log1 = user1.login(“钢铁侠”,“123”);
System.out.println(log1);//true
//使用反射机制
Class userServiceClass = null;
try {
userServiceClass = Class.forName(“javasetest.UserService”);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//创建对象
Object object = null;
try {
object = userServiceClass.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
//获取方法
Method methodLog = null;
try {
methodLog = userServiceClass.getMethod(“login”,String.class,String.class);
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
//调用方法
Object log2 = false;
try {
log2 = methodLog.invoke(object,“美国队长”,“321”);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
System.out.println(log2);//false
}
}
2.3 java.lang.reflect.Constructor
import java.lang.reflect.Constructor;
import java.lang.reflect.Modifier;
/*
反编译一个类的Constructor构造方法
- */
public class ReflectTest10 {
public static void main(String[] args) throws Exception{
StringBuilder s= new StringBuilder();
Class vipClass = Class.forName(“javase.bean.Vip”);
s.append(Modifier.toString(vipClass.getModifiers()));
s.append(" class ");
s.append(vipClass.getSimpleName());
s.append(“{\n”);
//拼接构造方法
Constructor[] constructors = vipClass.getDeclaredConstructors();
for (Constructor constructor : constructors){
s.append(“\t”);
s.append(Modifier.toString(constructor.getModifiers()));
s.append(" ");
s.append(vipClass.getSimpleName());
s.append(“(”);
//拼接参数
Class[] parameterTypes = constructor.getParameterTypes();
for (Class p: parameterTypes){
s.append(p.getSimpleName());
s.append(“,”);
}
if (parameterTypes.length > 0){
s.deleteCharAt(s.length() - 1);
}
s.append(“){}\n”);
}
s.append(“}”);
System.out.println(s);
}
}
2.4 java.lang.reflect.Field:
代表字节码中的属性字节码。代表类中的成员变量(静态变量+实例变量)。
(一)反射类当中所有的Field
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
/*
-
反射Student类当中所有的Field(了解)
-
*/
public class ReflectTest05 {
public static void main(String[] args) {
//获取整个类
try {
Class studentClass = Class.forName(“javasetest.bean.Student”);
//获取类的名字
String stringName = studentClass.getName();
System.out.println("完整类名 " + stringName);//完整类名 javasetest.bean.Student
//获取类的简单名字
String stringSimpleName = studentClass.getSimpleName();
System.out.println("简单类名 " + stringSimpleName);//简单类名 Student
//获取Student类的属性
Field[] fields = studentClass.getFields();
//想知道里面有几个属性
System.out.println(fields.length);//1
//想知道里面是什么元素
//取出整个Field
System.out.println(fields[0]);//public int javasetest.bean.Student.no
//取出这个属性的名字
//说明只有 public 修饰的可以被取出来
System.out.println(fields[0].getName());//no
//取出所有的属性
Field[] fields1 = studentClass.getDeclaredFields();
//看里面是不是有四个元素
System.out.println(fields1.length);//4
//遍历
for (int i = 0; i < fields1.length; i++) {
//取出名字
//System.out.println(fields1[i].getName());
//获取属性的类型
//System.out.println(fields1[i].getType());
//获取属性修饰符
//int j = fields1[i].getModifiers();//1 2 4 0
//将代号转化成字符串
//String string = Modifier.toString(j);
//public
//private
//protected
//
int j = fields1[i].getModifiers();
String string = Modifier.toString(j);
Object type = fields1[i].getType();
String stringname = fields1[i].getName();
System.out.print( j +" “+ string +” "+type + " "+stringname);
System.out.println();
//1 public int no
//2 private class java.lang.String name
//4 protected int age
//0 boolean sex
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
(二)通过反编译,反编译一个类属性Field
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
//通过反编译,反编译一个类属性Field(了解)
public class ReflectTest06 {
public static void main(String[] args) {
//拼接字符串
StringBuilder stringBuilder = new StringBuilder();
//获得整个类的class
try {
Class studentClass = Class.forName(“javasetest.bean.Student”);
stringBuilder.append(Modifier.toString(studentClass.getModifiers()) + " class " + studentClass.getSimpleName() + “{”);
stringBuilder.append(“\n”);
Field[] fields = studentClass.getDeclaredFields();
for (Field field : fields){
stringBuilder.append(“\t”);
stringBuilder.append(Modifier.toString(field.getModifiers()));
stringBuilder.append(" ");
stringBuilder.append(field.getType().getSimpleName());
stringBuilder.append(" ");
stringBuilder.append(field.getName());
stringBuilder.append(“;”);
stringBuilder.append(“\n”);
}
stringBuilder.append(“}”);
System.out.println(stringBuilder);
//public class Student{
// public int no;
// private String name;
// protected int age;
// boolean sex;
//}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
(三)通过放射机制访问一个java对象的属性
import javasetest.bean.Student;
import java.lang.reflect.Field;
/*必须掌握:
-
怎么通过放射机制访问一个java对象的属性?
-
给属性赋值 set
-
获取属性的值get
-
*/
public class ReflectTest07 {
public static void main(String[] args) {
//不使用反射机制,怎么访问一个java对象的属性
Student student = new Student();
System.out.println(student.no);//0
student.no = 10;
System.out.println(student.no);//10
//使用反射机制
try {
Class studentClass = Class.forName(“javasetest.bean.Student”);
//实例化对象
Object object = studentClass.newInstance();//底层调用无参构造
//获取属性(根据属性名称)
Field noField = studentClass.getDeclaredField(“no”);
//给o对象(Student对象)的no属性赋值
/*
-
object : 对象 引用
-
field: 属性
-
2222 : 字面量
-
放射机制让代码复杂了,但是为了“灵活”
-
*/
noField.set(object,222);
//读取属性的值
System.out.println(noField.get(object));//222
//试一下可不可以访问是有属性
Field nameField = studentClass.getDeclaredField(“name”);
//java.lang.IllegalAccessException:
// class javasetest.reflect.ReflectTest07
// cannot access a member of class javasetest.bean.Student with modifiers “private”
//如果没有下面这行代码
nameField.setAccessible(true);//打破封装
nameField.set(object,“钢铁侠”);
System.out.println(nameField.get(object));//可以访问私有属性
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}
}
2.5 如何获取父类及类实现的接口
//给你一个类,怎么获取这个类的父类
public class ReflectTest13 {
public static void main(String[] args) throws Exception {
//先获取本类
Class stringClass = Class.forName(“java.lang.String”);
//本类的父类
Class superClass = stringClass.getSuperclass();
写在最后
很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。
最后祝愿各位身体健康,顺利拿到心仪的offer!
由于文章的篇幅有限,所以这次的蚂蚁金服和京东面试题答案整理在了PDF文档里
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
s) throws Exception {
//先获取本类
Class stringClass = Class.forName(“java.lang.String”);
//本类的父类
Class superClass = stringClass.getSuperclass();
写在最后
很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。
最后祝愿各位身体健康,顺利拿到心仪的offer!
由于文章的篇幅有限,所以这次的蚂蚁金服和京东面试题答案整理在了PDF文档里
[外链图片转存中…(img-Nr2F4GKp-1713578375319)]
[外链图片转存中…(img-Lbuxx5eF-1713578375319)]
[外链图片转存中…(img-1XVPqd8b-1713578375319)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-kK8Ysbue-1713578375320)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!