1.常用的方法:
(1)public static void arraycopy(Object src, int srcPos, Object dest, int descPos,int length)
src是源数组,对象数组,等类型的数组,srcPos源数组的开始复制的位置,
dest是目标数组,descPos目标数组的开始复制的位置,
length是复制元素的长度。
(2)静态方法sort()排序
(3)public static int binarySearch(int[] a,int key);
a是要搜索的数组,key是要搜索的元素。
(4)对象数组的排序
数组里面的所有对象都必须实现lang包下的Comparable接口.public int compareTo(Object o)--当一个对象和指定对象比较---小于返回负数---相等返回0----大于返回正数。
例如:
(学号int num的比较)
public class Student implements Comparable{
int num;
String name;
Student(int num,String name){
this.num = num;
this.name = name;
}
@Override
public int compareTo(Object o) {
Student ss = (Student)o;
return num > ss.num ? 1 : (num==ss.num ? 0:-1);
}
}
(当学号相等的时候是String name--比较名字)
public class Student implements Comparable{
int num;
String name;
Student(int num,String name){
this.num = num;
this.name = name;
}
@Override
public int compareTo(Object o) {
Student ss = (Student)o;
int result = num > ss.num ? 1 : (num==ss.num ? 0:-1);
if(result==0){
result = name.compareTo(name);
}
return result;
}
}
2.数组对象的拷贝,如果把array1里面的对象拷贝到arrary2中,我们修改arrary2中的元素内容时候,同样arrary1里面的内容同样会改变。因为我们拷贝的不是数组里面的元素。而是指向array1数组中对象的引用,所以我们改变arrary2各元素的值时候,arrary1中元素的内容也会改变。
3.封装类在java.lang包下定义的.
Boolean类型没有paser的方法;
Integer-----构造方法Integer(int value);
方法int intValue();
静态方法Integer valueOf(String s);把String类型转换成封装类的类型
静态方法int paserInt(String s);把String对象转换为整型
4.Class类----在JAVA中每个编译后的类都有一个Class类,表现各类的类型信息。在java.lang包当中。没有公有的构造函数。
获取Class实例的三种方式:
a:利用对象调用getClass()方法获取该对象的Class实例;
b:使用Class类的静态方法forName(),用类的名字获取一个Class实例;
c:运用 .class的方式来获取Class实例,对于基本数据类型的封装类,还可以采用.TYPE获取相对应的基本数据类型的Class实例。
例子:
public class ClassTest {
public static void main(String[] args) throws ClassNotFoundException {
Point pt = new Point();
Class clazz = pt.getClass();
System.out.println(clazz.getName());
try{
Class clazz2 = Class.forName("Point");
System.out.println(clazz2.getName());
}catch(Exception e){
e.printStackTrace();
}
Class clazz3 = Point.class;
System.out.println(clazz3.getName());
Class clazz4 = int.class;
System.out.println(clazz4.getName());
Class clazz5 = Integer.TYPE;
System.out.println(clazz5.getName());
Class clazz6 = Integer.class;
System.out.println(clazz6.getName());
}
}
class Point {
int x,y;
}
--------结果--------
Point
Point
Point
int
int
java.lang.Integer
5.在运行期间,如果当我们要产生某个类的对象。Java虚拟机会检查该类型的class对象是否被加载。如果没有被加载,JVM会根据类的名称找到.class文件并加载它。一旦某个类型的class对象已被加载到内存,就可以利用它来产生该类的所有对象。
6.newInstance()调用类中[color=red]缺省[/color]的构造方法。当我们不知道类的名字的时候我们可以利用该方法创建类的实例。当我们在该类中创建构造方法,那么JAVA就不给我们创建默认不带参数的构造方法。那么这时候再用newInstance()创建对象,那么代码就会出现异常。只能利用反射机制调用类中带参数的构造方法,通过Object newInstance(Obeject[] initargs)
,但我们必须获取构造方法中的参数信息,
Class c=Class.forName(args[0]);
Class[] params = cons[0].getParameterType;
Object[] paramvalues = new Object[params.length];
for(int i = 0,i<params.length,++){
//需要判断参数类型是否基本数据类型,并且给该对象数组赋值
if(params[i].isPrimitive()){
paramValues[i] new Integer(i+3);
}
}
Object o = cons[0].newInstance(paramsValues);
Method ms = c.getDeclaredMethods();
ms[0].invok(0,null);//如果一个类中有多个方法,因为各方法的参数不同,所以如果实际中要作循环并且判断。
反射应用可以完成DOM组件方案。
7.反射---Java.lang.reflect(开发工具,测试工具,类浏览器,图形界面构建工具)
Constructor表示类中的构造方法
Field表示字段(属性)信息
Method表示方法信息
Modify表示修饰符
8.Constructor[] getConstructors();返回一个类中所有的公有的构造方法
Constructor[] getDeclaredConstructor();返回一个类中声明的所有的构造方法
Method[] getMethods 返回该类中从类型继承的所有的public方法以及子类的public方法。
Method[] getDeclaredMethods 返回该类或接口中声明的所有方法。
在Constructor中有Object newInstance(Object[] initargs);对象数组作为参数,调用带参数的构造方法。事先我们必须要了解该构造函数的参数信息,参数类型。所以要使用 Class[] getParameterType();取得构造函数中的参数类型。判断是否基本数据类型isPrimitive(),用invoke()
9.java.lang包是自动导入,但是不导入java.lang.reflect.*的子包,需要手动导入。
10.通过网络加载一个类,我们只有在加载的时候才知道类名。
11.每个JAVA程序都有单独一个Runtime类的实例。在java.lang包中定义的。它提供了应用程序和应用程序运行环境的接口。获得它的实例,要用getRuntime()静态方法。可以使用exec()方法执行外部程序,或者cmd命令。它返回的是Process类,它是一个抽象类,我们不可以直接去实例化它,通过Runtime类中的方法,可以获得Process类的实例。Process的对象可以获得输入流。
Process pt = rt.exe("java ArraryTest");
InputStream is = pt.getInputStream();
int data;
while((data=is.read())!=-1){
System.out.print((char)data);//读取一个打印一个,不用println进行换行。
}
12.Runtime类是一个单利类型,是单例模式的应用。
(1)一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单利类。
(2)单例类的一个最重要的特点就是类的构造方法是私有的,从而避免了外部利用构造方法直接创建多个实例。
class Singleton{
private static final Singleton st = new Singleton();
private Singleton(){
}
public static Singleton getInstance(){//静态方法,getInstance(),返回一个Singleton,把这个类的实例返回。
return st;
}
}
(1)public static void arraycopy(Object src, int srcPos, Object dest, int descPos,int length)
src是源数组,对象数组,等类型的数组,srcPos源数组的开始复制的位置,
dest是目标数组,descPos目标数组的开始复制的位置,
length是复制元素的长度。
(2)静态方法sort()排序
(3)public static int binarySearch(int[] a,int key);
a是要搜索的数组,key是要搜索的元素。
(4)对象数组的排序
数组里面的所有对象都必须实现lang包下的Comparable接口.public int compareTo(Object o)--当一个对象和指定对象比较---小于返回负数---相等返回0----大于返回正数。
例如:
(学号int num的比较)
public class Student implements Comparable{
int num;
String name;
Student(int num,String name){
this.num = num;
this.name = name;
}
@Override
public int compareTo(Object o) {
Student ss = (Student)o;
return num > ss.num ? 1 : (num==ss.num ? 0:-1);
}
}
(当学号相等的时候是String name--比较名字)
public class Student implements Comparable{
int num;
String name;
Student(int num,String name){
this.num = num;
this.name = name;
}
@Override
public int compareTo(Object o) {
Student ss = (Student)o;
int result = num > ss.num ? 1 : (num==ss.num ? 0:-1);
if(result==0){
result = name.compareTo(name);
}
return result;
}
}
2.数组对象的拷贝,如果把array1里面的对象拷贝到arrary2中,我们修改arrary2中的元素内容时候,同样arrary1里面的内容同样会改变。因为我们拷贝的不是数组里面的元素。而是指向array1数组中对象的引用,所以我们改变arrary2各元素的值时候,arrary1中元素的内容也会改变。
3.封装类在java.lang包下定义的.
Boolean类型没有paser的方法;
Integer-----构造方法Integer(int value);
方法int intValue();
静态方法Integer valueOf(String s);把String类型转换成封装类的类型
静态方法int paserInt(String s);把String对象转换为整型
4.Class类----在JAVA中每个编译后的类都有一个Class类,表现各类的类型信息。在java.lang包当中。没有公有的构造函数。
获取Class实例的三种方式:
a:利用对象调用getClass()方法获取该对象的Class实例;
b:使用Class类的静态方法forName(),用类的名字获取一个Class实例;
c:运用 .class的方式来获取Class实例,对于基本数据类型的封装类,还可以采用.TYPE获取相对应的基本数据类型的Class实例。
例子:
public class ClassTest {
public static void main(String[] args) throws ClassNotFoundException {
Point pt = new Point();
Class clazz = pt.getClass();
System.out.println(clazz.getName());
try{
Class clazz2 = Class.forName("Point");
System.out.println(clazz2.getName());
}catch(Exception e){
e.printStackTrace();
}
Class clazz3 = Point.class;
System.out.println(clazz3.getName());
Class clazz4 = int.class;
System.out.println(clazz4.getName());
Class clazz5 = Integer.TYPE;
System.out.println(clazz5.getName());
Class clazz6 = Integer.class;
System.out.println(clazz6.getName());
}
}
class Point {
int x,y;
}
--------结果--------
Point
Point
Point
int
int
java.lang.Integer
5.在运行期间,如果当我们要产生某个类的对象。Java虚拟机会检查该类型的class对象是否被加载。如果没有被加载,JVM会根据类的名称找到.class文件并加载它。一旦某个类型的class对象已被加载到内存,就可以利用它来产生该类的所有对象。
6.newInstance()调用类中[color=red]缺省[/color]的构造方法。当我们不知道类的名字的时候我们可以利用该方法创建类的实例。当我们在该类中创建构造方法,那么JAVA就不给我们创建默认不带参数的构造方法。那么这时候再用newInstance()创建对象,那么代码就会出现异常。只能利用反射机制调用类中带参数的构造方法,通过Object newInstance(Obeject[] initargs)
,但我们必须获取构造方法中的参数信息,
Class c=Class.forName(args[0]);
Class[] params = cons[0].getParameterType;
Object[] paramvalues = new Object[params.length];
for(int i = 0,i<params.length,++){
//需要判断参数类型是否基本数据类型,并且给该对象数组赋值
if(params[i].isPrimitive()){
paramValues[i] new Integer(i+3);
}
}
Object o = cons[0].newInstance(paramsValues);
Method ms = c.getDeclaredMethods();
ms[0].invok(0,null);//如果一个类中有多个方法,因为各方法的参数不同,所以如果实际中要作循环并且判断。
反射应用可以完成DOM组件方案。
7.反射---Java.lang.reflect(开发工具,测试工具,类浏览器,图形界面构建工具)
Constructor表示类中的构造方法
Field表示字段(属性)信息
Method表示方法信息
Modify表示修饰符
8.Constructor[] getConstructors();返回一个类中所有的公有的构造方法
Constructor[] getDeclaredConstructor();返回一个类中声明的所有的构造方法
Method[] getMethods 返回该类中从类型继承的所有的public方法以及子类的public方法。
Method[] getDeclaredMethods 返回该类或接口中声明的所有方法。
在Constructor中有Object newInstance(Object[] initargs);对象数组作为参数,调用带参数的构造方法。事先我们必须要了解该构造函数的参数信息,参数类型。所以要使用 Class[] getParameterType();取得构造函数中的参数类型。判断是否基本数据类型isPrimitive(),用invoke()
9.java.lang包是自动导入,但是不导入java.lang.reflect.*的子包,需要手动导入。
10.通过网络加载一个类,我们只有在加载的时候才知道类名。
11.每个JAVA程序都有单独一个Runtime类的实例。在java.lang包中定义的。它提供了应用程序和应用程序运行环境的接口。获得它的实例,要用getRuntime()静态方法。可以使用exec()方法执行外部程序,或者cmd命令。它返回的是Process类,它是一个抽象类,我们不可以直接去实例化它,通过Runtime类中的方法,可以获得Process类的实例。Process的对象可以获得输入流。
Process pt = rt.exe("java ArraryTest");
InputStream is = pt.getInputStream();
int data;
while((data=is.read())!=-1){
System.out.print((char)data);//读取一个打印一个,不用println进行换行。
}
12.Runtime类是一个单利类型,是单例模式的应用。
(1)一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单利类。
(2)单例类的一个最重要的特点就是类的构造方法是私有的,从而避免了外部利用构造方法直接创建多个实例。
class Singleton{
private static final Singleton st = new Singleton();
private Singleton(){
}
public static Singleton getInstance(){//静态方法,getInstance(),返回一个Singleton,把这个类的实例返回。
return st;
}
}