Java笔记一(黑马)
目录
一.标准的javaBean
package com.itheima.domain;public class Student {//1.成员变量私有化//2.空参,带参构造方法//3.对于私有的成员变量,提供对应的setXxx和getXxx方法//4.可以使用插件ptg一键生成private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {this.name = name;}/*** 获取* @return age*/public int getAge() {return age;}/*** 设置* @param age*/public void setAge(int age) {this.age = age;}public String toString() {return "Student{name = " + name + ", age = " + age + "}";}}
二.反射
1.获取class对象的三种方式
package com.itheima.myreflect;import com.itheima.domain.Student;public class MyReflect1 {public static void main(String[] args) throws ClassNotFoundException {/*** 反射允许对成员变量,成员方法和构造方法的信息进行编程访问* 获取class对象的三种方式:* 1.Class.forName("全类名") 源代码阶段使用* 2.类名.class 加载阶段使用* 3.对象.getClass(); 运行阶段使用*///1.第一种方式//全类名:包名+类名//最为常用的Class clazz1 = Class.forName("com.itheima.domain.Student");//2.第二种方式//一般更多的是当做参数进行传递Class clazz2 = Student.class;//3.第三种方式//当我们已经有了这个类的对象时,才可以使用Student student=new Student();Class clazz3 = student.getClass();}
}
2.反射获取构造方法
package com.itheima.myreflect;import com.itheima.domain.Student;import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Parameter;public class MyReflect2 {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {/*** 获取class对象 Class* 构造方法 Constructor* 字段(成员变量)Field* 成员方法 Method*//*** Class类中用于获取构造方法的方法* Constructor<?>[] getConstructors()* Constructor<?>[] getDeclaredConstructors()* Constructor<T>[] getConstructors(Class<?>... parameterTypes)* Constructor<T>[] getDeclaredConstructors(Class<?>... parameterType)** Constructor类中用于创建对象的方法* T newInstance(Object... initargs)* setAccessible(boolean flag)**///1.获取class字节码文件对象Class clazz = Class.forName("com.itheima.domain.Student");/*//2.获取构造方法Constructor[] cons=clazz.getConstructors();for (Constructor con : cons) {System.out.println(con);}*//*Constructor[] cons = clazz.getDeclaredConstructors();for (Constructor con : cons) {System.out.println(con);}*/Constructor con1 = clazz.getDeclaredConstructor();System.out.println(con1);Constructor con2 = clazz.getDeclaredConstructor(String.class);System.out.println(con2);Constructor con3 = clazz.getDeclaredConstructor(int.class);System.out.println(con3);Constructor con4 = clazz.getDeclaredConstructor(String.class,int.class);System.out.println(con4);//3.构造方法的使用//获取权限修饰符int modifiers = con4.getModifiers();//获取参数Parameter[] parameters = con4.getParameters();for (Parameter parameter : parameters) {System.out.println(parameter);}//使用构造方法创建对象//暴力反射:表示临时取消权限校验con4.setAccessible(true);Student stu = (Student) con4.newInstance("张三", 20);System.out.println(stu);}
}
3.反射获取成员变量
package com.itheima.myreflect;import com.itheima.domain.Student;import java.lang.reflect.Field;public class MyReflect3 {/*** Class类中用于获取成员变量的方法* Field[] getFields(); 返回所有公共成员变量对象的数组* Field[] getDeclareFields() 返回所有成员变量对象的数组* Field[] getFields(String name) 返回单个公共成员变量对象* Filed[] getDeclareFields(String name) 返回单个成员变量对象** Field类中用于创建对象的方法* void set(Object obj,Object value) 赋值* Object get(Object obj) 获取值*/public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {//1.获取class字节码文件对象Class clazz = Class.forName("com.itheima.domain.Student");//2.获取所有成员变量Field[] fields = clazz.getDeclaredFields();for (Field field : fields) {System.out.println(field);}//获取单个成员变量Field name = clazz.getDeclaredField("name");//获取权限修饰符int modifiers = name.getModifiers();//获取成员变量的名字String n = name.getName();//获取成员变量的数据类型Class type = name.getType();//获取成员变量记录的值Student student = new Student("lisi", 23, "女");name.setAccessible(true);String value= (String) name.get(student);System.out.println(value);}}
4.反射获取成员方法
package com.itheima.myreflect;import com.itheima.domain.Student;import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;public class MyReflect4 {/*** Class类中用于获取成员方法的方法* Method[] getMethods():返回所有公共成员方法对象的数组,包括继承的* Method[] getDeclearMethods():返回所有成员方法对象的数组,不包括继承的* Method[] getMethods(String name,Class<?>...parameterTypes):返回单个公共成员方法对象* Method[] getDeclearMethods(String name,Class<?>...parameterTypes):返回单个成员方法对象**Method类中用于创建对象的方法* Object invoke(Object obj,Object...args) 运行方法* 参数一:用obj对象调用该方法* 参数二:调用方法的传递参数(如果没有就不写)* 返回值:方法的返回值(如果没有就不写)* 获取方法的修饰符* 获取方法的名字* 获取方法的形参* 获取方法的返回值* 获取方法的抛出的异常***/public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {//1.获取字节码文件对象Class clazz = Class.forName("com.itheima.domain.Student");//2.获取里面所有的方法对象(包括父类中所有的公共方法)/*Method[] methods = clazz.getMethods();for (Method method : methods) {System.out.println(method);}*///2.获取里面所有的方法对象(不能获取父类的,但是可以获取本类中私有的)Method[] methods = clazz.getDeclaredMethods();for (Method method : methods) {System.out.println(method);}//获取指定的单一方法Method declaredMethod = clazz.getDeclaredMethod("eat", String.class);//获取方法的修饰符int modifiers = declaredMethod.getModifiers();//获取方法的名字String name = declaredMethod.getName();//获取方法的形参Parameter[] parameters = declaredMethod.getParameters();for (Parameter parameter : parameters) {System.out.println(parameter);}//获取方法抛出的异常Class[] exceptionTypes = declaredMethod.getExceptionTypes();//方法运行/* Method类中用于创建对象的方法* Object invoke(Object obj,Object...args) 运行方法* 参数一:用obj对象调用该方法* 参数二:调用方法的传递参数(如果没有就不写)返回值:方法的返回值(如果没有就不写)*/Student s=new Student();declaredMethod.setAccessible(true);//参数一s:表示方法的调用者//参数二"汉堡包":表示在调用方法的时候传递的实际参数//result 方法的返回值String result = (String) declaredMethod.invoke(s, "汉堡包");System.out.println(result);}
}
三.网络编程
TCP Serve/Client
1.Java Socket Server Examples (TCP/IP):https://www.codejava.net/java-se/networking/java-socket-server-examples-tcp-ip
2.A Guide to Java Sockets:https://www.baeldung.com/a-guide-to-java-sockets
3.Spring Boot 搭建TCP Server:https://juejin.cn/post/6844904020264370183
4.SpringBoot 2 整合 Netty 实现基于 DTU 的 TCP 服务器 之 服务端:https://www.jianshu.com/p/3f11370a69e7
NIO框架Netty
5.一文读懂网络框架 Netty:https://www.infoq.cn/article/398qn2sicbswudtusm5c