大家好,小乐继续接着上集:乐字节Java反射之一:反射概念与获取反射源头Class 这次是之二:实例化对象.接口与父类.修饰符和属性 一:实例化对象 之前我们讲解过创建对象的方式,有new .克隆.反序列化,再加一种,根据Class对象,使用newInstance() 或者构造器实例化对象.调用以下api即可 //获取源头 Class<?> clz = Class.forName("com.shsxt.ref.simple.User"); //第一种:通过newInstan…
本文承接上一篇:乐字节Java发射之二:实例化对象.接口与父类.修饰符和属性 继续讲述Java反射之三:方法.数组.类加载器 一.方法 获取所有方法(包括父类或接口),使用Method即可. public static void test() throws Exception { Class<?> clz = Class.forName("com.shsxt.ref.simple.User "); //获取属性 System.out.println("======…
大家好,乐字节小乐继续为Java初学者讲述Java基础知识.上次说到乐字节Java反射之三:方法.数组.类加载器,这次是Java反射之四:反射相关操作 1.操作属性 //1.获取Class对象 Class<?> clz=Class.forName("com.shsxt.ref.simple.User"); //2.获取对象 User u=(User)clz.newInstance(); //3.设置属性 Field field=clz.getDeclaredField(&q…
一.Java反射机制概念 “程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”,如Python, Ruby是动态语言:显然C++,Java,C#不是动态语言,但是JAVA有着一个非常突出 的动态相关机制:Reflection.   JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方 法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以 及动态调用对象的方法的功能称为java语言的反射机制.如 /** * 入门级示例:通过对象获取 包…
案例:根据配置文件,实例化对象 src下创建一个"配置文件"config.txt,内容如下: className=ahjava.p07reflect.Cat package ahjava.p07reflect; import java.io.FileReader; import java.lang.reflect.Constructor; import java.util.Properties; class Cat { public Cat() { System.out.println…
大家好,小乐又来给大家讲述Java基础知识.上次说了乐字节Java变量与数据类型之一:Java编程规范,关键字与标识符,这次将接着往下说,谈谈Java常量与变量. 1.常量 1).定义 在程序执行的过程中,其值不发生改变的量. 2).分类 A:字面值常量 B:自定义常量(后面讲) 3).字面值常量 A:字符串常量 "hello" B:整数常量 12,23 C:小数常量 12.345 D:字符常量 'a','A','@' E:布尔常量 true,false F:空常量 null(后面讲)…
大家好,上次我们讲过了乐字节Java编程之方法.调用.重载.递归,接下来我们将会进入到Java封装的内容.Java编程语言发展,面向对象和类. 一.编程语言的发展 机器语言——直接由计算机的指令组成,指令.数据.地址都以“0”和“1”组成:可以被计算机直接识别并执行. 汇编语言——用容易理解和记忆的符号表示指令.数据以及寄存器等,抽象层次很低,程序员需要考虑大量的机器细节. 高级语言——屏蔽了机器细节,提高了语言的抽象层次接近于人的自然语言,60年代出现的结构化编程语言剔除了结构化数据和语句,数…
本文继续讲Java封装.上一篇:乐字节Java|GC垃圾回收机制.package和import语句 这次讲述JavaBean.继承与权限修饰 一. 封装javaBean 封装(Encapsulation)是面向对象方法的重要原则,就是把对象的属性和行为(或方法)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节. (1)隐藏实现细节,提供公共的访问方式 (2)好处: A:隐藏实现细节,提供公共的访问方式 B:提高代码的复用性 C:提高代码的安全性 (3)设计原则 把不想让外界知道的实现细节给隐…
本文接上一篇:乐字节Java|this关键字.static关键字.block块.本文是接着讲述JavaGC垃圾回收机制.package 和 import语句. 一.GC垃圾回收机制 GC全名:Garbage Collection 垃圾回收机制 程序员无权调用垃圾回收器. 程序员可以通过System.gc().通知GC运行,但是JAVA规范并不能保证立刻运行. finalize方法,是JAVA提供给程序员用来释放对象或资源的方法,但是尽量少用. GC回收的三种基本方式 1.标记-清除 标记存活对象…
大家好,乐字节的小乐又来了,上一篇是:乐字节Java|JavaBean.继承与权限修饰,也是属于Java继承的,今天继续Java继承. 一. 方法的重写 父类不满足子类的要求,按需改写.注意 方法签名必须相同 在子类中可以根据需要对从基类中继承来的方法进行重写. 重写方法必须和被重写方法具有相同的方法名称.参数列表和返回类型. 重写方法不能使用比被重写方法更严格的访问权限 Override.java Overload.java “==”:方法名.形参列表相同. “≤”:返回值类型(基本类型必须相…
反射可以解决在编译时无法预知对象和类是属于那个类的,要根据程序运行时的信息才能知道该对象和类的信息的问题. 在两个人协作开发时,你只要知道对方的类名就可以进行初步的开发了. 获取类对象 Class.forName(String clazzName)静态方法 调用类的class属性,Person.class返回的就是Person的class对象(推荐使用) 调用某个对象的getClass()方法 具体使用还是要根据实际来选择,第一种方式是比较自由的,只要知道一个类名就可以了,其不会做该类是否存在的…
Java 反射 分析类和对象 @author ixenos 摘要:优化程序启动策略.在运行时使用反射分析类的结构和对象 优化程序启动策略 在启动时,包含main方法的类被加载.它会加载所有它需要的类.这些被加载的类又要加载它们需要的类,以此类推,这是JVM的动态加载机制. 对于一个大型的应用程序,这将消耗很多时间,用户体验不好.此时可以通过反射来优化程序启动策略,要确保包含main方法的类没有显示地引用其他的类. 首先,显式一个启动动画,然后通过调用Class.forName手动加载其他的类,预…
问题:Java反射机制可以动态修改实例中final修饰的成员变量吗? 回答是分两种情况的. 1. 当final修饰的成员变量在定义的时候就初始化了值,那么java反射机制就已经不能动态修改它的值了. 2. 当final修饰的成员变量在定义的时候并没有初始化值的话,那么就还能通过java反射机制来动态修改它的值. 实验: 1. 当final修饰的成员变量在定义的时候就初始化了值 public Class Person { private final String name = "damon.hua…
反射技术其实就是动态加载一个指定的类,并获取该类中的所有内容.而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员,简单来说:反射技术可以对一个类进行解剖,反射大大增强了应用程序的可扩展性. 反射技术的原理如下图所示: 但是要想要对字节码文件进行解剖,必须要有字节码文件对象. 如何获取字节码文件对象呢? 要读取的类文件源码: package Reflect; public class Person { /** * @param args */ private St…
1:SUN提供的反射机制的类: java.lang.Class<T> java.lang.reflect.Constructor<T> java.lang.reflect.Field java.lang.reflect.Method java.lang.reflect.Modifier 2:什么是反射 JAVA反射机制是在运行状态中,对于任意一个类.都能都知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称…
一. 构造器(构造方法|构造函数) 在创建对象时(new),必会调用一个特殊的方法,这个方法是初始化对象信息的为new服务的.这个方法称为“构造器” 使用 new + 构造方法创建一个新的对象. 构造函数是定义在 Java类中的一个用来初始化对象的函数. 构造函数与类同名且没有返回值. 例如: Person类的构造函数: public class Person { int id; int age; Person(int n, int i){ id = n; age = i; } } 创建对象时,…
乐字节小乐上次讲完了Java反射,接下来小乐给大家讲述Java循环. 循环有以下四部分: 一.循环控制 1. do..while 直到型 ( 先执行后判断) ,结构为: 先执行循环体,后判断布尔表达式.循环体至少执行一次 其流程图如下: 2. for 灵活的循环 ( 能够确定循环次数) ,结构为: for 循环语句是支持迭代的一种通用结构,是最有效.最灵活的循环结构 for 循环在执行条件测试后,先执行程序部分,再执行迭代因子( ( 步进) ) . 初始化部分.条件判断部分和迭代因子可以为空语句…
前提 其实在前面写过的<深入分析Java反射(一)-核心类库和方法>已经介绍过通过类名或者java.lang.Class实例去实例化一个对象,在<浅析Java中的资源加载>中也比较详细地介绍过类加载过程中的双亲委派模型,这篇文章主要是加深一些对类实例化和类加载的认识. 类实例化 在反射类库中,用于实例化对象只有两个方法: T java.lang.Class#newInstance():这个方法只需要提供java.lang.Class<T>的实例就可以实例化对象,如果提供…
Java中创建(实例化)对象的五种方式  1.用new语句直接创建对象,这是最常见的创建对象的方法. 2.通过工厂方法返回对象,如:String str = String.valueOf(23); 3.运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法.如:Object obj = Class.forName("java.lang.Object").newInstance(); 4.调用对…
嗨喽,小乐又来了,今天要给大家送上的技术文章是Java重点知识-IO流. 先来看看IO流的思维导图吧. 一. File 在Java中,Everything is Object!所以在文件中,也不例外!在Java中,可以用 File类来表示一个与硬盘上文件联系!!!注意: 1.File仅代表一个联系,可能文件存在,也可能不存在: 2.这里的文件可以是文件,也可以是文件夹: 在常用类中已经详细讲过File,此处不在讲解 二. IO流 1.流概念 流即流动.流向,从一端流向另一端.如水流:从山里流向到…
大家好,我是乐字节的小乐,这次要给大家带来的是Java变量与数据类型.本文是第一集:Java编程规范,关键字与标识符. 一.编程规范 任何地方的名字都需要见名知意: 代码适当缩进 书写过程成对编程 对代码进行合理注释 二.关键字 1).定义 被Java语言赋予特定含义的单词 2).特点 全部小写 3).注意事项 A:goto和const作为保留字存在. B:类似于Notepad++这样的高级记事本会对关键字有特殊颜色标记 4).Java所有关键字和保留字 5).常用关键字 三.标识符 (取的名字…
项目中导入大量枚举对象,用来定义常量.随着带来一个问题,就是每个枚举类都需要通过key来获取对应枚举的需求. public enum ExamType { CRAFT(1, "草稿"), PASSING(2, "待审核"); private int value; private String typeName; ExamType(int value, String typeName) { this.value = value; this.typeName = typ…
1. path环境变量的作用 保证javac命令可以在任意目录下运行. 2. path配置的两种方案: 方法 一如下: ①点击计算机->右键->属性 ②高级系统设置 ③高级—>环境变量 ④系统变量 àPath—>编辑à光标移到最前面/后面à加上英文状态下的分号”;” ⑤进入到安装 jdk目录 下的bin,然后单击地址栏将此路径复制到变量值的最前面. ⑥一路确定并退出 方法二如下(推荐): 找到环境变量的位置,在系统变量里面 新建: 变量名:JAVA_HOME 变量值:C:\Prog…
从这篇文章开始,小乐准备写一整系列的Java学习文章,一步一步带您进入Java的神奇世界! 这是第一篇:Java语言概述以及Java的发展前景 1.SUN公司介绍 SUN公司全称是Stanford University Network. SUN公司是从斯坦福大学孵化器出的高科技公司.创立后,曾经市值名列IT公司第一位.在2001年时,市值2100亿美元,远超过google公司.IBM公司.成为在操作系统上最有可能挑战微软的公司.太阳公司不乏能人,它不仅为 Google 培养了 CEO埃里克.施密…
前言 在前一篇文章中我们学习了Java虚拟机的结构原理与运行时数据区域,那么我们大概知道了Java虚拟机的内存的概况,那么内存中的数据是如何创建和访问的呢?这篇文章会给你答案. 1.对象的创建 对象的创建通常是通过new一个对象而已,当虚拟机接收到一个new指令时,它会做如下的操作. (1)判断对象对应的类是否加载.链接.初始化 虚拟机接收到一条new指令时,首先会去检查这个指定的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被类加载器加载.链接和初始化过.如果没…
一丶Class中常用方法详解 1)getFields() 只能获取到运行时类中及其父类中声明为public的属性 2)getDeclaredFields() 获取运行时类本身声明的所有属性 3)getMethods() 获取运行时类中及其父类中声明为public的方法 4)getDeclaredMethods() 获取运行时类本身声明的所有方法 5)getSuperclass() 获取运行时类的父类 6)getGenericSuperclass() 获取运行时类带泛型的父类 7)获取运行时类的父…
java的反射机制提供了两种方法: getDeclaredFields() :该方法能获取到本类的所有属性,包括private,protected和public,但不能获取到继承的父类的属性. getFields():既能获取本类的属性也能得到父类的属性,但仅仅能获取public修饰的字段. 如果用getFields把所有的字段都改为public,那么修饰符则失去了其存在的意义. 因此可以用getSuperclass()得到父类,进行循环遍历,从而得到所有的属性. Class<?> clazz…
一.概述 方法是指人们在实践过程中为达到一定目的和效果所采取的办法.手段和解决方案. 所谓方法,就是解决一类问题的代码的有序组合,是一个功能模块.编程语言中的方法是组合在一起来执行操作语句的集合.例如,System.out.println 方法,该系统实际上是为了在控制台上输出的消息执行多条语句.可以将方法理解为“CD机”即放入不同的碟片出现不同的歌曲:或“榨汁机”即放入不同的水果榨出不同的果汁. 方法就是 给能够解决问题的多行代码取了一个名字的功能块 ,方便我们多次使用.方法的作用: 1).m…
什么时候可以使用Lambda?通常Lambda表达式是用在函数式接口上使用的.从Java8开始引入了函数式接口,其说明比较简单:函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口. java8引入@FunctionalInterface 注解声明该接口是一个函数式接口. 语法 抽象方法有且仅有一个 接口使用@FunctionalInterface 注解进行标注 接口中可以存在默认方法和静态方法实现 如下形式: /** * 定义函数式…
前言 有的时候,我们需要修改一个变量的值,但变量也许存在于 Jar 包中或其他位置,导致我们不能从代码层面进行修改,于是我们就用到了下面的场景,通过反射来进行修改变量的值. 定义一个实体类 class Bean{ private static final Integer INT_VALUE = 100; } 利用反射修改私有静态常量方法 System.out.println(Bean.INT_VALUE); Field field = Bean.class.getField("INT_VALUE…