----------------------------------------------------- 静态导入 -----------------------------------------------------
静态导入在 import 后边多加一个 static
import java.lang.Math.* 表示导入 Math 类下的子类
import static java.lang.Math.* 静态导入的含义是导入 Math 类下的所有方法
所以如果 import java.lang.Math.*; 这样导入的话,那么
public static void main(String args[]){
System. out .println(min (3,9)); 比较两个值中的最小值
System.out.println(abs(3-9)); 返回两个数相减结果的绝对值
}
这两个方法就默认为不可识别的方法,必须静态导入 Math 类
------------------------------------------- 可变参数与 for 循环增强 --------------------------------------------
一个方法可以根据需求利用 可变参数这种功能 接收任意个参数,可变参数本身是一个数组,通过迭代或循环来使用多个参数
package com.VaryingParameter;
public class ParameterTest {
public static int add( int x, int ... args){
// 可变参数的格式为:数据类型 ...args
int sum=x;
for ( int i=0;i<args. length ;i++){ // 两种循环实现都可以
sum+=args[i]; // 这里的 args 相当于一个数组,接收了所有请求过来的参数
}
/*for(int arg:args){ //for 循环增强,也叫做 foreach 循环
sum+=arg;
}*/
return sum;
}
public static void main(String args[]){
System. out .println(add (1,2));
System. out .println(add (1,2,3));
System. out .println(add (1,2,3,4));
}
}
----------------------------------------------------- 枚举 -----------------------------------------------------
静态变量的方式在开发阶段无法防止一些非法值,让编译器就可以控制源程序中填写的非法值,例如,假设 1-7 表示星期几,有人不知道,可能会出现 int weekday = 0; 的情况。枚举就是要让一个类型变量的取值为若干个固定的值,否则,编译器就会报错。首先,大家要清楚枚举是一种特殊的类。
枚举中的成员就是枚举类的一个实例对象
枚举就相当于一个类,其中也可以定义抽象方法,枚举的每个成员分别由枚举类的子类来生成实例
带构造方法的枚举,构造方法必须定义成私有的
----------------------------------------------------- 反射 -----------------------------------------------------
反射就是把 Java 类中的各种成分映射成相应的 java 类
反射的作用 ----- 实现框架功能
1. 框架解决的核心问题:
我做房子卖给用户住,由用户自己安装门窗和空调,我做的房子就是框架,用户需要使用我的框架,把门窗插入进入我提供的框架中,框架与工具类有区别,你做的门调用锁,锁是工具,你做的门被房子调用,房子是框架,房子和锁都是别人提供的,工具类被用户的类调用,而框架则是调用用户提供的类
2. 框架要解决的核心问题:我在写框架时,你这个用户可能还在上小学,还不会写程序呢,我写的框架横须怎样能调用到你以后写的类呢,也就是房子建立好以后,在我的房子中如何能安装你想要的门窗呢?
在写程序的时候无法知道要被调用的类名,所以,在程序中无法直接 new 某个类的实例对象,而要用反射方式来做
以下是代码 用于了解反射机制
一共有三个类和一个配置文件
Point.class ClassTest.java ReflectTest.java Config.properties
ReflectTest 类中讲解反射关于实现框架功能使用到了 Config.properties 配置文件
Config.properties
className= java.util.ArrayList
---------------------------------------------------------
package Java.Lesson.Reflection;
class Point {
// 一个 JavaBean 类,两个学习反射的例子类中会用到
static {
System. out .println( "Loading Class Point" );
}
private String name ;
private String sex ;
private int age ;
Point(String n, String sex, int a) {
this . name = n;
this . sex = sex;
this . age = a;
}
Point() {
;
}
@Override
/* 一种注释语句,意思是 下边的这个方法必须是覆盖超类的方法,如果超类找不到这个方法,就会报错
例如 public String toString(){} */
public String toString() {
return "name=" + this . name + ",sex=" + this . sex + ",age=" + this . age ;
}
public int getAge() {
return age ;
}
public void setAge( int age) {
this . age = age;
}
public String getName() {
return name ;
}
public void setName(String name) {
this . name = name;
}
public String getSex() {
return sex ;
}
public void setSex(String sex) {
this . sex = sex;
}
private void test() {
}
static void test2() {
}
public void MethodName() {
System. out .println( " 运行方法成功 " );
}
@Override
public int hashCode() {
final int PRIME = 31;
int result = 1;
result = PRIME * result + age ;
result = PRIME * result + (( name == null ) ? 0 : name .hashCode());
result = PRIME * result + (( sex == null ) ? 0 : sex .hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if ( this == obj)
return true ;
if (obj == null )
return false ;
if (getClass() != obj.getClass())
return false ;
final Point other = (Point) obj;
if ( age != other. age )
return false ;
if ( name == null ) {
if (other. name != null )
return false ;
} else if (! name .equals(other. name ))
return false ;
if ( sex == null ) {
if (other. sex != null )
return false ;
} else if (! sex .equals(other. sex ))
return false ;
return true ;
}
}
---------------------------------------------------------
package Java.Lesson.Reflection;
import java.lang.annotation.Annotation;
import java .lang.reflect.*;
class ClassTest {
// 阐述反射机制 获取类的构造器,方法,成员变量,以及如何用反射调用方法的相关内容
static Object create(Class clazz) throws -->
- 该日志由 masonic 于11年前发表在综合分类下,最后更新于 2013年09月03日.
- 转载请注明: Java JDK-1.5高级特性 | 学步园 +复制链接