|
1
2
3
4
5
6
7
8
9
|
public static void add(int x,int ...args)
{
int sum=x;
for(int e:args)
{
sum+=e;
}
System.out.println("add:"+sum);
}
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
//JDK5.0之前:
Integer obj1 = Integer.valueOf(1);
//JDK5.0之后:
Integer obj2 = 2; //自动装箱:将基本数据类型转换成Integer对象
Integer it=4;
int i=it+5;
Integer it2=i+4;
System.out.println(obj2 + 3); //自动拆箱:将Integer对象转换成基本数据类型后相加
//-128~127的数字包装成Integer对象后,会缓存到一个对象池中,当要用到的时候会先到池中找
//提高效率:因为这些小整数会经常用到
Integer obj3 = 127;
Integer obj4 = 127;
System.out.println(obj3 == obj4);
Integer obj5 = 128;
Integer obj6 = 128;
System.out.println(obj5 == obj6);
Integer obj7 = Integer.valueOf(1);
System.out.println(obj1 == obj7);
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
//创建一个枚举类的
/*
(1)通过private将构造器隐藏起来
(2)把这个类的所有可能实例都使用private static final修饰的类变量来保存。
(3)如果有必要,可以提供一些静态方法。
*/
public class Demo
{
public static void main (String []args)
{
System.out.println("spring:"+Season.SPRING.getName());
}
}
class Season
{
private String name;
private Season (String name)
{
this.name=name;
}
public static final Season SPRING=new Season ("春天") ;
public static final Season SUMMER=new Season("夏天");
public static final Season AUTUMN=new Season ("秋天");
public static final Season WINTER=new Season ("冬天");
public String getName()
{
return this.name;
}
}
|
使用private和final修饰符来修饰该类的Field。
提供带参数的构造函数,用于根据传入参数来初始化类里的Field。
仅为该类的Field提供getter方法,不要为该类的Field提供setter方法。
如果有必要,重写Object类的hashCode和equals方法。
使用enum关键字定义枚举类。枚举类一样可以有自己的Field、方法,可以实现一个或多个接口,也可以有自己的构造器。
使用eunm定义的枚举类默认继承了java.lang.Enum类,而不是继承Object类。
使用enum定义、非抽象的枚举类默认会使用final修饰,因此枚举类不能派送子类。(并不是所有的枚举类都使用final修饰,如抽象枚举类)
枚举类所有实例必须在枚举类的第一行显示列出,否则这个枚举类永远不能产生实例。
所有枚举类都提供一个values方法,该方法可以方便地遍历所有枚举值。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
//访问枚举类的实例,或方法,以“枚举类名.实例”,“枚举类名.方法名”访问
//使用enum定义一个简单的枚举类
//使用enum的values()方法,遍历所有的枚举
public class Demo1
{
public static void main(String []args) throws Exception
{
method(SeasonEnum.SUMMER);
method2();
}
public static void method2()
{
for ( SeasonEnum se: SeasonEnum.values() )
{
System.out.println("SeasonEnum:"+se);
}
}
public static void method(SeasonEnum s)
{
switch (s)
{
default: System.out.println("null"); break;
case SPRING: System.out.println("spring"); break;
case SUMMER: System.out.println("summer"); break;
case AUTUMN: System.out.println("autumn"); break;
case WINTER: System.out.println("winter"); break;
}
}
}
enum SeasonEnum
{
SPRING ,SUMMER, AUTUMN ,WINTER ;
}
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
/*
枚举类可以定义自己的Field和方法。
枚举类通常应该设计不可变类。其Field值不应该允许改变,这样会更安全。
所以枚举类的Field都应该使用private final修饰。
枚举实例名称一般都是大写字母
Enum.valueOf()方法演示
*/
enum Gender
{
MALE("男"),FEMALE("女");
private Gender(String sex)
{
this.sex=sex;
}
private final String sex;
public String getSex()
{
return sex;
}
}
public class Demo2
{
public static void main (String []args)
{
Gender g=Gender.MALE;
System.out.println("Gender.MALE:"+g.getSex());
//使用Enum.valueOf()方法访问枚举类下的某个实例
Gender g2=Enum.valueOf(Gender.class,"FEMALE");
System.out.println("Enum.valueOf(Gender.class,\"FEMALE\"):"+g2.getSex());
}
}
|
|
1
2
3
4
5
6
7
8
|
//枚举类实现一个或多个接口(且不同枚举实例有各自的接口实现方法)
public class Demo3
{
public static void main (String []args)
{
Gender.MALE.info();
}
}
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
//以下代码需要放在GenderInter.java文件中
public interface GenderInter
{
public void info();
}
enum Gender implements GenderInter
{
MALE("男")
{
public void info()
{
System.out.println("我是男的");
}
},FEMALE("女")
{
public void info()
{
System.out.println("我是女的");
}
};
private Gender(String sex)
{
this.sex=sex;
}
private final String sex;
public String getSex()
{
return sex;
}
}
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
//注意:含有抽象方法的枚举类,它的每一个枚举实例必须覆盖重写该抽象方法
public class EnumAbstractDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("plus:5+2="+Operation.PLUS.eval(5, 2));
System.out.println("minus:5-2="+Operation.MINUS.eval(5, 2));
System.out.println("times:5*2="+Operation.TIMES.eval(5, 2));
System.out.println("divide:5/2="+Operation.DIVIDE.eval(5, 2));
}
}
enum Operation
{
//定义四种加减乘除的枚举值
PLUS {
@Override
public double eval(double x, double y) {
// TODO Auto-generated method stub
return x+y;
}
},MINUS {
@Override
public double eval(double x, double y) {
// TODO Auto-generated method stub
return x-y;
}
},TIMES {
@Override
public double eval(double x, double y) {
// TODO Auto-generated method stub
return x*y;
}
},DIVIDE() {
@Override
public double eval(double x, double y) {
// TODO Auto-generated method stub
return x/y;
}
};
public abstract double eval(double x,double y);
}
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
|
package hq.com.ClassDemo;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class ClassDemo {
/**
* class类的演示
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Demo1();
System.out.println("---------------------");
Demo2();
System.out.println("---------------------");
Demo3();
System.out.println("---------------------");
Demo4();
System.out.println("---------------------");
Demo5();
System.out.println("---------------------");
Demo6();
System.out.println("---------------------");
Demo7();
System.out.println("---------------------");
Demo8();
}
//1.任何所有东西都是Class类的实例对象
//创建Class实例的三种方法,Class.forName(),类名.class,对象名.getClass().
public static void Demo1() throws ClassNotFoundException
{
Class> c1=null;
Class> c2=null;
Class> c3=null;
//1,Class.forName()方法,推荐
c1=Class.forName("hq.com.ClassDemo.Person");
System.out.println("Demo1(写法1:forName()):类名="+c1.getName());
//2,类名.class。在java中,每个class都有一个相应的Class对象,当编写好一个类,
// 编译完成后,在生成的.class文件中,就产生一个class对象
c2=Person.class;
System.out.println("Demo1(写法2:类名.class):类名="+c2.getName());
//3,object类的getClass()方法
Person p=new Person();
c3=p.getClass();
System.out.println("Demo2(写法3:getClass()):类名="+c3.getName());
}
// 2,Object的getClass()方法,Class的getName(),getPackage().
// 演示反射机制获取类的包名和类名
public static void Demo2() {
Person p = new Person("hq", 22);
System.out.println("person的类名:" + p.getClass().getName());
System.out.println("person的包名:" + p.getClass().getPackage().getName());
}
//3,class的newInstance()方法
// 通过反射,用class来创建类对象(这是反射的意义所在)
public static void Demo3() throws Exception
{
Class c=Class.forName("hq.com.ClassDemo.Person");
Person p= (Person) c.newInstance();//要强转,默认是Object类
p.setName("hq");
System.out.println("Demo3(class的newInstance()方法):name="+p.getName());
}
//4,class的getConstructors();以数组形式返回该类的所有公共构造方法
// java.lang.reflect.Constructor;构造方法类
public static void Demo4() throws Exception
{
//用构造方法类创建该类的实例对象。
//注意必须按顺序获取Constructor,即ct[0]在ct[1]之前,不能反过来
Class c = null;
Person p1 = null;
Person p2 = null;
c = Class.forName("hq.com.ClassDemo.Person");
Constructor> [] ct=c.getConstructors();
p1=(Person) ct[0].newInstance();
p1.setName("hh");
p2=(Person) ct[1].newInstance("hq",22);
System.out.println("Demo4(getConstructors()构造方法类创建实例对象):p1:name="+p1.getName());
System.out.println("Demo4(getConstructors()构造方法类创建实例对象):p2:name="+p2.getName());
}
//5,class: getDeclaredField(String name);获取该类的成员变量
// Field类:操作类对象的成员变量,set,get方法
public static void Demo5() throws Exception
{
//class的getDeclaredField(String name)方法获取类中的某个成员变量
//Field类的set(Object obj,Object value),修改该字段上某个对象对应的值
Class c=Class.forName("hq.com.ClassDemo.Person");
Person p=(Person)c.newInstance();
Field f=c.getDeclaredField("age");
f.setAccessible(true);
f.set(p, 11);
System.out.println("Demo5(Field的set(对象,值)):person:age="+p.getAge());
System.out.println("Field.get():"+f.get(p));
}
//6,获取该类的父类信息,成员方法,接口,成员变量(字段)
public static void Demo6() throws Exception
{
//注意:getDeclaredFields()和getFields()区别是,
//前者是所有声明的字段,后者是仅为public权限的字段
//注意:两者获取的字段均为该类内部中定义的,不包括继承父类的字段
Class> c=Class.forName("hq.com.ClassDemo.SuperMan");
Class> superClass=c.getSuperclass();
System.out.println("Demo6:superman的父类是:"+superClass.getName());
//获取类中所有字段
Field [] fs=c.getDeclaredFields();
int i=0;
for(Field f:fs)
{
i++;
System.out.println("superman的第"+i+"个成员:"+f.getName());
}
//获取类中所有方法
Method [] ms=c.getDeclaredMethods();
for(Method m:ms)
{
i++;
System.out.println("superman的第"+i+"个成员方法:"+m.getName());
}
//获取类实现的接口
Class>[] is=c.getInterfaces();
for(Class> j:is)
{
System.out.println("superman的第"+i+"个接口:"+j.getName());
}
}
//7,调用类的方法,Method类的invoke()方法
public static void Demo7() throws Exception
{
Class> c=Class.forName("hq.com.ClassDemo.SuperMan");
//调用类中的无参数方法
Method m1=c.getMethod("fly");
System.out.print("Demo7:superman中的无参数方法fly():");
m1.invoke(c.newInstance());
//调用类中的参数方法,先取出该方法,再放入参数(实例,方法参数)
Method m2=c.getMethod("walk",int.class);
System.out.print("Demo7:superman中的有参数方法walk():");
m2.invoke(c.newInstance(),4);
}
/**
* Demo8: 通过Java反射机制得到类加载器信息
*
* 在java中有三种类类加载器。[这段资料网上截取]
1)Bootstrap ClassLoader 此加载器采用c++编写,一般开发中很少见。
2)Extension ClassLoader 用来进行扩展类的加载,一般对应的是jre\lib\ext目录中的类
3)AppClassLoader 加载classpath指定的类,是最常用的加载器。同时也是java中默认的加载器。
*/
public static void Demo8() throws ClassNotFoundException
{
Class> class1 = null;
class1 = Class.forName("hq.com.ClassDemo.SuperMan");
String nameString = class1.getClassLoader().getClass().getName();
System.out.println("Demo8: 类加载器类名: " + nameString);
}
}
class SuperMan extends Person implements ActionInterface
{
private boolean BlueBriefs;
public boolean isBuleBriefs()
{
return this.BlueBriefs;
}
public void setBuleBriefs(boolean BlueBriefs)
{
this.BlueBriefs=BlueBriefs;
}
public void fly()
{
System.out.println("超人会飞哦~~");
}
@Override
public void walk(int m) {
// TODO Auto-generated method stub
System.out.println("超人也会走耶~~走了"+m+"米后走不动了");
}
}
interface ActionInterface
{
public void walk(int m);
}
class Person {
private int age;
private String name;
public Person() {
}
public Person(String name, int age) {
this.age = age;
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return this.age;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
|
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30112369/viewspace-1734806/ ,如需转载,请注明出处,否则将追究法律责任。