- 浏览: 12013 次
- 性别:
- 来自: 北京
文章分类
最新评论
------- android培训、java培训、期待与您交流! ----------
反射
1.Class类
.class文件加载到内存中就是一个Class对象
获取Class对象的方式有3种:
Scanner sc = new Scanner("xxx.txt");
Class.forName(sc.nextLine());
类名.class
对象.getClass()
类名.isprimitive是否是基本类型的类
类名.isArray是否是数组类型的类
2.Constructor类
Class类的newInstance()方法是使用该类无参的构造函数创建对象, 如果一个类没有无参的构造函数, 就不能这样创建了
可以调用Class类的getConstructor(String.class,int.class)方法获取一个指定的构造函数
然后再调用Constructor类的newInstance("张三",20)方法创建对象
3.Field
Class.getField(String)方法可以获取类中的指定字段(可见的), 如果是私有的可以用getDeclaedField("name")方法获取
通过set(obj, "李四")方法可以设置指定对象上该字段的值, 如果是私有的需要先调用setAccessible(true)设置访问权限
用获取的指定的字段调用get(obj)可以获取指定对象中该字段的值
4.Method
Class.getMethod(String, Class...) 和 Class.getDeclaredMethod(String, Class...)方法可以获取类中的指定方法
调用invoke(Object, Object...)可以调用该方法
Class.getMethod("eat") invoke(obj) Class.getMethod("eat",int.class) invoke(obj,10)
构造方法的反射应用
·Constructor类代表某个类中的一个构造方法。
Constructor对象代表一个构造方法,Constructor对象上会有的方法有:得到方法名字,得到所属于的类,产生实例对象。
·得到某个类所有的构造方法:
例子:Constructor[] constructors= Class.forName("java.lang.String").getConstructors();
·得到某一个构造方法:
例子:Constructor constructor = Class.forName("java.lang.String").getConstructor(StringBuffer.class);//获得方法时要用到类型
注意:
一个类有多个构造方法,用什么方式可以区分清楚想得到其中的哪个方法呢?根据参数的个数和类型,例如,Class.getMethod(name,Class... args)中的args参数就代表所要获取的那个方法的各个参数的类型的列表。重点:参数类型用什么方式表示?用Class实例对象。
·创建实例对象:
通常方式:String str = new String(new StringBuffer("abc"));
反射方式: String str = (String)constructor.newInstance(new StringBuffer("abc")); //调用获得的方法时要用到上面相同类型的实例对象
·Class.newInstance()方法:
例子:String obj = (String)Class.forName("java.lang.String").newInstance();
该方法内部先得到默认的构造方法,然后用该构造方法创建实例对象。
成员方法的反射
·Method类代表某个类中的一个成员方法。
·得到类中的某一个方法:
例子:Method charAt = Class.forName("java.lang.String").getMethod("charAt", int.class);
调用方法:
通常方式:System.out.println(str.charAt(1));
反射方式:System.out.println(charAt.invoke(str, 1));
注意:
如果传递给Method对象的invoke()方法的第一个参数为null,这有着什么样的意义呢?说明该Method对象对应的是一个静态方法!
·jdk1.4和jdk1.5的invoke方法的区别:
Jdk1.5:public Object invoke(Object obj,Object... args)
Jdk1.4:public Object invoke(Object obj,Object[] args)
即按jdk1.4的语法,需要将一个数组作为参数传递给invoke方法时,数组中的每个元素分别对应被调用方法中的一个参数。所以,调用charAt方法的代码也可以用Jdk1.4改写为 charAt.invoke("str", new Object[]{1})形式。
框架与框架要解决的核心问题
我做房子卖给用户住,由用户自己安装门窗和空调,我做的房子就是框架,用户需要使用我的框架,把门窗插入进我提供的框架中。框架与工具类有区别,工具类被用户的类调用,而框架则是调用用户提供的类。
·框架要解决的核心问题
我在写框架(房子)时,你这个用户可能还在上小学,还不会写程序呢?我写的框架程序怎样能调用到你以后写的类(门窗)呢?
因为在写才程序时无法知道要被调用的类名,所以,在程序中无法直接new 某个类的实例对象了,而要用反射方式来做。
正则表达式
1.什么是正则表达式regex
是一种字符串的约束格式, 例如在某些网站上填写邮箱的时候, 如果乱写会提示输入不合法, 这种验证就是使用正则表达式做的.
2.匹配
String.matches() 验证一个字符串是否匹配指定的正则表达式
3.分割
String.split() 用指定正则表达式能匹配的字符作为分隔符, 分割字符串
4.替换
String.replaceAll() 把字符串中能匹配正则表达式的部分替换为另一个字符串
5.查找
Pattern.compile() 创建正则表达式对象
Pattern.matcher() 用正则表达式匹配一个字符串, 得到匹配器
Matcher.find() 查找字符串中是否包含能匹配正则表达式的部分
Matcher.group() 获取匹配的部分
package zhengzeyufanshe;
public class ZhengZe {
public static void main(String[] args) {
TODO Auto-generated method stub
字符类
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)
[a-z&&[def]] d、e 或 f(交集)
[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去)
[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去)
预定义字符类
. 任何字符
\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
String x = "[abcd]
System.out.println("da".matches(x));
String regex = "[^abc]";
System.out.println("a".matches(regex));
String y = "\\s";
System.out.println("\r".matches(y));
String regex1 = "[abc]{3,5}";
System.out.println("ccccac".matches(regex1));
这里有几道练习题大家可以想一想:
1,qq号码
2,1-6位字母或数字:
3,手机号
4,用户名. 字母数字下划线10位以内, 必须是字母开头
5,密码. 任意字符, 6-16位
String qq = "[1-9]\\d{4,10}";
String shuzi = "[0-9a-zA-Z]{1,6}";
String shuzi1= "[\\w^_]{1,6}";
String shouji = "1[34578]\\d{9}";
String yonghu = "[a-zA-Z]\\w{0-9}";
String mama = ".{6-16}";
.代表任意字符需要转义
String str = "开开开玩玩笑那把";
String regex2 = "(.)\\1+";
System.out.println(str.replaceAll(regex2,"$1"));
6,分组,例如快快乐乐,乐呵乐呵
7,Email
8,手机号码,后边五位必须是相同的
9,替换,将 开开开玩玩玩笑呢吧 替换成 开玩笑呢吧
10,将一条短信里面的电话号码都提出来
String regex001 = "(.)\\1(.)\\2";
System.out.println("快乐乐".matches(regex001));
String regex002 = "[\\w-\\.]+@([\\w-]+\\.){1,2}[a-z]{2,3}";
System.out.println("634157146@qq.com".matches(regex002));//本人qq邮箱哈
String shouji001 = "1[34578]\\d{4}(\\d)\\1{4}";
}
}
枚举总结一。枚举的作用介绍枚举,可以对只有几种取值可能的东西,进行限定,加入你取值不是限定中的其中之一,那么编译器就会报错,这样大大提高了程序的安全性,健壮性!二。枚举的实现原理枚举的原理,就好像是单例模式,把构造方法私有化,不要让别人创建对象,而由自己对外提供几个自己这个类的静态常量对象,这样,在赋值的时候,只能选我提供的这几个静态常量对象,而不能自己new对象!所以每个枚举元素都是一个对象!
2.自定义的枚举可以有抽象方法,该抽象方法必须由枚举的元素对象去实现,只要在枚举元素后面加个括号,括号后面在加个大括号,里面写个抽象方法的实现,就代表该元素对象是枚举类的子类!!
3.定义枚举用enum关键字,类似class关键字,枚举是一个特殊的类,枚举的取值范围,元素列表,必须定义在第一行,最前面,多个元素用逗号分隔,最后个元素用分号结束!!枚举的构造方法必须私有化!枚举可以有带参数的构造方法,调用该构造方法,只要在元素后面加个()括号传个相应的参数就可!
4.new Data(30){}。代表创建一个Data的子类,并调用父类有参数的构造方法!枚举当之有一个元素成员时,那就是一个单例!
------- android培训、java培训、期待与您交流! ----------
反射
1.Class类
.class文件加载到内存中就是一个Class对象
获取Class对象的方式有3种:
Scanner sc = new Scanner("xxx.txt");
Class.forName(sc.nextLine());
类名.class
对象.getClass()
类名.isprimitive是否是基本类型的类
类名.isArray是否是数组类型的类
2.Constructor类
Class类的newInstance()方法是使用该类无参的构造函数创建对象, 如果一个类没有无参的构造函数, 就不能这样创建了
可以调用Class类的getConstructor(String.class,int.class)方法获取一个指定的构造函数
然后再调用Constructor类的newInstance("张三",20)方法创建对象
3.Field
Class.getField(String)方法可以获取类中的指定字段(可见的), 如果是私有的可以用getDeclaedField("name")方法获取
通过set(obj, "李四")方法可以设置指定对象上该字段的值, 如果是私有的需要先调用setAccessible(true)设置访问权限
用获取的指定的字段调用get(obj)可以获取指定对象中该字段的值
4.Method
Class.getMethod(String, Class...) 和 Class.getDeclaredMethod(String, Class...)方法可以获取类中的指定方法
调用invoke(Object, Object...)可以调用该方法
Class.getMethod("eat") invoke(obj) Class.getMethod("eat",int.class) invoke(obj,10)
构造方法的反射应用
·Constructor类代表某个类中的一个构造方法。
Constructor对象代表一个构造方法,Constructor对象上会有的方法有:得到方法名字,得到所属于的类,产生实例对象。
·得到某个类所有的构造方法:
例子:Constructor[] constructors= Class.forName("java.lang.String").getConstructors();
·得到某一个构造方法:
例子:Constructor constructor = Class.forName("java.lang.String").getConstructor(StringBuffer.class);//获得方法时要用到类型
注意:
一个类有多个构造方法,用什么方式可以区分清楚想得到其中的哪个方法呢?根据参数的个数和类型,例如,Class.getMethod(name,Class... args)中的args参数就代表所要获取的那个方法的各个参数的类型的列表。重点:参数类型用什么方式表示?用Class实例对象。
·创建实例对象:
通常方式:String str = new String(new StringBuffer("abc"));
反射方式: String str = (String)constructor.newInstance(new StringBuffer("abc")); //调用获得的方法时要用到上面相同类型的实例对象
·Class.newInstance()方法:
例子:String obj = (String)Class.forName("java.lang.String").newInstance();
该方法内部先得到默认的构造方法,然后用该构造方法创建实例对象。
成员方法的反射
·Method类代表某个类中的一个成员方法。
·得到类中的某一个方法:
例子:Method charAt = Class.forName("java.lang.String").getMethod("charAt", int.class);
调用方法:
通常方式:System.out.println(str.charAt(1));
反射方式:System.out.println(charAt.invoke(str, 1));
注意:
如果传递给Method对象的invoke()方法的第一个参数为null,这有着什么样的意义呢?说明该Method对象对应的是一个静态方法!
·jdk1.4和jdk1.5的invoke方法的区别:
Jdk1.5:public Object invoke(Object obj,Object... args)
Jdk1.4:public Object invoke(Object obj,Object[] args)
即按jdk1.4的语法,需要将一个数组作为参数传递给invoke方法时,数组中的每个元素分别对应被调用方法中的一个参数。所以,调用charAt方法的代码也可以用Jdk1.4改写为 charAt.invoke("str", new Object[]{1})形式。
框架与框架要解决的核心问题
我做房子卖给用户住,由用户自己安装门窗和空调,我做的房子就是框架,用户需要使用我的框架,把门窗插入进我提供的框架中。框架与工具类有区别,工具类被用户的类调用,而框架则是调用用户提供的类。
·框架要解决的核心问题
我在写框架(房子)时,你这个用户可能还在上小学,还不会写程序呢?我写的框架程序怎样能调用到你以后写的类(门窗)呢?
因为在写才程序时无法知道要被调用的类名,所以,在程序中无法直接new 某个类的实例对象了,而要用反射方式来做。
正则表达式
1.什么是正则表达式regex
是一种字符串的约束格式, 例如在某些网站上填写邮箱的时候, 如果乱写会提示输入不合法, 这种验证就是使用正则表达式做的.
2.匹配
String.matches() 验证一个字符串是否匹配指定的正则表达式
3.分割
String.split() 用指定正则表达式能匹配的字符作为分隔符, 分割字符串
4.替换
String.replaceAll() 把字符串中能匹配正则表达式的部分替换为另一个字符串
5.查找
Pattern.compile() 创建正则表达式对象
Pattern.matcher() 用正则表达式匹配一个字符串, 得到匹配器
Matcher.find() 查找字符串中是否包含能匹配正则表达式的部分
Matcher.group() 获取匹配的部分
package zhengzeyufanshe;
public class ZhengZe {
public static void main(String[] args) {
TODO Auto-generated method stub
字符类
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)
[a-z&&[def]] d、e 或 f(交集)
[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去)
[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去)
预定义字符类
. 任何字符
\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
String x = "[abcd]
System.out.println("da".matches(x));
String regex = "[^abc]";
System.out.println("a".matches(regex));
String y = "\\s";
System.out.println("\r".matches(y));
String regex1 = "[abc]{3,5}";
System.out.println("ccccac".matches(regex1));
这里有几道练习题大家可以想一想:
1,qq号码
2,1-6位字母或数字:
3,手机号
4,用户名. 字母数字下划线10位以内, 必须是字母开头
5,密码. 任意字符, 6-16位
String qq = "[1-9]\\d{4,10}";
String shuzi = "[0-9a-zA-Z]{1,6}";
String shuzi1= "[\\w^_]{1,6}";
String shouji = "1[34578]\\d{9}";
String yonghu = "[a-zA-Z]\\w{0-9}";
String mama = ".{6-16}";
.代表任意字符需要转义
String str = "开开开玩玩笑那把";
String regex2 = "(.)\\1+";
System.out.println(str.replaceAll(regex2,"$1"));
6,分组,例如快快乐乐,乐呵乐呵
7,Email
8,手机号码,后边五位必须是相同的
9,替换,将 开开开玩玩玩笑呢吧 替换成 开玩笑呢吧
10,将一条短信里面的电话号码都提出来
String regex001 = "(.)\\1(.)\\2";
System.out.println("快乐乐".matches(regex001));
String regex002 = "[\\w-\\.]+@([\\w-]+\\.){1,2}[a-z]{2,3}";
System.out.println("634157146@qq.com".matches(regex002));//本人qq邮箱哈
String shouji001 = "1[34578]\\d{4}(\\d)\\1{4}";
}
}
枚举总结一。枚举的作用介绍枚举,可以对只有几种取值可能的东西,进行限定,加入你取值不是限定中的其中之一,那么编译器就会报错,这样大大提高了程序的安全性,健壮性!二。枚举的实现原理枚举的原理,就好像是单例模式,把构造方法私有化,不要让别人创建对象,而由自己对外提供几个自己这个类的静态常量对象,这样,在赋值的时候,只能选我提供的这几个静态常量对象,而不能自己new对象!所以每个枚举元素都是一个对象!
2.自定义的枚举可以有抽象方法,该抽象方法必须由枚举的元素对象去实现,只要在枚举元素后面加个括号,括号后面在加个大括号,里面写个抽象方法的实现,就代表该元素对象是枚举类的子类!!
3.定义枚举用enum关键字,类似class关键字,枚举是一个特殊的类,枚举的取值范围,元素列表,必须定义在第一行,最前面,多个元素用逗号分隔,最后个元素用分号结束!!枚举的构造方法必须私有化!枚举可以有带参数的构造方法,调用该构造方法,只要在元素后面加个()括号传个相应的参数就可!
4.new Data(30){}。代表创建一个Data的子类,并调用父类有参数的构造方法!枚举当之有一个元素成员时,那就是一个单例!
------- android培训、java培训、期待与您交流! ----------
发表评论
-
黑马程序员_java1.5新特性与java学习中常用的英语单词
2014-07-17 11:21 1144------- android培训、java培 ... -
黑马程序员_反射枚举与正则表达式总结
2014-07-16 11:34 0------- <a href="http:/ ... -
黑马程序员_类库与集合总结
2014-07-16 11:20 1109------- android培训、java培 ... -
黑马程序员_IO流与多线程总结
2014-07-16 00:03 2011------- android培训、java培 ... -
黑马程序员_IO与多线程总结
2014-07-15 15:07 0------- <a href="http:/ ... -
黑马程序员_面向对象总结
2014-07-15 11:32 838------- android培训、java培 ... -
黑马程序员_张老师银行面试题Bank
2014-07-15 02:43 1247------- android培训、java培训、期待与您交流 ... -
黑马程序员_面向对象之前的Java基础总结
2014-07-15 00:49 615------- <a href="http ... -
黑马程序员_张老师交通灯面试题TafficLamp
2014-07-14 18:42 680------- android培训、java培训、期待与您 ... -
黑马程序员_分类代理理解与AOP面向方面编程总结
2014-07-11 13:30 799------- android培训、java培训、期待与您 ... -
黑马程序员_JavaBean类总结
2014-07-09 21:59 1201------- android培训、java培训、期待与您 ... -
黑马程序员_JavaBean类总结
2014-07-09 21:46 0------- <a href="http ...
相关推荐
到目前为止,许多的编程语言和工具都包含对正则表达式的支持,当然.NET也不例外,.NET基础类库中包含有一个名称空间和一系列可以充分发挥规则表达式威力的类。 正则表达式的知识可能是不少编程人员最烦恼的事儿了...
C#字符串和正则表达式参考手册 目 录 第1章 系统处理文本的方式 1 1.1 .NET Framework 1 1.1.1 公共语言运行时 2 1.1.2 .NET Framework类库 3 1.2 文本是一种数据类型 4 1.2.1 C#的数据类型 5 1.2.2 字符和字符集 6 ...
08_08_C_05_联合体_枚举_io08_08_C_05_联合体_枚举_io08_08_C_05_联合体_枚举_io08_08_C_05_联合体_枚举_io08_08_C_05_联合体_枚举_io08_08_C_05_联合体_枚举_io08_08_C_05_联合体_枚举_io08_08_C_05_联合体_枚举_io...
Java正则例子枚举_非JavaScript
正则表达式拥有一套自己的语法规则,常见语法包括字符匹配,重复匹配,字符定位,转义匹配和其他高级语法(字符分组,字符替换和字符决策),使用正则表达式时,首先构造正则表达式,这就用到了Regex类。其构造方式有...
day24_枚举_注解_反射.pdf
它包含了枚举法、蒙特卡洛法、线性整数规划、整数规划枚举法、整数规划隐枚举法、非线性整数规划、非线性整数规划图形工具、最小生成树kruskal算法、最短路dijkstra算法、最小生成树kruskal算法mex程序、最短路...
有这么一段字符串: [数字]字符串 结果 取 a=数字 b=字符串 截取方法1: ...int a = Convert.ToInt32(txt1.Text.Trim().Replace('[', ']').Split(']')[1]);... string b = txt1.Text.Trim().Replace('[', ']').Split...
Matlab实现最基本的枚举和算法检查报告,作为一个开发算法的最开始的基本设置和功能命令,可作为开发算法的一个模板来对待或者使用
今天遇见一个消除js正则表达式不区分大小写的问题,网上一搜,发现...在.NET中,RegexOption枚举可以使用影响匹配行为的选项修改正则表达式模式。比如其中的IngoreCase就是匹配过程中忽略大小写的限定。附上代码如下:
USB接口枚举流程详细介绍,对什么是USB总线枚举,交互流程介绍详细
我们在之前学习过通过集合枚举的功能,把所有需要出现的字符列出来,保存在集合里面,这样正则表达式就可以根据集合里的字符是否存在来判断是否匹配成功,如果在集合里,就匹配成功,否则不成功。现在有一个问题,...
usb端口枚举,枚举所有usb端口,包括usb hub的usb端口
1:枚举方括号表达式,范围方括号表达式,枚举取反方括号表达式,范围取反方括号表达式 2:. \w \W \d \D \s \S \b \B \n \r \f \v \888 \uffff \xff 3:n? n+ n* n{a} n{a,} n{a,b}及这些量词的非贪心模式 4:^ $ ...
图解USB协议,分为三个部分:枚举过程,数据包分析以及USB标准描述符
java 通过反射获取枚举类,及枚举类的值,枚举类枚举实例名。本项目为普通java项目
状态枚举法实现背靠背输电系统可靠性评估的matlab程序。
C___Keys_枚举,应该可以帮助到一些人
数据结构与算法_1.4 枚举(穷举)算法 (2)
算法系列 数据结构与算法_1.4 枚举(穷举)算法 (1)