注解和反射

golang channel 最详细的源码剖析 大纲 文章目录channel 是什么?channel 使用姿势chan 创建chan 入队chan 出队结合 select 语句结合 for-range 语句源码解析`makechan`hchan 结构chansendchanrecvselectnbsendselectnbrecvselectnbrecv2chanrecv2总结 chan 是 golang 的最重要的一个结构,是区别于其他高级语言的最重要的特色之一,也是 goroutine 通信必须要的要素之一。很多人用它,但是很少人彻底理解过它,甚至 c 阅读详情

注解和反射

注解

​ Annotation。对程序做出解释,可以被其他程序读取。

​ 格式:

​ @注解名(value=“xxx”)

​ 在哪里使用?

​ package、class、method、field

内置注解

@Override			 //表示一个子类重写超类的一个方法
@Deprecated			//不鼓励程序员使用
@SuppressWarnings	//用来抑制编译时的警告

元注解

​ 作用:负责注解其他注解。用来提供对其他annotation类型作说明。

@Target			//用来描述注解的使用范围
@Retention		//表示再什么级别保存该注解信息(SOURCE < CLASS < RUNTIME)
@Documeneted	//说明该注解被包含在javadoc中
@Inherited		//说明子类可以继承父类中的该注解

自定义注解

​ 使用@interface自定义注解时,自动继承了Annotation接口

注:

​ @interface 用来声明一个注解,其中的每一个方法实际就是声明了一个配置参数

​ 方法的名称就是参数的名称,并且返回值类型就是参数的类型[只能是基本类型、Class、String、enum]

​ 可以通过default来声明默认值。

​ 如果只有一个参数成员,则一般命名为 value

​ 注解元素必须有值,因此时常使用空字符串 或 0 来作为 默认值

eg:

//自定义注解
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
    //注解的参数:参数类型+参数名() 如果不设置默认值,则使用时必须赋值
    String name() default "";
    int age() default 0;
    int id() default -1;
}

//使用
@MyAnnotation(name = "注解测试",age = 10,id = 1)
public class Test  {
    public static void main(String[] args) throws IOException {

    }
}

反射

​ Reflection.反射机制允许程序在执行期间借助于Reflection API来取得任何类的内部信息,并可以直接操作任意对象的内部属性及方法。

​ 原理:

​ 加载完类后,堆内存的方法区回产生Class类型的对象[一个类只有一个Class对象],这个对象包含了完整的类的结构信息。而我们可以通过这个对象看到类的结构、

正常:
	导包->通过new实例化->取得实例化对象
反射:
	实例化对象->getClass()->取得该类

​ 应用:

​ 在运行时,判断任意对象的所属类、任意类的对象、一个类所具有的成员变量和方法、获取泛型信息、调用任意对象的成员变量和方法、处理注解

​ 生成动态代理等…

优缺点:

​ 优:可以实现动态创建对象和编译,增强灵活性

​ 缺:影响性能。

获得反射对象

public class Test  {
    public static void main(String[] args) throws ClassNotFoundException {
        Class c1 = Class.forName("javaEE.Student");
        System.out.println(c1); //class javaEE.Student

        //通过多个对象的hasCode => 一个类在内存中只有一个Class对象
        System.out.println(c1.hashCode());//1067040082
        System.out.println(Class.forName("javaEE.Student").hashCode());//1067040082

    }
}

class Student{
    private String name;
    private int id;
    private int age;

    public Student() {
    }

    public Student(String name, int id, int age) {
        this.name = name;
        this.id = id;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

获得Class类

static ClassforName(String name)			//返回指定类名name的Class对象
Object newInstance()					   //通过缺省构造函数,返回Class对象的一个实例
getName()								  //返回此CLass对象所表示的实体(类、接口、数组类、void)的名称
Class getSuperClass()					   //返回当前对象的父类的Class对象
Class[] getInterfaces()					   //获取当前对象的接口
ClassLoader getClassLoader()			   //返回该类的类加载器
Constructor[] getConstructors()			   //返回一个包含某些Constructor对象的数组
Method getMethod(String name,Class..T)	   //返回一个Method对象,该对象形参类型为paramType
Field[] getDeclaredFields()				  //返回Field对象的一个数组

eg:

public class Test  {
    public static void main(String[] args) throws ClassNotFoundException {
        Person person  = new Student();
        System.out.println("This is"+person.name);

        //1.
        Class c1 = person.getClass();
        System.out.println(c1.hashCode()); //1325547227

        //2.
        Class c2 = Class.forName("javaEE.Student");
        System.out.println(c2.hashCode()); //1325547227

        //3.
        Class c3 = Student.class;
        System.out.println(c3.hashCode()); //1325547227

        //4.基本类型的包装类都有一个Type属性
        Class c4 = Integer.TYPE;
        System.out.println(c4);

        //
        Class c5 = c1.getSuperclass();
        System.out.println(c5); //class javaEE.Person
    }
}

class Person{
    String name;

    public Person() {
    }

    public Person(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                '}';
    }
}

class Student extends Person{
    public Student(){
        this.name="学生";
    }
}

class Teacher extends Person{
    public Teacher(){
        this.name = "老师";
    }
}

注:

​ 只要类型和维度一致,便是用一个Class

类加载器

​ 作用:作为方法去中类数据的访问入口

​ 类缓存:一旦类被加载至类加载器中,它将维持加载一段时间,直至JVM回收掉它。

eg:

public class Test  {
    public static void main(String[] args) throws ClassNotFoundException {
        //获取系统类的加载器
        ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
        System.out.println(systemClassLoader); //jdk.internal.loader.ClassLoaders$AppClassLoader@15db9742

        //获取拓展类加载器 ->是 系统类加载器的父类
        ClassLoader parent = systemClassLoader.getParent();
        System.out.println(parent); //jdk.internal.loader.ClassLoaders$PlatformClassLoader@3f99bd52

        //获取根加载器 ->是 拓展类加载器的父类
        ClassLoader parent1 = parent.getParent();
        System.out.println(parent1); //null 根加载器无法获取

    }
}

创建运行时 类的对象

​ 通过反射获取运行时 类的完整结构

public class Test  {
    public static void main(String[] args) throws ClassNotFoundException {
        Class c1 = Class.forName("javaEE.User");

        //获取类的名字
        System.out.println(c1.getName()); //javaEE.User 包名+类名
        System.out.println(c1.getSimpleName()); //User  类名

        //获取类的属性
        /*
            //getFields只能找到public属性
            Field[] fields = c1.getFields();
         */
        Field[] fields = c1.getDeclaredFields();
        for (Field field : fields) {
            System.out.println(field);
            /*
                private java.lang.String javaEE.User.name
                private int javaEE.User.id
                private int javaEE.User.age
             */
        }

        //获取类的方法
        Method[] methods = c1.getMethods();
        for (Method method : methods) {
            System.out.println(method); //获得本类及其父类的public方法
        }

        methods = c1.getDeclaredMethods();
        for (Method method : methods) {
            System.out.println(method); //获取本类的方法
        }

        
    }
}

class User{
    private String name;
    private int id;
    private int age;

    public User() {
    }

    public User(String name, int id, int age) {
        this.name = name;
        this.id = id;
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", id=" + id +
                ", age=" + age +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

动态创建对象的方法

eg:

public class Test  {
    public static void main(String[] args) throws Exception {
        //获得Class 对象
        Class c1 = Class.forName("javaEE.User");

        //构造对象
        User user = (User)c1.newInstance(); //本质调用了类的无参构造器
        System.out.println(user);//User{name='null', id=0, age=0}

        //通过构造器构造对象
        Constructor constructor = c1.getDeclaredConstructor(String.class, int.class, int.class);
        Object tom = constructor.newInstance("Tom", 1, 20);
        System.out.println(tom);//User{name='Tom', id=1, age=20}

        //通过反射调用普通方法
        Method setName = c1.getDeclaredMethod("setName", String.class);
        setName.invoke(user,"Jerry");
        System.out.println(user.getName());//Jerry

        //通过反射操作属性
        Field name = c1.getDeclaredField("name");
        //IllegalAccessException由于是私有的属性,直接调用会报错
        name.setAccessible(true);//暴力反射,允许访问该私有属性
        name.set(user,"Lucy");
        System.out.println(user.getName()); //Lucy
    }
}

反射操作泛型

ParamrterizedType	//表示一种参数化类型
GenericArrayType	//表示元素类型时参数化类型或数组类型
TypeVariable		//各种类型变量的公共父接口
WildcardType		//代表一种通配符类型表达式

eg:

public class Test  {

    public void param(Map<String,User> map,List<User> list){
        System.out.println("param");
    }

    public Map<String,User> paramDemo(){
        System.out.println("paramDemo");
        return null;
    }

    public static void main(String[] args) throws Exception {
        Method param = Test.class.getMethod("param", Map.class, List.class);

        Type[] genericParameterTypes = param.getGenericParameterTypes();
        for (Type genericParameterType : genericParameterTypes) {
            System.out.println("gen:"+genericParameterType);
            if (genericParameterType instanceof ParameterizedType){
                Type[] actualTypeArguments = ((ParameterizedType) genericParameterType).getActualTypeArguments();
                for (Type actualTypeArgument : actualTypeArguments) {
                    System.out.println(actualTypeArgument);
                }
            }
        }//for
        /*
            gen:java.util.Map<java.lang.String, javaEE.User>
            class java.lang.String
            class javaEE.User
            gen:java.util.List<javaEE.User>
            class javaEE.User
         */

        Method paramDemo = Test.class.getMethod("paramDemo");
        Type genericParameterTypes1 = paramDemo.getGenericReturnType();
        if (genericParameterTypes1 instanceof ParameterizedType){
            Type[] actualTypeArguments = ((ParameterizedType) genericParameterTypes1).getActualTypeArguments();
            for (Type actualTypeArgument : actualTypeArguments) {
                System.out.println(actualTypeArgument);
            }//for
        }//if
        /*
            class java.lang.String
            class javaEE.User
         */
    }

}

反射操作注解

getAnnotations
getAnnotation

eg:

public class Test  {
    public static void main(String[] args) throws Exception {
        Class c1 = Class.forName("javaEE.Student");

        //通过反射获得注解
        Annotation[] annotations = c1.getAnnotations();
        for (Annotation annotation : annotations) {
            System.out.println(annotation); //@javaEE.Table(value="db_student")
        }
        //获取注解value的值
        Table table = (Table) c1.getAnnotation(Table.class);
        String value = table.value();
        System.out.println(value); //db_student

        //获得类指定的注解
        Field name = c1.getDeclaredField("name");
        TableField tableField = name.getAnnotation(TableField.class);
        System.out.println(tableField.columnName()); //db_name
        System.out.println(tableField.type()); //varchar
        System.out.println(tableField.length());//8

    }

}

@Table("db_student")
class Student{
    @TableField(columnName = "db_id",type = "int",length = 10)
    private int id;
    @TableField(columnName = "db_age",type = "int",length = 10)
    private int age;
    @TableField(columnName = "db_name",type = "varchar",length = 8)
    private String name;

    public Student() {
    }

    public Student(int id, int age, String name) {
        this.id = id;
        this.age = age;
        this.name = name;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", age=" + age +
                ", name='" + name + '\'' +
                '}';
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

//类名的注解
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface Table{
    String value();
}

//属性的注解
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@interface TableField{
    String columnName();
    String type();
    int length();

}
Java:注解和反射 文章目录 学习视频来自于:秦疆(遇见狂神说)Bilibili地址 他的自学网站:kuangstudy 唯有热爱,能抵岁月漫长 阅读详情

相关推荐

Codestyling Localization v1.99.30.zip

Codestyling Localization 是一款功能强大的wordpress主题汉化翻译插件,使用此插件可以管理和编辑所有的gettext的翻译文件(.PO/MO).它会自动检测gettext的Ready组件像WordPress的自身或任何插件/主题支持gettext的,是能够扫描相关的源文件,可以帮助你在翻译过程中使用谷歌翻译API或微软在线翻译API。 对wordpress来说,只要包含语言文件(.PO/MO)的主题或插件,理论上都可以翻译,像我们常见的很多优秀的国外主题,因为很少有中文版的,特别是一些新主题,为此,伤透了不少爱好wp主题的并且英文不是很好的国内同学。 Codestyling Localization插件的安装 第一种方法:在后台插件管理直接搜索安装即可。 第二方法就是下载到本地,然后上传安装。 Codestyling Localization插件的使用 感受Codestyling Localization插件的强大,还是要从使用开始的。 安装好后启用Codestyling Localization插件,我们很容易的能在工具>菜单下找到Codestyling Localization插件 路径:工具>Localization (如果你使用chome浏览器,有自动翻译功能,Localization会被翻译成本土化。) 在Codestyling Localization插件管理面板中。 我们可以看到,Codestyling Localization插件支持翻译的有 WordPress | 插件 | 外观 | Compatibility | Security Risk这几个分类 我们根据实际情况,选择要翻译的项目,比如,点击外观,就可以显示所有支持翻译的WP主题. 在要翻译的主题项目,添加要翻译我的语言,因为是要翻译成中文,所以添加中文。 点击添加新语言,弹出添加新语言窗口 然后,点击创建po文件,即可进行中文语言包的翻译工作。 然后在右侧我们就可以找到中文语言包,点击编辑,进入语言包的操作界面,选择一个要翻译的项目,点击右侧编辑按钮,进行翻译: 一个,进行逐个翻译。 至此,Codestyling Localization插件的简单使用方法就讲完了。 要注意的是: 1、Codestyling Localization插件是支持API自动翻译的,要申请Google 或bing的翻译接口。 2、Codestyling Localization插件支持翻译的不论是主题还是插件等,都是在存在.po语言包的基础上进行的翻译,如果只包含主题前台的.po语言包,就不能翻译后台内容。如果php文件内的翻译,也是不能实现的。

Kotlin协程通信机制: Channel

Coroutines Channels Java中的多线程通信, 总会涉及到共享状态(shared mutable state)的读写, 有同步, 死锁等问题要处理. 协程中的Channel用于协程间的通信, 它的宗旨是: Do not communicate by sharing memory; instead, share memory by communicating. Channe...

微赚淘客开发者博客 6万+

多臂老虎机——入门强化学习

多臂老虎机(Multi-Armed Bandit,MAB)问题是强化学习的经典入门例子,也是理解探索与利用(exploration-exploitation)平衡的重要案例。

qq_56683019的博客 2458

Android 接入微信分享错误码-6

今天写了一个android 微信分享的sdk,之前因为设置的签名有问题导致点击分享以后无限闪退,谷歌之后发现是签名不一致问题,经过沟通之后总算换成了一致的签名了,但是分享依然闪退,WXEntryActivity 返回收到的错误码是-6,查看源码和谷歌发现都没有对这个错误码有一个详细的解释,查看官方的常见错误表示签名出错登录以后,需要重装微信(也就是清楚微信本地数据),尝试操作了下是正常分享成功了~也

pyystone的专栏 7万+

Zynq7020实战:ARM Cortex-A9降频避坑指南(附温度对比测试)

本文详细介绍了如何在Zynq7020平台上对ARM Cortex-A9处理器进行降频优化,以降低功耗并提升系统稳定性。通过分析时钟架构、提供实战操作步骤和温度对比测试数据,帮助开发者有效避免降频过程中的常见问题,实现嵌入式系统的高效能耗管理。

root9的博客 206

机器人控制入门:用SAC算法让机械臂学会抓取(PyBullet仿真教程)

本文详细介绍了如何使用SAC算法在PyBullet仿真环境中训练机械臂完成抓取任务。通过强化学习中的软Actor-Critic(SAC)算法,结合熵最大化机制和双Q网络架构,有效解决了机械臂控制中的探索难题。教程包含环境搭建、算法原理、状态空间设计、奖励函数优化等核心内容,并提供了实用的训练技巧和参数调优指南。

weixin_29091105的博客 362

递归与分治

文章目录1.递归的概念1.1 阶乘函数1.2 Fibonacci数列1.3 全排列1.4 整数划分问题1.5 汉诺塔问题 1.递归的概念 直接或间接地调用自身的算法称为递归算法 用函数自身给出的定义的函数称为递归函数 1.1 阶乘函数 public class FactorialDemo { public static void main(String[] args) { System.out.println("1!="+factorial(1)); System.out.println("

CodePanda@GPF的博客 8040

手把手教你用CH340给正点原子ESP8266烧录固件(附串口调试技巧)

本文详细讲解了使用CH340模块为正点原子ESP8266烧录AT固件的完整流程与关键技巧。核心在于烧录时必须使用3.3V供电,并正确连接GPIO0引脚至GND以进入下载模式。文章涵盖了从硬件接线、软件参数配置到烧录后串口调试验证的全步骤,并提供了常见问题排查方案,帮助开发者一次性成功完成固件烧录。

weixin_29201933的博客 232

面试常见题目

一 计算机网络 1. TCP三次握手, 四次挥手, TIME_WAIT状态. 三次握手: (1)客户端发出连接请求报文, SYN=1(同步位), seq=x(初始序号),客户进程进入SYN-SENT状态 (2)服务器端收到请求报文, 发送确认报文, 确认报文中SYN=1,ACK=1, 确认号ack=x+1,同时选择一个初始序号seq=y, 服务器进程进入SYN-RCVD状态 (3)客户端...

最好人的博客 1万+

【软考】数据库系统工程师备考指南(一)

目录一、数据库系统工程师简介二、考试要求三、考试目标四、考试范围(一)信息系统知识(二)数据库系统设计与管理 一、数据库系统工程师简介 数据库系统工程师考试属于全国计算机技术与软件专业技术资格(水平)考试(简称计算机软件水平资格考试)中的一个中级考试。考试不设学历与资历条件,也不论年龄和专业,考生可根据自己的技术水平选择合适的级别合适的资格,但一次考试只能报考一种资格。考试采用笔试形式,考试实行全国统一大纲、统一试题、统一时间、统一标准、统一证书的考试办法。笔试安排在一天之内。 2022 年数据库系统工程

邓邓子的博客 3859

huggingface下载提示huggingface_hub.errors.EntryNotFoundError:404 Client Error: (Request 1D: Root...如何解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1232

【反射】注解和反射

不是程序本身,单可以对程序做出解释可以被其他程序读取(比如编译器)格式:“@注释名字”,还可以添加一些参数值,比如:@SuppressWaenings(value="unchecked")使用:package,class,methed,filed等上面,相当于给他们添加了额外的辅助信息,可通过反射实现访问//注解可以显示赋值,如果没有默认值,就必须给其赋值@MyAnnotation02(name = "老王",age = 1,id = 1)//注解有默认值,可不写参数。

菜鸟的学习笔记 1430

YOLO11涨点优化:注意力魔改 | 引入Deformable Attention (可变形注意力),灵活感受野自适应复杂形变目标

Deformable Attention为YOLO11带来的不仅是2.6个百分点的mAP提升,更是一种全新的“形变感知”范式。标准卷积的固定感受野在非刚性目标、多尺度变化和遮挡场景下力不从心——Deformable Attention恰好填补了这一空白。从架构设计到代码实现,从竞品对比到部署方案,从生态工具到安全风险,本文覆盖了将Deformable Attention引入YOLO11所需的全部知识链路。

2601_95807009的博客 285

Java注解和反射

不是程序本身,可以对程序作出解释。(这一点和注释(comment)没什么区别)可以被其他程序(比如:编译器等)读取定义在java.lang包下@Override, 重写@Deprecated, 已过时的,不鼓励使用@SuppressWarnings,用来抑制编译时的警告信息负责注解其他注解,它们被用来提供对其他annotation类型作说明@Target,用于描述注解的使用范围(即被描述的注解可以用在什么地方)

layman4444的博客 1403

001、专栏导论:为什么我们需要MLIR与算子中间表示

五年前,大家还在争论“TVM还是XLA”。现在回头看,TVM的Relay IR和XLA的HLO都是特定领域的IR,它们解决了各自的问题,但缺乏通用性。MLIR的出现,本质上是因为硬件异构化已经到了一个临界点——CPU、GPU、NPU、DSP、FPGA,每个硬件都有自己的指令集和内存层次,没有一个统一的IR能同时高效表达所有硬件的计算模式。MLIR的“方言+渐进式lowering”模式,恰好提供了这种灵活性。你可以为每个硬件定制一套方言,然后共享公共的lowering路径。

Jack010169的博客 488

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

【Java】反射和注解

本文详细概括了反射机制和注解在实际开发中的作用,并且还包括了ResourceBundle读取配置文件的详细操作,以及枚举

Answer的博客 1260

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Java 注解和反射

注解是 JDK 5.0 引入的新技术。注解是不是程序本身,但可以对程序做出解释;可以被其他程序(比如编译器)读取。注解是以 “@注解名” 在代码中存在,还可以添加一些参数,例如 @SuppressWarnings(value=“ubchecked”)。可以加在 package、class、method、field 等上面,相当于给他们添加额外的信息;我么可以通过反射机制编程实现对这些元数据的访问。使用@interface自定义注解时,自动继承了接口。@interface用来声明一个注解;

kezhou的博客 1087

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

java 反射和注解

示例12】自定义注解}//如果只有一个配置参数,一般命名为value}@MyAnnoation(id=5,name="张三",scoreArr={78,89,34})}}}定义注解的关键字是@interface自定义注解中可以定义多个配置参数,不是成员方法,不是成员变量;说明参数的名称,以及参数值的类型如果只有一个配置参数,一般命名为value如果配置参数是value,并且只有一个配置参数,value可以省略。...

鑫阳的博客 1665

java注解和反射

使用//这里不是方法,而是注解的值 在使用时@AnnottationName(name=" ");value可以缺省,,,动态语言:**是一类运行时可以改变其结构的语言,如新的函数,对象,甚至代码可以被引进主要有Object,C#,javaScript,php,python等静态语言:与动态语相比,运行时结构不可变的就是静态语言,如java,,c++,c;java不是动态语言,但是java可以被称为准动态语言,有一定的动态性。

qq_73240755的博客 1158

反射和注解

注解和反射 文章目录注解和反射1、注解1.1、内置注解1.2、元注解1.3、自定义注解2、反射2.1、主要API2.2、Class类2.3、类加载器2.4、通过反射获取对象 1、注解 1.1、内置注解 //重写的注解 @Override //不推荐程序员使用,但是可以使用,或者存在更好的方式,(遗弃方法) @Deprecated //抑制编译时的警告,参数:all、unchecked、 value={"unchecked","deprecation"} @SuppressWarnings (参数) 1

weixin_44706491的博客 279

注解和反射(之一:什么是注解和反射)

注解和反射(之一:什么是注解和反射) 一、注解 注解入门 Annotation是从JDK5.0开始引入的新技术. Annotation的作用: 不是程序本身,可以对程序作出解释.(这一点和注释(comment)没什么区别) 可以被其他程序(比如:编译器等)读取. Annotation的格式: 注解是以"@注释名"在代码中存在的,还可以添加一些参数值﹐例如:@SuppressWarnings(value=“unchecked”). Annotation在哪里使用? 可以附加在package ,

qq_54343969的博客 400
上一篇: 网络编程的简单学习
下一篇: Tomcat
code_Floyed
博客等级 码龄7年 3粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值