06_Java基础_反射、正则表达式、图形界面
2015-05-09 08:40
501 查看
------- android培训、java培训、.net培训、IOS培训
期待与您交流! -------
要想获得某个字节码文件中的成员,必须先获得要先获取该字节码文件的对象。
这个方法时通用的,但是前提是该类必须已经创建了对象,才可以调用getClass方法。
2.使用任意 数据类 的一个静态成员class,这是所有的数据类型都具备的一个属性。
虽然不用new对象。但是,还需要使用具体的类。
3.使用Class类中的forName方法。通过给定类名来获取对应的字节码文件对象。
这种方式很方便,只要知道类的名字就可以了。
获取对应的字节码文件直接由forName方法自动完成。
这就是反射技术使用的获取字节码文件对象的方式。
2.再获取给定的构造函数。
3.通过构造函数初始化对象。
getDeclaredXXX:获取本类中已有的成员。
其好处是:用一些符号来代替代码,书写起来很方便。且,正则表达式在很多语言中规则是差不多通用的。
其弊端是:因为是一些符号组成的表达式,所以阅读起来可读性不高,读者需要先把符号学会才行。
将给定的正则表达式作为参数传到字符串类型对象的matches方法中,可以实现对该字符串对象的检验。
判断字符串内容的时候,用中括号来判断。
[1-9]:用来校验字符串的某一位字符是1-9的某一位数字。
[abc]:用来校验字符串的某一位字符是abc其中的某一位。
[^abc]:用来校验字符串的某一位字符除了abc都行。
.:表示该处字符可以使任意字符。
判断符合要求的字符出现的次数的时候,用大括号来判断。
[0-9]{4,14}:用来验证满足0-9要求的字符出现的次数是4-14次。
[0-9]{4,}:用来验证满足0-9要求的字符出现的次数大于等于4次。
[0-9]+:用来验证满足0-9要求的字符出现的次数是1次或多次。
[0-9]*:用来验证满足0-9要求的字符出现的次数是0次或多次。
[0-9]?:用来验证满足0-9要求的字符出现的次数是0次或1次。
[0-9]{4}:用来验证满足0-9要求的字符出现的次数恰好4次。
Frame f = new Frame("my frame");
//2, 对窗体进行基本设置。
f.setSize(500, 400);
f.setLocation(400, 200);
//设置布局。
f.setLayout(new FlowLayout());
//给窗体添加组件。
Button but = new Button("my button");
//加入一个文本框组件。
TextField tf = new TextField(40);
//将组件添加到窗体中。
f.add(tf);
f.add(but);
需求:想要点击按钮有效果,比如打印一句话。
思路:
1,确定事件源。按钮。
2,确定监听器。按钮添加监听器,按钮对象最清楚。到按钮对象中查找。
3,定义处理方式。
定义的规范:XXXLinstener:XXX监听器。 --对应的XXXEvent事件。
1,在按钮上添加所需的监听器。
but.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("按钮被触发了....."+e);
System.exit(0);
}
});
需求:想要实现点击窗体X就可以实现窗体的关闭。
思路:
1,事件源:窗体。
2,监听器。通过窗口对象去查。
3,事件处理。
到底哪些监听接口有适配器类?
只要监听接口的中的方法在2个以内,都没有适配器类。适配器的出现只为方便创建监听器对象。
但是一般监听接口都有适配器。
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.out.println("window closing");
System.exit(0);
}
public void windowOpened(WindowEvent e) {
System.out.println("window open");
}
});
演示鼠标监听。
按钮事件源。
鼠标监听器注册到按钮上。
组件.addXXXListener(new XXXAdapter()
{
public void methodName(XXXEvent e){}
}));
具体如下:
but.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
/*
* 想要对鼠标双击进行处理。应该找鼠标事件对象。因为事件对象一产生,内部必然封装事件源以及事件相关内容。
* 要查MouseEvent对象。
*/
if(e.getClickCount() == 2){
System.out.println("mouse double click");
}
}
});
需求:文本框中只能输入数字。
事件源:文本框。
文本框注册键盘监听。
事件处理
如下:
tf.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
//执行代码
}
});
------- android培训、java培训、.net培训、 IOS培训 期待与您交流!
-------
期待与您交流! -------
反射
反射的基本功能是可以获得字节码文件中的成员。要想获得某个字节码文件中的成员,必须先获得要先获取该字节码文件的对象。
获取字节码文件对象的方法有以下几种:
1.使用类中的getClass方法。这个方法时通用的,但是前提是该类必须已经创建了对象,才可以调用getClass方法。
2.使用任意 数据类 的一个静态成员class,这是所有的数据类型都具备的一个属性。
虽然不用new对象。但是,还需要使用具体的类。
3.使用Class类中的forName方法。通过给定类名来获取对应的字节码文件对象。
这种方式很方便,只要知道类的名字就可以了。
获取对应的字节码文件直接由forName方法自动完成。
这就是反射技术使用的获取字节码文件对象的方式。
使用forName方法获取相应的字节码文件对象
package cn.itcast.reflect.demo; import cn.itcast.domain.Person; public class Reflect_GetClassDemo { public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException { getClass_3(); } public static void getClass_3() throws ClassNotFoundException, InstantiationException, IllegalAccessException { String className = "cn.itcast.domain.Person"; //通过给定的类名称,加载对应的字节码文件,并封装成字节码文件对象Class. Class clazz = Class.forName(className); //拿到字节码文件对象之后,就可以对其进行操作了。 //创建实例:通过newInstance()就可以创建字节码对象所表示的类的实例。 Object obj = clazz.newInstance(); System.out.println(obj); } }
通过getConstructor函数获得指定的构造函数并初始化对象
1.获取字节码文件对象。2.再获取给定的构造函数。
3.通过构造函数初始化对象。
package cn.itcast.reflect.demo; import java.lang.reflect.Constructor; public class Reflect_GetConstructor { public static void main(String[] args) throws Exception { getConstructorDemo(); } public static void getConstructorDemo() throws Exception { String className = "cn.itcast.domain.Person"; Class clazz = Class.forName(className); //获取指定的构造器。获取Person类中两个参数string,int的构造函数。 Constructor cons = clazz.getConstructor(String.class,int.class); //有了构造器对象后,通过构造器对象来初始化给类对象。 Object obj = cons.newInstance("wangwu",23); System.out.println(obj); } }
获取字节码文件对象中的成员
getXXX:获取都是类中公共的成员。getDeclaredXXX:获取本类中已有的成员。
package cn.itcast.reflect.demo; import java.lang.reflect.Field; public class Reflect_GetField { public static void main(String[] args) throws Exception { getFieldDemo(); } public static void getFieldDemo() throws Exception { String className = "cn.itcast.domain.Person"; Class clazz = Class.forName(className); String fieldName = "age"; //获取age字段对象。 // Field field = clazz.getField(fieldName);//获取是公共的字段。 Field field = clazz.getDeclaredField(fieldName); //对其进行值的设置,必须先有对象。 Object obj = clazz.newInstance(); //通过查找父类AccessiableObject的方法。setAccessiable(true); field.setAccessible(true);//取消权限检查,暴力访问。一般不访问私有。 field.set(obj, 30); System.out.println(field.get(obj)); } }
getMethod方法获取字节码文件对象的方法
package cn.itcast.reflect.demo; import java.lang.reflect.Method; public class Reflect_GetMethod { public static void main(String[] args) throws Exception { getMethodDemo2(); } public static void getMethodDemo2() throws Exception { String className = "cn.itcast.domain.Person"; Class clazz = Class.forName(className); String methodName = "staticShow"; Method method = clazz.getMethod(methodName, null);//null的位置应该传的是参数,但是这里没有参数。 method.invoke(null, null);//前一个null应该传对象,后一个null应该传参数。因为是静态无参函数,所以两者都是null。 } public static void getMethodDemo() throws Exception { String className = "cn.itcast.domain.Person"; Class clazz = Class.forName(className); String methodName = "show"; Method method = clazz.getMethod(methodName, String.class,int.class); Object obj = clazz.newInstance(); method.invoke(obj, "wangcai",20); } }
正则表达式
概述
对字符串进行复杂的操作的时候,可以使用正则表达式。其好处是:用一些符号来代替代码,书写起来很方便。且,正则表达式在很多语言中规则是差不多通用的。
其弊端是:因为是一些符号组成的表达式,所以阅读起来可读性不高,读者需要先把符号学会才行。
将给定的正则表达式作为参数传到字符串类型对象的matches方法中,可以实现对该字符串对象的检验。
正则表达式的一些规则:
首先说一下,API文档中也是有正则表达式的符号说明的。判断字符串内容的时候,用中括号来判断。
[1-9]:用来校验字符串的某一位字符是1-9的某一位数字。
[abc]:用来校验字符串的某一位字符是abc其中的某一位。
[^abc]:用来校验字符串的某一位字符除了abc都行。
.:表示该处字符可以使任意字符。
判断符合要求的字符出现的次数的时候,用大括号来判断。
[0-9]{4,14}:用来验证满足0-9要求的字符出现的次数是4-14次。
[0-9]{4,}:用来验证满足0-9要求的字符出现的次数大于等于4次。
[0-9]+:用来验证满足0-9要求的字符出现的次数是1次或多次。
[0-9]*:用来验证满足0-9要求的字符出现的次数是0次或多次。
[0-9]?:用来验证满足0-9要求的字符出现的次数是0次或1次。
[0-9]{4}:用来验证满足0-9要求的字符出现的次数恰好4次。
图形界面
//1,创建一个窗体。FrameFrame f = new Frame("my frame");
//2, 对窗体进行基本设置。
f.setSize(500, 400);
f.setLocation(400, 200);
//设置布局。
f.setLayout(new FlowLayout());
//给窗体添加组件。
Button but = new Button("my button");
//加入一个文本框组件。
TextField tf = new TextField(40);
//将组件添加到窗体中。
f.add(tf);
f.add(but);
需求:想要点击按钮有效果,比如打印一句话。
思路:
1,确定事件源。按钮。
2,确定监听器。按钮添加监听器,按钮对象最清楚。到按钮对象中查找。
3,定义处理方式。
定义的规范:XXXLinstener:XXX监听器。 --对应的XXXEvent事件。
1,在按钮上添加所需的监听器。
but.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("按钮被触发了....."+e);
System.exit(0);
}
});
需求:想要实现点击窗体X就可以实现窗体的关闭。
思路:
1,事件源:窗体。
2,监听器。通过窗口对象去查。
3,事件处理。
到底哪些监听接口有适配器类?
只要监听接口的中的方法在2个以内,都没有适配器类。适配器的出现只为方便创建监听器对象。
但是一般监听接口都有适配器。
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.out.println("window closing");
System.exit(0);
}
public void windowOpened(WindowEvent e) {
System.out.println("window open");
}
});
演示鼠标监听。
按钮事件源。
鼠标监听器注册到按钮上。
组件.addXXXListener(new XXXAdapter()
{
public void methodName(XXXEvent e){}
}));
具体如下:
but.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
/*
* 想要对鼠标双击进行处理。应该找鼠标事件对象。因为事件对象一产生,内部必然封装事件源以及事件相关内容。
* 要查MouseEvent对象。
*/
if(e.getClickCount() == 2){
System.out.println("mouse double click");
}
}
});
需求:文本框中只能输入数字。
事件源:文本框。
文本框注册键盘监听。
事件处理
如下:
tf.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
//执行代码
}
});
------- android培训、java培训、.net培训、 IOS培训 期待与您交流!
-------
相关文章推荐
- 黑马程序员--Java基础--正则表达式、反射机制
- 黑马程序员——Java基础:反射、JDK1.5新特性、正则表达式
- Java基础——反射机制、正则表达式
- 黑马程序员-----java基础(正则表达式和反射)
- 黑马程序员—java基础之反射与正则表达式
- java基础知识---网络编程、反射技术、正则表达式
- java基础——XML、正则表达式、反射机制
- 黑马程序员——Java基础正则表达式、反射
- Java语言基础-反射机制、正则表达式
- java基础11:正则表达式与反射
- java基础10:正则表达式与反射
- 黑马程序员-java基础(十)-反射、正则表达式
- JAVA基础学习之IP简述使用、反射、正则表达式操作、网络爬虫、可变参数、了解和入门注解的应用、使用Eclipse的Debug功能(7)
- 黑马程序员学习log第九篇基础知识:JAVA的面向对象之正则表达式及反射总结
- java基础---正则表达式
- 黑马程序员_毕向东JAVA基础_正则表达式
- 黑马程序员----JAVA基础之正则表达式
- Java基础_正则表达式常用
- java基础---->正则表达式
- 字符串处理是许多程序中非常重要的一部分,它们可以用于文本显示,数据表示,查找键和很多目的.在Unix下,用户可以使用正则表达式的强健功能实现这些 目的,从Java1.4起,Java核心API就引入了java.util.regex程序包,它是一种有价值的基础