Java笔记一(黑马)

news2025/1/9 11:11:43

目录

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

一.标准的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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/444975.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构-树及相关算法

二叉树 递归算法的关键要明确函数的定义&#xff0c;相信这个定义&#xff0c;而不要跳进递归细节。 写二叉树的算法题&#xff0c;都是基于递归框架的&#xff0c;我们先要搞清楚 root 节点它自己要做什么&#xff0c;然后根据题目要求选择使用前序&#xff0c;中序&#xff0…

colmap使用教程

COLMAP 是具有图形和命令行界面的通用运动结构 (SfM) 和多视图立体 (MVS) 管道。 它为有序和无序图像集的重建提供了广泛的功能。 常见的基于nerf算法均需要colmap来计算位姿 安装colmap&#xff1a; conda install colmap 需要使用python9 step1&#xff1a;准备多视角图…

第十三节 I/O流与文件操作

文件读写 输入输出流 文本文件 一个字节一个字节写 8位十进制最大255 int read() throws IOException 字节 java.io.OutputStream 将十进制数按字节 用文件的类 表达文件 1.txt 相对路径 &#xff1a;工程是同级的 绝对路径C盘下 D 万物皆对象 都能封装成对象…

xss-flash钓鱼配合msf捆绑上线

这里写目录标题 一&#xff0c;后门文件生成与制作二&#xff0c;flash安装钓鱼网站搭建三&#xff0c;监听四&#xff0c;钓鱼 一&#xff0c;后门文件生成与制作 打开kali&#xff0c;查看ip add 查看 ip 地址为 192.168.1.8 输入 msfconsole 1.生成后门 msfvenom -p window…

LeetCode 1026. Maximum Difference Between Node and Ancestor【DFS,BFS,树】中等

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

Direct3D 12——模板——平面镜效果

1.将实物照常渲染到后台缓冲区内&#xff08;不包括镜子&#xff09;。注意&#xff0c;此步骤不修改模 板缓冲区。 2.清理模板缓冲区&#xff0c;将其整体置零。 将实物都绘制到后台缓冲区中&#xff0c;并将模板缓冲区清理为0 &#xff08;用浅灰色来表示&#xff09;。 绘…

socked编程

socket是什么&#xff1f;套接字是什么&#xff1f; 什么是 socket&#xff1f; socket 的原意是“插座”&#xff0c;在计算机通信领域&#xff0c;socket 被翻译为“套接字”&#xff0c;它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定&#xff0c;一台…

Motion Planning学习笔记一:配置空间、图、图搜索、图遍历

学习高飞博士的路径规划课程所总结的学习笔记。 目录 1、配置空间&#xff08;Configuration Space, C-space&#xff09; 2、图&#xff08;Graphs&#xff09; 3、图搜索&#xff08;Graph Search Basis&#xff09; 3.1、总体框架 3.2、两种基本的图遍历算法 3.3、启…

漫谈大数据 - HiveSQL总结(二)查询操作

导语&#xff1a;HiveSQL各关键字详解&#xff0c;hive函数大全&#xff0c;类似于个人记录工具书&#xff0c;后续遇到其他的也会继续加进来。 有关hive库表操作请见上篇&#xff1a;漫谈大数据 - HiveSQL总结&#xff08;一&#xff09;库表操作_昊昊该干饭了的博客-CSDN博客…

一条SQL如何被MySQL架构中的各个组件操作执行的?

文章目录 1. 单表查询SQL在MySQL架构中的各个组件的执行过程2. SELECT的各个关键字在哪里执行&#xff1f;3. 表关联查询SQL在MySQL架构中的各个组件的执行过程4. LEFT JOIN将过滤条件放在子查询中再关联和放在WHERE子句上有什么区别&#xff1f;5. 聚集索引和全表扫描有什么区…

推动开发者平台本土化,高通加速中国XR内容生态发展

随着VR和AR技术快速发展&#xff0c;产品不断成熟&#xff0c;体验也变得越来越优秀。据悉&#xff0c;Meta Quest系列VR头显出货量超2000万台&#xff0c;基本证明了VR开始在消费类电子产品中占据一席之地。与此同时&#xff0c;近两年AR眼镜也在逐渐升温&#xff0c;成为了创…

day17_异常

今日内容 零、 复习昨日 一、作业 二、异常 三、自定义异常 零、 复习昨日 见晨考,重点是String类的方法 StringBuffer和StringBuiler面试问 日期解析和格式化 int i Integer.parseInt(“111”); 一、作业 略,见答案二、异常 2.1 介绍 异常,就是程序出现的不正常的情况. 2.2…

RPA流程自动化技术在金融机构的落地方案详解

金融机构在面向数字化运营的转型过程中&#xff0c;需将智能流程自动化技术整合到数字化转型战略中&#xff0c;规划建设统一的企业流程自动化处理平台&#xff0c;作为数字化运营的辅助支撑类系统&#xff0c;明确流程治理方法和运营模式&#xff0c;确保足够的规模弹性&#…

【深度学习】Softmax回归及前馈神经网络

1 实验内容简介 1.1 实验目的 &#xff08;1&#xff09;熟练掌握tensor相关各种操作&#xff1b; &#xff08;2&#xff09;掌握广义线性回归模型&#xff08;logistic模型、sofmax模型&#xff09;、前馈神经网络模型的原理&#xff1b; &#xff08;3&#xff09;熟练掌…

第一章: uniapp引入axios异步框架

第一章&#xff1a; uniapp引入axios异步框架 在学习uniapp的过程中&#xff0c;发现uniapp框架默认集成request请求框架存在问题&#xff0c;发送请求时在header中塞入token值&#xff0c;而后台接收不到&#xff0c;也就是说uniapp默认的request请求框架&#xff0c;不支持在…

巨烽数字化采购项目启动,甄云助力医疗影像显示领军企业数智化升级

近日&#xff0c;医疗影像显示行业的领军者深圳市巨烽显示科技有限公司&#xff08;以下简称“巨烽”&#xff09;联合甄云科技举办数字化采购管理项目启动会&#xff0c;双方相关部门负责人及项目组成员参加了此次会议。 会上&#xff0c;就巨烽的数字化采购管理系统建设升级…

AI写作机器人-ai文章生成器在线

使用AI续写生成器&#xff0c;让内容创作事半功倍&#xff01; 随着人工智能技术的不断进步和应用&#xff0c;AI续写生成器的出现为内容创作带来了全新的革命。这种技术可以让你的写作事半功倍&#xff0c;让你轻松生成高质量的文章和内容。在这篇文章中&#xff0c;我们将介绍…

如何伪原创-自媒体伪原创软件

批量文字伪原创的作用 批量文字伪原创是指通过对原文进行修改、改写、调整等方式&#xff0c;生成大量新的类似原文的文本。其作用主要包括以下几个方面&#xff1a; 提高文本的独创性&#xff1a;批量伪原创可以有效地避免大量相似内容的出现&#xff0c;从而提高文本的独创性…

我如何学习使用 Jetpack Compose 开发 Android 应用程序

我如何学习使用 Jetpack Compose 开发 Android 应用程序 Jetpack Compose 和 Android 开发简介 2021 年 7 月&#xff0c;Google 发布了用于为 Android 应用构建原生 UI 的全新工具包 1.0 版。Jetpack Compose 是 Android 开发人员的游戏规则改变者&#xff0c;因为它从通过 X…

C#如何解决项目打开问题 error : 找不到指定的 SDK“Microsoft.NET.Sdk.WindowsDesktop”

错误提示&#xff0c;问题描述 后来发现&#xff0c;直接安装rider还是不能解决解决&#xff08;会自动配置关联&#xff08;path等&#xff09;&#xff0c;甚至自动下载的&#xff0c;官方的visual studio反而不会&#xff0c;之后再详细看怎么弄了&#xff09; VS2022项目…