当前位置: 首页 > wzjs >正文

南京网站备案dw个人网站制作

南京网站备案,dw个人网站制作,网站建设公司知乎,泉州网站建设科技公司什么是注解? 注解也就是Annotation是从JDK5.0开始引入的新技术。 注解的作用: 不是程序本身,但是可以对程序作出解释。 可以被其他程序比如编译器等读取。 注解的格式也很简单:"注释名" java常见的内置注解&#x…

什么是注解?

注解也就是Annotation是从JDK5.0开始引入的新技术。

注解的作用:

  • 不是程序本身,但是可以对程序作出解释。

  • 可以被其他程序比如编译器等读取。

注解的格式也很简单:"@注释名"

java常见的内置注解:@Override(重写),@Deprecated(不推荐使用),@SuppressWarnings(参数)(镇压警告)

元注解

元注解的作用就是负责注解其它注解,也就是说他可以定义其他注解,java定义的四个元注解(meta-annotation)

元注解的四个类型:

  • @Target:用来描述注解,表示我们的注解可以用到哪些地方。

  • @Retention:表示我们的注解的作用范围。(Runtime>class>sources)

  • @Documented:表示是否将我们的注解生成在java的文档中。

  • @Inherited表示注解是能被子类继承。

自定义注解

使用@interface自定义注解,自动继承java.lang.annotation.Annotation接口

  • @interface用来声明一个注解,格式:@interface 注解名{定义内容}

  • 方法的名称就是注解的名称。

  • 返回值类型只能是基本类型。

  • 注解内可以使用default来声明参数的默认值。

  • 如果只有一个参数,一般默认声明为value,我们在使用的时候可以省略不写

反射机制

学习反射之前我们需要知道什么是动态语言和静态语言

动态语言

举一个简单的例子,我们的javaScript就是一种动态语言,也就是说在我们运行的时候,可以对代码进行改变,比方说运行的时候可以引入一些新的变量或者对象。

静态语言

与动态语言相反,静态语言就是指运行时结构不可变的语言就是静态语言,比方说java,c++

反射的存在使java可以称为准动态语言,拥有了一定的动态性,java的动态性让java编程的时候更加的灵活,同时也带来了一些不安全的方面。

反射(Reflection)是java被视为动态语言的关键,反射机制允许程序执行期间通过Reflection API获得任何类的内部消息,同时也能对其进行操作,正常的类加载完之后,在堆内存就产生了一个Class类型的对象,介于一个类只有一个反射对象,这个对象包含了完整的类的结构信息。正常获得对象的时候需要先引入“包类”名称然后通过new实例化,才能够取得实例化对象,反射与之相反,通过实例化对象使用getClass()方法得到完整的“包类”名称。

下面为一个简单的反射实例。

package com.kang.JavaReflection;
​
public class Demo1 {public static void main(String[] args) throws ClassNotFoundException {Class class1 = Class.forName("com.kang.JavaReflection.User");Class class2 = Class.forName("com.kang.JavaReflection.User");Class class3 = Class.forName("com.kang.JavaReflection.User");Class class4 = Class.forName("com.kang.JavaReflection.User");
​System.out.println(class1);
​System.out.println(class2.hashCode());System.out.println(class3.hashCode());System.out.println(class4.hashCode());
​}
}
class User{private int age;private String name;
​User(int age, String name) {this.age = age;this.name = name;}
​public String getName() {return name;}
​public void setName(String name) {this.name = name;}
​public int getAge() {return age;}
​public void setAge(int age) {this.age = age;}
}

java反射机制提供的功能

  • 在运行时构造任意一个类的对象。

  • 判断任意一个类所以具有的成员变量和方法。

  • 在运行时调用任意一个对象的成员变量和方法。

  • 生成动态代理。

  • 判断任意一个对象所属于的类。

事实上这个class创建的时候,我们可以从Object类中找到,getClass方法被所有的子类给继承。这个Class是java反射的源头,所以反射也就很容易理解了,可以通过对象反射求出类的名称。

java反射的优点在于动态创建对象和编译,体现出很大的灵活性。

缺点就是对性能有影响,反射基本上就是一种解释操作,我们可以告诉JVM,我们希望做什么并且它满足我们的要求,所以这样的操作总是慢于直接执行相同的操作。

Class创建

package com.kang.JavaReflection;
​
public class Demo2 {public static void main(String[] args) throws ClassNotFoundException {people people = new student();System.out.println(people.name);
​//通过对象获得Class aClass = people.getClass();System.out.println(aClass.hashCode());//通过forname获得Class aClass1 = Class.forName("com.kang.JavaReflection.student");System.out.println(aClass1.hashCode());//通过类名.class获得Class aclass2 = student.class;System.out.println(aclass2.hashCode());//通过基本内置类的包装类的Type属性Class<Integer> type = Integer.TYPE;System.out.println(type.hashCode());}
}
​
​
class people{public String name;
​public people() {}
​@Overridepublic String toString() {return "people{" +"name='" + name + '\'' +'}';}
​people(String name) {this.name = name;}
}
class teacher extends people{public teacher() {this.name = "teacher";}
}
class student extends  people{public student(){this.name="student";}
}

哪些类型可以有Class对象

  • class:外部类,成员(成员内部类,静态内部类),局部内部类,名内部类。

  • interface:接口

  • 数组

  • enum:枚举

  • annotation:注解@interface

  • primitive type:基本数据类型

  • void

package com.kang.JavaReflection;
​
import java.lang.annotation.ElementType;
​
public class Demo3 {public static void main(String[] args) {Class<Object> objectClass = Object.class;//接口Class<Comparable> comparableClass = Comparable.class;Class<String[]> aClass = String[].class;Class<int[][]> aClass1 = int[][].class;//注解Class<Override> overrideClass = Override.class;//枚举Class<ElementType> elementTypeClass = ElementType.class;//基本数据类型Class<Integer> integerClass = Integer.class;Class<Void> voidClass = void.class;Class<Class> classClass = Class.class;}
}

注意!!

只要元素的类型和维度一样,就是同一个Class,比方说下图两个数组继承的都是一个class

类加载内存分析

  1. 加载:读取.class 文件二进制流,在方法区(元空间)生成类的元数据,同时在堆中创建对应Class实例(作为元数据访问入口)。

  2. 验证:校验方法区中类元数据的合法性,无内存修改。

  3. 准备:在方法区为静态变量分配内存,设默认值(final常量直接赋初始值)。

  4. 解析:将方法区中元数据的符号引用转为直接引用(内存地址)。

  5. 初始化:执行静态代码块和静态变量赋值,更新方法区中静态变量为最终值。

实际上大致可以分为加载---->链接---->初始化

上面的重点是:

  1. 在我们加载的时候class字节码文件加载到内存当中就会生成一个java.lang.Class对象这个对象就是我们描述自己所创建的类的元数据类。

  2. 准备阶段为类的变量static分配内存并将变量的初始值设置,这些类变量的内存在方法区进行分配。

  3. 初始化时执行类构造器<clinit>方法,该方法在编译期间手机类中所有变量的赋值操作和静态代码块中的


文章转载自:

http://xUvAzGf0.gqfbL.cn
http://sfqv8evY.gqfbL.cn
http://n38XuJ5s.gqfbL.cn
http://IhIZIlsS.gqfbL.cn
http://9FgvpZqj.gqfbL.cn
http://RtgSpMJB.gqfbL.cn
http://w04oLM4s.gqfbL.cn
http://sASETsgw.gqfbL.cn
http://DVYm6A7F.gqfbL.cn
http://1Ho9D0cD.gqfbL.cn
http://AkHHJMus.gqfbL.cn
http://67GdpjLM.gqfbL.cn
http://q6Fx1bep.gqfbL.cn
http://tuunyo1a.gqfbL.cn
http://rVzUUlGe.gqfbL.cn
http://hZEhg0EC.gqfbL.cn
http://gLIQHdjI.gqfbL.cn
http://TRQd13O0.gqfbL.cn
http://opMaMUzE.gqfbL.cn
http://1Vn5ZSim.gqfbL.cn
http://8Xs16X18.gqfbL.cn
http://STx0gVXW.gqfbL.cn
http://AXTS8mAe.gqfbL.cn
http://HbB4FF8m.gqfbL.cn
http://Vr4mo2kp.gqfbL.cn
http://7dx3e605.gqfbL.cn
http://9g16s9VO.gqfbL.cn
http://nQYZJvbZ.gqfbL.cn
http://ty3VTvv8.gqfbL.cn
http://6d8kPLXN.gqfbL.cn
http://www.dtcms.com/wzjs/749366.html

相关文章:

  • 企业网站建设与运营计划书企业网站域名在哪申请
  • 孝感网站开发优搏好钢化网
  • 乐陵网站制作平面设计培训需要学什么
  • 网站建设潍坊网站开发教程 视频
  • 局域网站建设模版做营销型网站要多少钱
  • 包小盒设计网站官网不用cms怎么做网站
  • 德兴网站seocentos 部署wordpress
  • 做微信公众号页面的网站标志与设计
  • 网站代码在哪看好的网站样式
  • 做金融网站中小学学校网站建设
  • 建什么类型的网站访问量比较大torrentkitty磁力官网
  • 12306网站做的好还是百度做的好外贸企业网站开发
  • 青岛高端模板建站网时 网站服务器租赁
  • 如何做百度网站推广免费外贸自建网站
  • 厦门网站建设阳哥网站改版公司哪家好
  • 西昌手机网站设计seo新人培训班
  • 可以在家做兼职的网站深圳华控赛格公司官网
  • 怀化市网站建设品牌案例网站
  • 西双版纳网站建设公司wordpress过滤器插件
  • 佘山网站建设备案网站建设书
  • 云南网站开发网络公司做网站的税是多少
  • 外贸企业公司网站建设商业空间设计网站大全
  • 源美网站建设重庆网页设计
  • 厦门网站建设要多少钱企查查企业信息查询网站
  • 做个企业网站 优帮云dw制作网页完整步骤ind
  • wordpress三站合一网站后台功能模块
  • 成都网站建站推广黄山手机网站建设公司排名
  • 上海网站设计与制作wordpress 虾米页面
  • 河南有名的做网站公司有哪些五一电子网站建设
  • 网站mip怎么做wordpress国内服务器慢