2021-02-26

Java高级特性
一,JAVA反射
1,反射的概念
反射是一种能够在程序运行时动态访问、修改某个类中任意属性(状态)和方法(行为)的机制(包括private实例和方法)
2,反射能做什么
在运行时判断任意一个对象所属的类;
在运行时构造任意一个类的对象;
在运行时判断任意一个类所具有的成员变量和方法;
在运行时调用任意一个对象的方法
动态代理就是通过反射实现的
3,Class类
每个类的运行时的类型信息就是用Class对象表示的。它包含了与类有关的信息
Class 类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口,数组也是一个类
Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机(JVM)以及通过调用类加载器中的 defineClass 方法自动构造的
4,得到Class的三种方式
(1)getClass()
通过对象调用getClass() 方法来获取
常用于:传过来一个object类型的对象,不知道具体是什么类,可以使用;

(2)class属性
直接通过 类名.class 的方式得到;
任何一个类都有一个隐含的静态成员变量class;

(3)Class.forName()

注意:一个类在JVM中只会有一个Class实例;
5,通过Class类获取成员变量、成员方法、接口、构造方法等
见Class类的API:java.lang.Class
getName():获得类的完整名称;
getFileds():获得类的public类型的属性
getFiled(String name):根据指定的名称获取该class的属性名,只能获取public类型

getDeclaredFileds():获的类的所有属性。包括private声明的;
getDeclaredFiled(String name):根据指定的名称获取该class的属性名,包括private的
getMethods():获得类的public类型的方法。这里包括Object声明的一些方法;
getDeclaredMethods():获得类的所有方法(不包括从父类继承的)。包括private声明的
getContructors(): 获得类的public类型的构造方法
newInstance(): 通过类的不带参数的构造方法创建这个类的一个创建

6.Field
提供有关类或接口的单个字段的信息,以及对它的动态访问权限。反射的字段可能是一个类(静态)字段或实例字段
field.set(Object obj,Object value): 给obj对象的field属性赋value值;
field.setInt(Object obj,int i);给obj对象的field属性赋i值,i的类型是int;
。。。
field.get(Object obj):获取obj对象的field字段值
。。。
field.setAccessible(boolean flag):启用和禁用访问安全检查的开关,值为true时,表示 反射的对象在使用时应该取消java语言的访问检查;反之不取消
7.Constructor类
Constructor 提供关于类的单个构造方法的信息以及对它的访问权限。
String getName()
          以字符串形式返回此构造方法的名称。
 Class<?>[] getParameterTypes()
          按照声明顺序返回一组 Class 对象,这些对象表示此 Constructor 对象所表示构造方法的形参类型。
 int getModifiers()
          以整数形式返回此 Constructor 对象所表示构造方法的 Java 语言修饰符。
8.Method类

Method 提供关于类或接口上单独某个方法(以及如何访问该方法)的信息。所反映的方法可能是类方法或实例方法(包括抽象方法)。
 String getName()
          以 String 形式返回此 Method 对象表示的方法名称。
 Class<?>[] getParameterTypes()
          按照声明顺序返回 Class 对象的数组,这些对象描述了此 Method 对象所表示的方法的形参类型。
Object invoke(Object obj, Object… args)
          对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。

9.ClassLoader
类加载器是负责加载类的对象。ClassLoader 类是一个抽象类。如果给定类的二进制名称(“java.lang.String”),那么类加载器会试图查找或生成构成类定义的数据。一般策略是将名称转换为某个文件名,然后从文件系统读取该名称的“类文件”。

native关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)实现的文件中。Java语言本身不能对操作系统底层进行访问和操作,但是可以通过JNI接口调用其他语言来实现对底层的访问。
JNI是Java本机接口(Java Native Interface),是一个本机编程接口,它是Java软件开发工具箱(java Software Development Kit,SDK)的一部分。JNI允许Java代码使用以其他语言编写的代码和代码库。
二、注解
1.什么是注解
Java注解又称为标注,是Java从1.5开始支持加入源码的特殊语法元数据;Java中的类、方法、变量、参数、包都可以被注解。元数据是描述数据的数据。
比如说@Override注解,不加@Override注解标记代码,程序也能够正常运行。@Override是告诉编译器这个方法是一个重写方法,如果父类中不存在该方法,编译器会报错,提示该方法不是父类中的方法。如果方法名不小心拼写错误,而且没有使用@Override注解,程序依然能够编译通过,但运行结果和期望的大不相同,注解有助于阅读代码。
特别说明:
A.注解仅仅是元数据,和业务逻辑无关,所以当你查看注解类时,发现里面没有任何逻辑处理;

B.javadoc中的@author、@version、@param、@return、@deprecated、@hide、@throws、@exception、@see是标记,并不是注解;
2.注解的作用
A.格式检查:告诉编译器信息,比如被@Override标记的方法如果不是父类的某个方法,IDE会报错;
B.减少配置:运行时动态处理,得到注解信息,实现代替配置文件的功能;
C.减少重复工作,比如说JUnit
3.注解是如何工作的?
注解的逻辑实现是元数据的用户来处理的,注解仅仅提供它定义的属性(类/方法/变量/参数/包)的信息,注解的用户来读取这些信息并实现必要的逻辑。当使用java中的注解时(比如@Override)JVM就是用户,它在字节码层面工作。
4.常用注解
A.@Override
属于标记注解,不需要设置属性值;只能添加在方法的前面,用于标记该方法是复写的父类中的某个方法,如果在父类没有的方法前面加上@Override注解,编译器会报错:

B.@SuppressWarnings
此注解接受一个或多个字符串参数——描述要忽略的警告名称,比如说unchecked,表示类型转换未经检查的警告;deprecation:表示使用了已弃用的方法、类、类型等的警告
C.@Deprecated
它会将一些构造函数、域、局部变量、方法、软件包、模块、参数或类型标记为已弃用。如果弃用的元素(构造函数,域,局部变量等)被使用了,则编译器发出警告
5.自定义注解
· 注解类会被@interface标记;
· 注解类的顶部会被@Documented、@Retention、@Target、@Inherited这四个注解标记(@Documented、@Inherited可选,@Retention、@Target必须要)

元注解:
@Documented、@Retention、@Target、@Inherited就是元注解,它们的作用是负责注解其它注解,主要是描述注解的一些属性,任何注解都离不开元注解(包括元注解自身,通过元注解可以自定义注解),元注解的用户是JDK,JDK已经帮助我们实现了这四个注解的逻辑。这四个注解在JDK的java.lang.annotation包中。
1)@Target:
作用:用于描述注解的使用范围,即被描述的注解可以用在什么地方;
取值:
1、CONSTRUCTOR:构造器;
2、FIELD:实例属性;
3、LOCAL_VARIABLE:局部变量;
4、METHOD:方法;
5、PACKAGE:包;
6、PARAMETER:参数;
7、TYPE:类、接口(包括注解类型) 或enum声明

2)@Retention:
作用:表示需要在什么级别保存该注解信息,用于描述注解的生命周期,即被描述的注解在什么范围内有效;

取值:
1、SOURCE:在源文件中有效,即源文件保留;
2、CLASS:在class文件中有效,即class保留;
3、RUNTIME:在运行时有效,即运行时保留;

3)@Documented:
作用:用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。
取值:它属于标记注解,没有成员;
4)@Inherited:
作用:用于描述某个被标注的类型是可被继承的。如果一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类。
取值:它属于标记注解,没有成员;
6.如何自定义注解
使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节。在定义注解时,不能继承其他的注解或接口。@interface用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就是参数的类型(返回值类型只能是基本类型、Class、String、enum)。可以通过default来声明参数的默认值。
1)自定义注解格式

2)注解参数可支持的数据类型:
所有基本数据类型(int,float,boolean,byte,double,char,long,short);
String类型;
Class类型;
enum类型;
Annotation类型;
以上所有类型的数组。
特别说明:
1、注解类中的方法只能用public或者默认这两个访问权修饰,不写public就是默认
2、如果注解类中只有一个成员,最好把方法名设置为"value"
3、注解元素必须有确定的值,要么在定义注解的默认值中指定,要么在使用注解时指定,非基本类型的注解元素的值不可为null。因此, 使用空字符串或0作为默认值是一种常用的做法
注解可以实现检验是否登录,或者是说跟AOP配合使用完成日志

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
2021-03-26 20:54:33,596 - Model - INFO - Epoch 1 (1/200): 2021-03-26 20:57:40,380 - Model - INFO - Train Instance Accuracy: 0.571037 2021-03-26 20:58:16,623 - Model - INFO - Test Instance Accuracy: 0.718528, Class Accuracy: 0.627357 2021-03-26 20:58:16,623 - Model - INFO - Best Instance Accuracy: 0.718528, Class Accuracy: 0.627357 2021-03-26 20:58:16,623 - Model - INFO - Save model... 2021-03-26 20:58:16,623 - Model - INFO - Saving at log/classification/pointnet2_msg_normals/checkpoints/best_model.pth 2021-03-26 20:58:16,698 - Model - INFO - Epoch 2 (2/200): 2021-03-26 21:01:26,685 - Model - INFO - Train Instance Accuracy: 0.727947 2021-03-26 21:02:03,642 - Model - INFO - Test Instance Accuracy: 0.790858, Class Accuracy: 0.702316 2021-03-26 21:02:03,642 - Model - INFO - Best Instance Accuracy: 0.790858, Class Accuracy: 0.702316 2021-03-26 21:02:03,642 - Model - INFO - Save model... 2021-03-26 21:02:03,643 - Model - INFO - Saving at log/classification/pointnet2_msg_normals/checkpoints/best_model.pth 2021-03-26 21:02:03,746 - Model - INFO - Epoch 3 (3/200): 2021-03-26 21:05:15,349 - Model - INFO - Train Instance Accuracy: 0.781606 2021-03-26 21:05:51,538 - Model - INFO - Test Instance Accuracy: 0.803641, Class Accuracy: 0.738575 2021-03-26 21:05:51,538 - Model - INFO - Best Instance Accuracy: 0.803641, Class Accuracy: 0.738575 2021-03-26 21:05:51,539 - Model - INFO - Save model... 2021-03-26 21:05:51,539 - Model - INFO - Saving at log/classification/pointnet2_msg_normals/checkpoints/best_model.pth 我有类似于这样的一段txt文件,请你帮我写一段代码来可视化这些训练结果
02-06

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大猩猩乔治

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值