Java第六课 数组的复制与排序,Runtime类与Process类,Class类与反射API,Runtime类与单例设计模式。

Java的常用包

java.applet:包含一些用于创建Java小应用程序的类。
java.awt:包含一些用于编写与平台无关的图形界面(GUI)应用程序的类。
java.io:包含一些用作输入输出(I/O)处理的类。
java.lang:包含一些Java语言的基本类与核心类,如String、Math、Integer、System和Runtime,提供常用的功能,这个包中的所有类是被隐式导入的。
java.net:包含用于建立网络连接的类,与java.io同时使用完成与网络有关的读写。
java.util:包含一些实用工具类和数据结构类。


“==”和“equals”的用法

在Java中,boolean、byte、short、int、long、char、float、double这八种是基本数据类型,其余的都是引用类型。
“==”是比较两个变量的值是否相等,“equals”是比较两个对象变量所代表的对象的内容是否相等。


String和StringBuffer

String str=“abc”;
    int i=3;
    float f=4.5f;
    char ch='a';
    boolean b=true;
    System.out.println(str + i + f + ch + b);
针对String的“+”和“+=”,是Java中唯一被重载的操作符;在Java中,不允许程序员重载操作符。

String类对象一个常量对象。
    String str=“abc”;
    str=“def”;
在处理大量字符串的程序中,我们通常用StringBuffer来替代String。


函数的调用

在Java中,传参时,都是以传值的方式进行。
对于基本数据类型,传递的是数据的拷贝;对于引用类型,传递的引用的拷贝。

对象的克隆(clone)

为了获取对象的一份拷贝,我们可以利用Object类的clone()方法。
在派生类中覆盖基类的clone()方法,并声明为public。
在派生类的clone()方法中,调用super.clone()。
在派生类中实现Cloneable接口。

为什么我们在派生类中覆盖Object的clone()方法时,一定要调用super.clone()呢?在运行时刻,Object中的clone()识别出你要复制的是哪一个对象,然后为此对象分配空间,并进行对象的复制,将原始对象的内容一一复制到新对象的存储空间中。


数组的相关操作

在Java中,所有的数组都有一个缺省的属性length,用于获取数组中元素的个数。
数组的复制:System.arraycopy()。
数组的排序:Arrays.sort()。
在已排序的数组中查找某个元素:Arrays.binarySearch()。


Class类

在Java中,每个class都有一个相应的Class对象。也就是说,当我们编写一个类,编译完成后,在生成的.class文件中,就会产生一个Class对象,用于表示这个类的类型信息。
获取Class实例的三种方式:
(1)利用对象调用getClass()方法获取该对象的Class实例;
(2)使用Class类的静态方法forName(),用类的名字获取一个Class实例;
(3)运用.class的方式来获取Class实例,对于基本数据类型的封装类,还可以采用.TYPE来获取相对应的基本数据类型的Class实例。

在运行期间,如果我们要产生某个类的对象,Java虚拟机(JVM)会检查该类型的Class对象是否已被加载。如果没有被加载,JVM会根据类的名称找到.class文件并加载它。一旦某个类型的Class对象已被加载到内存,就可以用它来产生该类型的所有对象。
newInstance() 调用类中缺省的构造方法。

Runtime类和Process类

每一个Java程序都有一个Runtime类的单一实例。
通过Runtime.getRuntime()获取Runtime类的实例。
Runtime类是使用单例模式的一个例子。


设计模式

在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方案,这就是软件模式。
每一个模式描述了一个在我们程序设计中经常发生的问题,以及该问题的解决方案。
当我们碰到模式所描述的问题,就可以直接用相应的解决方法去解决这个问题,这就是设计模式。

单例(Singleton)模式
   (1)一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类。
   (2)单例类的一个最重要的特点是类的构造方法是私有的,从而避免了外部利用构造方法直接创建多个实例。


import java.util.Arrays;
class ArrayTest
{
	public static void main(String[] args)
	{
		/*int[] num1=new int[]{1,2,3};
		int[] num2=new int[10];
		System.arraycopy(num1,1,num2,8,2);
		for(int i=0;i<num2.length;i++)
		{
			System.out.println(num2[i]);
		}*/
		/*Point[] pts1=new Point[]{new Point(1,1),new Point(2,2),new Point(3,3)};
		Point[] pts2=new Point[3];
		System.arraycopy(pts1,0,pts2,0,pts1.length);
		for(int i=0;i<pts2.length;i++)
		{
			System.out.println("x="+pts2[i].x+","+"y="+pts2[i].y);
		}
		pts2[1].x=5;
		pts2[1].y=5;
		System.out.println("x="+pts1[1].x+","+"y="+pts1[1].y);*/
		/*int[] num=new int[]{3,1,2};
		Arrays.sort(num);
		for(int i=0;i<num.length;i++)
		{
			System.out.println(num[i]);
		}
		int index=Arrays.binarySearch(num,3);
		System.out.println("index="+index);
		System.out.println("element="+num[index]);*/
		Student[] ss=new Student[]{new Student(1,"zhangsan"),
					   new Student(2,"lisi"),
					   new Student(3,"wangwu"),
					   new Student(3,"mybole")};
		Arrays.sort(ss);
		for(int i=0;i<ss.length;i++)
		{
			System.out.println(ss[i]);
		}
		int index=Arrays.binarySearch(ss,new Student(2,"lisi"));
		System.out.println("index="+index);
		System.out.println(ss[index]);
	}
}
class Student implements Comparable
{
	int num;
	String name;
	Student(int num,String name)
	{
		this.num=num;
		this.name=name;
	}
	public String toString()
	{
		return "number="+num+","+"name="+name;
	}
	public int compareTo(Object o)
	{
		Student s=(Student)o;
		//return num>s.num ? 1 : (num==s.num ? 0 : -1);
		int result=num>s.num ? 1 : (num==s.num ? 0 : -1);
		if(0==result)
		{
			result=name.compareTo(s.name);
		}
		return result;
	}
}
class Point
{
	int x,y;
	Point(int x,int y)
	{
		this.x=x;
		this.y=y;
	}
}

import java.lang.reflect.*;
class ClassTest
{
	public static void main(String[] args)
	{
		/*Point pt=new Point();
		Class c1=pt.getClass();
		System.out.println(c1.getName());
		
		try
		{
			Class c2=Class.forName("Point");
			System.out.println(c2.getName());
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		
		Class c3=Point.class;
		System.out.println(c3.getName());
		
		Class c4=int.class;
		System.out.println(c4.getName());
		
		Class c5=Integer.TYPE;
		System.out.println(c5.getName());
		
		Class c6=Integer.class;
		System.out.println(c6.getName());*/
		
		/*System.out.println("before new Point()");
		new Point();
		System.out.println("after new Point()");
		
		try
		{
			Class.forName("Line");
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}*/
		/*if(args.length!=1)
		{
			return;
		}
		try
		{
			Class c=Class.forName(args[0]);
			Point pt=(Point)c.newInstance();
			pt.output();
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}*/
		
		if(args.length!=1)
		{
			return;
		}
		try
		{
			Class c=Class.forName(args[0]);
			Constructor[] cons=c.getDeclaredConstructors();
			/*for(int i=0;i<cons.length;i++)
			{
				System.out.println(cons[i]);
			}
			Method[] ms=c.getDeclaredMethods();
			for(int i=0;i<ms.length;i++)
			{
				System.out.println(ms[i]);
			}*/
			Class[] params=cons[0].getParameterTypes();
			Object[] paramValues=new Object[params.length];
			for(int i=0;i<params.length;i++)
			{
				if(params[i].isPrimitive())
				{
					paramValues[i]=new Integer(i+3);
				}
			}
			Object o=cons[0].newInstance(paramValues);
			Method[] ms=c.getDeclaredMethods();
			ms[0].invoke(o,null);
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}
}
class Point
{
	static
	{
		System.out.println("Loading Point");
	}
	int x,y;
	void output()
	{
		System.out.println("x="+x+","+"y="+y);
	}
	Point(int x,int y)
	{
		this.x=x;
		this.y=y;
	}
}
class Line
{
	static
	{
		System.out.println("Loading Line");
	}
}

import java.io.*;
class RuntimeTest
{
	public static void main(String[] args)
	{
		Runtime rt=Runtime.getRuntime();
		System.out.println(rt.freeMemory());
		System.out.println(rt.totalMemory());
		try
		{
			//rt.exec("notepad");
			Process p=rt.exec("javac ArrayTest.java");
			InputStream is=p.getInputStream();
			int data;
			while((data=is.read())!=-1)
			{
				System.out.print((char)data);
			}
			
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		
	}
}

class StringTest
{
	public static void change(int x,int y)
	{
		x=x+y;
		y=x-y;
		x=x-y;
	}
	public static void change(int[] num)
	{
		num[0]=num[0]+num[1];
		num[1]=num[0]-num[1];
		num[0]=num[0]-num[1];
	}
	public static void change(Point pt)
	{
		pt.x=pt.x+pt.y;
		pt.y=pt.x-pt.y;
		pt.x=pt.x-pt.y;
	}
	
	public static void main(String[] args)
	{
		/*int x=3;
		int y=4;
		change(x,y);
		System.out.println("x="+x+","+"y="+y);*/
		/*int[] num=new int[]{3,4};
		change(num);
		System.out.println("x="+num[0]+","+"y="+num[1]);*/
		/*Point pt=new Point();
		pt.x=3;
		pt.y=4;
		change(pt);
		//System.out.println("x="+pt.x+","+"y="+pt.y);
		System.out.println(pt);*/
		//System.out.println(args[0]);
		/*if(args.length>0)
		{
			for(int i=0;i<args.length;i++)
			{
				System.out.println(args[i]);
			}
		}*/
		/*String str1=new String("abc");
		String str2=new String("abc");
		String str3=str1;*/
		/*if(str1==str2)
		{
			System.out.println("str1==str2");
		}
		else
		{
			System.out.println("str1!=str2");
		}*/
		/*if(str1==str3)
		{
			System.out.println("str1==str3");
		}
		else
		{
			System.out.println("str1!=str3");
		}*/
		/*if(str1.equals(str2))
		{
			System.out.println("str1 equals str2");
		}
		else
		{
			System.out.println("str1 not equals str2");
		}*/
		/*int i=3;
		float f=1.5f;
		char ch='f';
		boolean b=false;
		//System.out.println(str1+i+f+ch+b);
		StringBuffer sb=new StringBuffer();
		sb.append(str1).append(i).append(f).append(ch).append(b);
		//System.out.println(sb.toString());
		sb.delete(4,8);
		sb.insert(4,"mybole");
		System.out.println(sb);*/
		/*int[] num=new int[3];
		for(int i=0;i<num.length;i++)
		{
			System.out.println(num[i]);
		}
		num=null;*/
		/*Student[] students;
		students=new Student[3];
		for(int i=0;i<students.length;i++)
		{
			System.out.println(students[i]);
		}*/
		Professor p=new Professor("wangwu",50);
		Student s1=new Student("zhangsan",18,p);
		Student s2=(Student)s1.clone();
		/*s2.name="lisi";
		s2.age=20;*/
		s2.p.name="lisi";
		s2.p.age=30;
		//System.out.println("name="+s1.name+","+"age="+s1.age);
		System.out.println("name="+s1.p.name+","+"age="+s1.p.age);
	}
}

class Professor implements Cloneable
{
	String name;
	int age;
	Professor(String name,int age)
	{
		this.name=name;
		this.age=age;
	}
	public Object clone()
	{
		Object o=null;
		try
		{
			o=super.clone();
		}
		catch(CloneNotSupportedException e)
		{
			System.out.println(e.toString());
		}
		return o;
	}
}
class Student implements Cloneable
{
	String name;
	int age;
	Professor p;
	Student(String name,int age,Professor p)
	{
		this.name=name;
		this.age=age;
		this.p=p;
	}
	public Object clone()
	{
		//Object o=null;
		Student o=null;
		try
		{
			o=(Student)super.clone();
		}
		catch(CloneNotSupportedException e)
		{
			System.out.println(e.toString());
		}
		o.p=(Professor)p.clone();
		return o;
	}
}
class Point
{
	int x,y;
	public String toString()
	{
		return "x="+x+","+"y="+y;
	}
}

class Test
{
	public static void main(String[] args)
	{
		int i=3;
		Integer in=new Integer(i);
		int j=in.intValue();
		System.out.println("j="+j);
		String str=in.toString();
		System.out.println("str="+str);
		
		String str2="134";
		System.out.println(Integer.valueOf(str2));
	}
}












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值