A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 厦门校区   /  2018-5-12 15:02  /  13989 人查看  /  97 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5月12日   反射

施炎生

1.反射是在运行状态中,对于任何类,都能够得到它的成员(变量,方法)。
2.获取字节码对象三种方式。
3.获取无参构造方法:(1)获取字节码对象:Class clazz = Class.forName(“包名.类名);
                                (2)Constructor c=clazz.getConstructor();
4.获取有参构造方法:(1)获取字节码对象:Class clazz = Class.forName(“包名.类名);
                                 (2)Constructor c=clazz.getConstructor(参数类型.class;比如String.class,int.class);
5.获取public成员变量:(1)获取字节码对象:Class clazz = Class.forName(“包名.Student);
                                   (2)创建该类对象:Object stu=clazz.newInstance();
                                     (3)获取该类需要操作的字段(成员变量)Field f=clazz.getFiled("age");
                                      (4). 通过字段对象中的方法修改属性值
                                        f.set(stu,28);
                                       Object age=f.get(stu);
6.获取私有成员变量:在public成员变量的基础上,使用暴力获取,并调用字段对象的方法取消访问检查,暴力访问私有成员变量。
7.获取普通成员方法:(1)获取字节码对象:Class clazz = Class.forName(“包名.Student);
                                    (2)获取类的对象:Object stu = clazz.newInstance();
                                   (3)//获取无参无返回值的方法:
                                        Method m1 = clazz.getMethod("show1");
                                        m1.invoke(p);
                                         // 无参有返回值
                                         Method m2 = clazz.getMethod("show2");
                                        Object obj = m2.invoke(p);
                                       System.out.println(obj);
                                           // 有参无返回值
                                        Method m3 = clazz.getMethod("show3", String.class, int.class);
                                        m3.invoke(p, "张三", 10);
                                       // 有参有返回值
                                        Method m4 = clazz.getMethod("show4", String.class);
                                       Object obj2 = m4.invoke(p, "李四");
                                      System.out.println(obj2);
8.获取私有成员方法:在public成员变量的基础上,使用暴力获取,并调用 method.setAccessible(true)取消访问检查,暴力访问。
9.BeanUtils的常用方法
static void    setProperty(Object bean, String name, Object value)  用来给对象中的属性赋值(了解)
参数1: 需要设置属性的对象   参数2: 需要修改的属性名称    参数3: 需要修改的具体元素
static String getProperty(Object bean, String name) 用来获取对象中的属性(了解)
参数1: 要获取的javaBean对象    参数2: 对象中的哪个属性
static void    populate(Object bean, Map properties) 用来给对象中的属性赋值(掌握)
参数1: 要设置属性的对象     参数2: 将属性以Map集合的形式传入(Key : 属性的名称;Value:  属性具体的值)
     

回复 使用道具 举报
5月12日   反射
施炎生
1.反射是在运行状态中,对于任何类,都能够得到它的成员(变量,方法)。
2.获取字节码对象三种方式。
3.获取无参构造方法:(1)获取字节码对象:Class clazz = Class.forName(“包名.类名);
                   (2)Constructor c=clazz.getConstructor();
4.获取有参构造方法:(1)获取字节码对象:Class clazz = Class.forName(“包名.类名);
                   (2))Constructor c=clazz.getConstructor(参数类型.class;比如String.class,int.class);
5.获取public成员变量:(1)获取字节码对象:Class clazz = Class.forName(“包名.Student);
                         (2)创建该类对象:Object stu=clazz.newInstance();
                      (3)获取该类需要操作的字段(成员变量)
                        Field f=clazz.getFiled("age");
                                          (4). 通过字段对象中的方法修改属性值
                                                f.set(stu,28);
                                                Object age=f.get(stu);
6.获取私有成员变量:在public成员变量的基础上,使用暴力获取,并调用字段对象的方法取消访问检查,暴力访问私有成员变量。
7.获取普通成员方法:(1)获取字节码对象:Class clazz = Class.forName(“包名.Student);
                     (2)获取类的对象:Object stu = clazz.newInstance();
                    (3)//获取无参无返回值的方法:
                                 Method m1 = clazz.getMethod("show1");
                                 m1.invoke(p);
                                // 无参有返回值
                                   Method m2 = clazz.getMethod("show2");
                                Object obj = m2.invoke(p);
                                                System.out.println(obj);
                                                // 有参无返回值
                                                Method m3 = clazz.getMethod("show3", String.class, int.class);
                                                m3.invoke(p, "张三", 10);
                                                // 有参有返回值
                                                Method m4 = clazz.getMethod("show4", String.class);
                                                Object obj2 = m4.invoke(p, "李四");
                                                System.out.println(obj2);
8.获取私有成员方法:在public成员变量的基础上,使用暴力获取,并调用        method.setAccessible(true)取消访问检查,暴力访问。
9.BeanUtils的常用方法
static void    setProperty(Object bean, String name, Object value)  用来给对象中的属性赋值(了解)
参数1: 需要设置属性的对象   参数2: 需要修改的属性名称    参数3: 需要修改的具体元素

static String getProperty(Object bean, String name) 用来获取对象中的属性(了解)
参数1: 要获取的javaBean对象           参数2: 对象中的哪个属性

static void    populate(Object bean, Map properties) 用来给对象中的属性赋值(掌握)
参数1: 要设置属性的对象     参数2: 将属性以Map集合的形式传入(Key : 属性的名称;Value:  属性具体的值)
回复 使用道具 举报
一.反射:获取类对象(Class对象).
作用:运行时,获取类对象成员,调用成员.
主要是通过创建该类的字节码对象再来创建该类的对象
Class.forname(全类名)方法创建字节码对象,
另外还有: 类名.class 对象名.getclass
newInstance方法来创建该类的对象(通过空参)
主要的方法:
getConstructors()可以查看所有的public修饰的构造方法
getConstructor()括号带参数时,参数要用 数据类型.class ,不写为空参
通过 带有Declared的方法都是可以访问被私有修饰的方法
Field 是获取成员变量时返回的值,  有get和set方法
Invoke( 方法名,参数 )调用成员方法的方法 参数根据方法来定
注意:
通过反射获取的私有变量或者私有方法,都要用setAccessible()方法让JVM不检查.
二.JavaBean:
作用:用来封装数据,和普通的类多了生成一个序列号.
BeanUitls重要的方法:
Static void Populate(Object bean,Map map) 给对象中的属性赋值
                                                                                参数1: 要设置属性的对象
                                                                                参数2: 将属性以Map集合的形式传入
                                                                                                                Key : 属性的名称
                                                                                                        Value:  属性具体的值
注意:
在测试类中用Map集合添加的元素在对应的类中找不到相同的元素,所有需要捕获异常.
回复 使用道具 举报
康元中
  day13
  今天学习了反射相关的内容
1 反射可以获取一个类的成员和构造,以前我们是通过set/get创建对象来访问,现在用反射可以通过获取该类的字节码对象
然后字节码对象调用各种方法来访问成员和构造.
  首先是访问构造方法的步骤: 创建字节码对象(三种方式) Class.forName("全类名");
  然后调用Class类里的方法:
        ///创建有参构造------重点主要是传递参数这边要注意: 传递的是有参构造的  (变量类型.class) 不要加"";
         Constructor c = clazz.getConstructor(String.class,int.class);
             //通过有参构造创建对象(这个对象是在这边是Student 类对象)
            //这边注意(  参数的传递  )
            Object stu = c.newInstance("张飞",20); //传递参数
            //打印创建好的这个对象(已经重写toString 方法打印成员信息);
            System.out.println(stu);
    还有 Constructor[] c = clazz.getConstructors()//通过该类的字节码--可以访问所有public 修饰的构造方法;
         onstructor c = clazz.getConstructor();
2 获取成员变量的步骤:
        Field f = clazz.getDeclaredField("name");
                f.setAccessible(true);//暴力反射(获取私有的成员一定得开true)
                //通过这个字段给成员变量name赋予值;
                f.set(stu, "张飞");//参数1是成员变量所在的对象/参数2是给成员变量赋的值
                Object name = f.get(stu);//参数是 该成员变量所在的对象
                System.out.println(name);
   还有
        Field[] getFields() 和        Field[] getDeclaredFields() 注意区别获取public修饰的/ 获取所有的包括私有
        Object get(Object obj) 和void set(Object obj, Object value) Field 字段里的方法
        Field getField(String name) 和Field getDeclaredField(String name)  

3获取成员方法的步骤:
       
       Method m = clazz.getMethod("setName",String.class);//参数1是方法的名字/参数2是参数.class
       m.invoke(stu, "张飞");// 参数1是 该类所在的对象/参数2是给这个参数赋值       
        System.out.println(stu);// 打印对象
        参照访问私有成员变量的方式,访问私有成员方法用到的方法getDeclaredMethod()
        还有其他的方法:
                Method[] m = clazz.getMethods();//打印public 修饰的所有方法                

  下午学习了BeanUtil 相关的知识
        1 javaBean的封装数据的操作一些操作规范
                                实例化一个serv。。。的接口且随机生成一个序列号
                                重写set/get方法和无参构造
        2学习自定义一个BeanUtil
         populate()参数一为bean对象参数二为Map集合。这个方法就是通过map集合的里面的键值对 给与bean对象
        赋值。
回复 使用道具 举报
康元中
  day13
  今天学习了反射相关的内容
1 反射可以获取一个类的成员和构造,以前我们是通过set/get创建对象来访问,现在用反射可以通过获取该类的字节码对象
然后字节码对象调用各种方法来访问成员和构造.
  首先是访问构造方法的步骤: 创建字节码对象(三种方式) Class.forName("全类名");
  然后调用Class类里的方法:
        ///创建有参构造------重点主要是传递参数这边要注意: 传递的是有参构造的  (变量类型.class) 不要加"";
         Constructor c = clazz.getConstructor(String.class,int.class);
             //通过有参构造创建对象(这个对象是在这边是Student 类对象)
            //这边注意(  参数的传递  )
            Object stu = c.newInstance("张飞",20); //传递参数
            //打印创建好的这个对象(已经重写toString 方法打印成员信息);
            System.out.println(stu);
    还有 Constructor[] c = clazz.getConstructors()//通过该类的字节码--可以访问所有public 修饰的构造方法;
         onstructor c = clazz.getConstructor();
2 获取成员变量的步骤:
        Field f = clazz.getDeclaredField("name");
                f.setAccessible(true);//暴力反射(获取私有的成员一定得开true)
                //通过这个字段给成员变量name赋予值;
                f.set(stu, "张飞");//参数1是成员变量所在的对象/参数2是给成员变量赋的值
                Object name = f.get(stu);//参数是 该成员变量所在的对象
                System.out.println(name);
   还有
        Field[] getFields() 和        Field[] getDeclaredFields() 注意区别获取public修饰的/ 获取所有的包括私有
        Object get(Object obj) 和void set(Object obj, Object value) Field 字段里的方法
        Field getField(String name) 和Field getDeclaredField(String name)  

3获取成员方法的步骤:
       
       Method m = clazz.getMethod("setName",String.class);//参数1是方法的名字/参数2是参数.class
       m.invoke(stu, "张飞");// 参数1是 该类所在的对象/参数2是给这个参数赋值       
        System.out.println(stu);// 打印对象
        参照访问私有成员变量的方式,访问私有成员方法用到的方法getDeclaredMethod()
        还有其他的方法:
                Method[] m = clazz.getMethods();//打印public 修饰的所有方法                

  下午学习了BeanUtil 相关的知识
        1 javaBean的封装数据的操作一些操作规范
                                实例化一个serv。。。的接口且随机生成一个序列号
                                重写set/get方法和无参构造
        2学习自定义一个BeanUtil
         populate()参数一为bean对象参数二为Map集合。这个方法就是通过map集合的里面的键值对 给与bean对象
        赋值。
回复 使用道具 举报
通过反射获得对象的三种方法:
1.通过对象.class
2.通过类名.getclass;
3.通过Class.for
创建构造Constructor
1.通过字节码对象调用  Constructor方法获取构造,可以是有参构造和无参构造 然后通过构造对象调用.newInstance方法返回一个对象;
2.直接用字节码对象调用newInstance获取对象
通过反射获取变量 Field;
首先要有 字节码对象 有了字节码对象就可以获取 类的对象;
有了类字节码对象就可以通过 getDeclaredField(这里传入一个变量名,这里会自动匹配在类中是否存在这个变量,如果不存在就会报错!)方法获取变量的对象;
有了变量对象就可以获取变量中的内容get(传入一个对象获取这个对象中的内容),set(传入一个对象获取这个对象中的内容,改变的参数);
通过反射获取方法mathod
这个和获取变量的很像;
也是通过字节码对象来获取的getMethod("传入一个方法名",如果有参数就写上 参数.Class)返回的是一个对象的字节码;
然后在对象的字节码后面点上一个invoke(传入一个类的对象,有参传参,没有就算了);
暴力反射setAccessible(true)
就是在你获取到的字节码变量或是字节码方法后面点上一个setAccessible(true),就可以让虚拟机无视你的权限修饰符都默认成public; 这样就可以随意访问了;
BeanUtils工具类的方法
static void        setProperty(需要修改的对象, 变量名, 修改的参数)// 给JavaBean对象的成员变量进行赋值

static String        getProperty(Object bean, String name) // 获取JavaBean对象的成员变量的值

将map对象中的内容传给对象,key是对象中的变量,value是变量的值;
static void        populate(Object bean, Map properties)//// 给JavaBean对象的成员变量进行赋值




回复 使用道具 举报
陈叶隆
今天学习了web前端开发,学习了html的一些书写格式,比如列表<ol>,字体<font>,超链接<a href=””>,超链接后面接的是要链接的路径,<form action>链接的是提交的路径,这两个区别我很容易搞混.还有<table>里面嵌套<table>看着逻辑不是很复杂,实际操作起来却很难.<form>的格式是<input type=”” name>,这里最重要的是一定要写name,这个是以后跟我们后台接收数据息息相关的.
回复 使用道具 举报
李成林
html的学习总结
今天学习的内容很多都是需要记忆的在逻辑上没有太大问题
主要学习的标签有:
排版标签:<h><p><b><i><u>
图片标签:"<img src width height alt>
序列标签: 有序<ol><li>无序<ul><li>
超链接: <a> 属性herf连接路径 target 打开方式有_self,_blank;
表格标签:<table>属性有width.height.border(边界).align(位置)
<tr>行属性有 background(背景图片)<td>列属性colspan(跨列合并)rowspan(跨行合并)
表单标签:<form>(在form范围内的可以跳转)
form属性action提交路径 method 提交方式


<input(输入) type.......>
text 文档框
password 密码框
radio单选
checkbox 复选
button 普通按钮
fiel 文件
reset重置
hiddn隐藏
下拉列表:<select>(挑选)<option>(选项)
文本域:<textarea> 属性cols 列 rows 行
回复 使用道具 举报
Do1 中级黑马 2018-5-16 09:07:01
89#
今天学习了DIV


DIV在HTML前端页面布局中,非常重要,我们经常遇到的问题是:DIV居中,DIV自适应高度等等,下面就来总结一下。
多个div使用会自动换行,应该使用float属性
  left :  对象浮在左边
  right :  对象浮在右边
例如:
  float: left  和 float: right 是两个div左右排列在同一行
<div style="width: 20%; float: left; height: 100%">图片</div>
<div style="width: 50%; float: right; height: 100%">图片</div>
等,所以div很好用
回复 使用道具 举报
李志勇:
bootstrap:
http://www.bootcss.com
-全局CSS样式
- 组件
- javaScript插件
这三个查询  可以更快更加准确的对HTML页面作的更加美观;
MYSQL:
是文件管理系统   关系型数据库,存放的是实体之间的关系;
学习了  数据库的增删改查  这些功能  初步的接触数据库;
一台数据库服务器中会创建很多数据库(一个项目,会创建一个数据库)。在数据库中会创建很多张表(一个实体会创建一个表)。在表中会有很多记录(一个对象的实例会添加一条新的记录)。
create database 数据库名 [character set 字符集 collate 字符集校对规则];
?查看数据库服务器中所有的数据库:show databases;
查看某个数据库的定义信息: show create database 数据库名称
alter database 数据库名称 character set 字符集 collate 校对规则;
drop database 数据库名称
?切换数据库:use 数据库名称;
查看当前正在使用的数据库  selecte database();
?create table 表名称(字段名称 字段类型(长度) 约束,字段名称 字段类型(长度) 约束…);
回复 使用道具 举报
郑志祥
反射可以干嘛(目的)?
操作类中的属性,方法,构造。


new 对象也可以操作 为什么要用反射?
因为有些时候,
比如私有的构造方法,new不出来,可以通过反射来获取。


Web.xml的Servlet就是通过反射来实现的(权限地名)

获得类字节码对象三种方式;
1.通过类名.clss (在javaBean使用)
2.通过对象getclass
3.使用class的forname的静态方法获得(推荐使用)因为通用性比较高。可以在java中编写,也可以在web.xml的配置文件使用。



二。通过反射来操作构造方法
反射的第一步都是获得对象。

第二步获取有参构造(如果是私有的构造)
getDeclaredConstructor
setAcceddible(解除私有构造)


三。通过反射来获得属性(field)
clazz.getDeclaredField(获得私有的属性)
setAcceddible(解除私有构造)




四,通过反射获得类中的方法(掌握)
.getDeclaredMethod


利用BeanUtils需要到2个包     1.dbUtils    2.logging


事物是对数据库mysql的操作,与java代码无关
为什么要在Service添加事物管理?
因为Service是调用Dao里面的方法,我们是要让这两个方法同时进行。(要嘛都成功,要嘛都失败)

回复 使用道具 举报
12345
您需要登录后才可以回帖 登录 | 加入黑马