java(一)

Java的常用包

n       java.applet:包含一些用于创建Java小应用程序的类。

n       java.awt:包含一些用于编写与平台无关的图形界面(GUI)应用程序的类。

n       java.io:包含一些用作输入输出(I/O)处理的类。

n       java.lang:包含一些Java语言的基本类与核心类,如StringMathIntegerSystemRuntime,提供常用的功能,这个包中的所有类是被隐式导入的。

n       java.net:包含用于建立网络连接的类,与java.io同时使用完成与网络有关的读写。

n       java.util:包含一些实用工具类和数据结构类。

 

 

Java中,booleanbyteshortintlongcharfloatdouble这八种是基本数据类型,其余的都是引用类型。

   “==”是比较两个变量的值是否相等,“equals”是比较两个对象变量所代表的对象的内容是否相等。

String str1 = new String("abc");

String str2 = new String("abc");

str1 == str2;

str1.equals(str2);

 

StringStringBuffer

str1 = str2;

           int a = 3;

           float f = 3.5f;

           char ch = 'f';

           boolean b = false;

           System.out.println(str1+a+f+ch+b);

             

           StringBuffer sb = new StringBuffer();

           sb.append(a).append(f).append(ch).append(b);

           System.out.println(sb.toString());

           System.out.println(sb);//一样结果

数组的内存分配

 

int[] num = new int[3];

    for(int i = 0; i<num.length; i++){

       System.out.print(num[i]);

    }//输出为0

num = null;//num 就不再指向那块内存空间,那块内存变成垃圾内存

对象数组的内存分配

 

Student[] students;

    students = new Student[3];

    for(int i = 0; i<students.length(); i++){

       System.out.println(students[i]);

    }//打印出null

函数的调用

n                   Java中,传参时,都是以传值的方式进行。

n                   对于基本数据类型,传递的是数据的拷贝;对于引用类型,传递的引用的拷贝。

示例:

//数组也是引用类型!

public 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 p){

       p.x = p.x + p.y;

       p.y = p.x - p.y;

       p.x = p.x - p.y;

    }

    public static void main(String[] args) {

       int x = 3;

       int y = 4;

       change(x,y);

       System.out.println("x="+x+",y="+y);

       point pt = new point();

       pt.x = 3;

       pt.y = 4;

       change(pt);

       System.out.println("x="+pt.x+",y="+pt.y);

//若改写了Point中的toString 方法,则可如此书写:

//System.out.println(pt);

       int[] num = new int[2];

       for(int i = 0; i<num.length; i++){

           num[i] = i;

       }

       change(num);

       System.out.println("x="+num[0]+",y="+num[1]);

    }

}

class point{

    int x;

    int y;

    public String toString(){

       return "x="+x+","+"y="+y;

    }

}

 

对象的克隆(clone)

n                   为了获取对象的一份拷贝,我们可以利用Object类的clone()方法。

n                   在派生类中覆盖基类的clone()方法,并声明为public

n                   在派生类的clone()方法中,调用super.clone()

n                   在派生类中实现Cloneable接口。

示例:

public class StringTest {

    public static void main(String[] args) {

       Student s1 = new Student("WangWu",24);

       Student s2 = (Student)s1.clone();

       s2.name = "LiLiu";

       s2.age = 21;

       System.out.println("s1.name:"+s1.name+",s1.age:"+s1.age);

    }

}

//其实Cloneable接口中中没有要实现的方法,只是声明可以克隆了

class Student implements Cloneable{

    String name;

    int age;

    Student(String name, int age){

       this.name = name ;

       this.age = age ;

    }

    public Object clone(){

       Student o = null;

       try {

           o = (Student)super.clone();

       } catch (CloneNotSupportedException e) {

           e.printStackTrace();

       }

       return o;

    }

}

s1的信息并没有改变

示例2

public class StringTest {

    public static void main(String[] args) {

       Professor p = new Professor("LiSir",35);

       Student s1 = new Student("WangWu",24,p);

       Student s2 = (Student)s1.clone();

       s2.p.name = "LiuSir";

       s2.p.age = 31;

       System.out.println("name="+s1.p.name+","+"age="+s1.p.age);

    }

}

//其实Cloneable接口中中没有要实现的方法,只是声明可以克隆了

class Professor {

    String name;

    int age;

    Professor(String name, int age){

       this.name = name;

       this.age = age;

    }

}

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(){

       Student o = null;

       try {

           o = (Student)super.clone();

       } catch (CloneNotSupportedException e) {

           e.printStackTrace();

       }

       return o;

    }

}

s1Professor的信息会改变,普通数据类型的clone()是值得复制,而引用类型的clone()是对引用的复制

如何改进?如下:

示例3

public class StringTest {

    public static void main(String[] args) {

       Professor p = new Professor("LiSir",35);

       Student s1 = new Student("WangWu",24,p);

       Student s2 = (Student)s1.clone();

       s2.p.name = "LiuSir";

       s2.p.age = 31;

       System.out.println("name="+s1.p.name+","+"age="+s1.p.age);

    }

}

//其实Cloneable接口中中没有要实现的方法,只是声明可以克隆了

class Professor implements Cloneable{

    String name;

    int age;

    Professor(String name, int age){

       this.name = name;

       this.age = age;

    }

    public Object clone(){

       Professor o = null;

       try {

           o = (Professor)super.clone();

       } catch (CloneNotSupportedException e) {

           e.printStackTrace();

       }

       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(){

       Student o = null;

       try {

           o = (Student)super.clone();

       } catch (CloneNotSupportedException e) {

           e.printStackTrace();

       }

       o.p = (Professor)p.clone();

       return o;

    }

}

结果:name=LiSir,age=35

 

 

 

 

 

 

 

 

你可能感兴趣的:(java(一))