> 文章列表 > Java笔记一(黑马)

Java笔记一(黑马)

Java笔记一(黑马)

目录

  • 一.标准的javaBean
  • 二.反射
    • 1.获取class对象的三种方式
    • 2.反射获取构造方法
    • 3.反射获取成员变量
    • 4.反射获取成员方法
  • 三.网络编程
    • TCP Serve/Client
    • NIO框架Netty

一.标准的javaBean

Java笔记一(黑马)

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