java 基础汇总

----------------------------------第一个测试代码

<%=new java.util.Date()%>

 

 

 

----------------------------------print和tostring

print会自动调用对应的tostring 方法,很多类都重写了 tostring方法.
在自定义的类中也可以重写toString方法,这样print就可以按照你的要求来输出
class Point
{
public static void toString()
{
    renturn "x="+x+"y="+y;
}
}

 

 

--------------------------------静态代码段

当类被访问时,静态代码段也会执行

class Point {
    static
    {
        System.out.println("Point class");
    }
   
}


/*
结果是:
Before Point class
Point class
after Point class
*/

 

--------------------------------异常

public class YiChang2
{
        public static void main(String args[])
        {
                int a,b;
                try
                {
                        a=0;
                        b=5/a;
                        System.out.println("需要检验的程序");
                }
                catch(ArithmeticException e)
                {
                        System.out.println("发生ArithmeticException异常");
                }
                System.out.println("结束");
        }
}

 

--------------------------------栈内存和堆内存

1.将两个坐标点互换,不能有第三个变量

public class Test {
    public static void main(String[] args) {
        int x=3;
        int y=4;
        x=x+y;
        y=x-y;
        x=x-y;
        System.out.println(x);
        System.out.println(y);
    }
}

public class Test {
    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);
        System.out.println(y);
       
        int[] num=new int[]{3,4};
        change(num);
        System.out.println(num[0]);
        System.out.println(num[1]);
       
        Point pt=new Point();
        pt.x=3;
        pt.y=4;
        change(pt);
        System.out.println(pt.x);
        System.out.println(pt.y);
    }
}


结果为;

4
3
4
3


为什么第一个基本数据类型x,y结果没有发生互换?

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

 


java 基础汇总


java 基础汇总

 

2 通过引用类型来熟悉java中的栈内存和堆内存

 


java 基础汇总

 

其它的数据类型都是引用对象。比如数组,string

String s1= new String(“abc”);
String s2= new String(“abc”);

If(s1== s2)//==是表示两个对象在栈内存中的引用值是否相等,所以不相等
{

}


If(s1.equals(s2)) //==是表示两个对象在堆内存中的的值是否相等,即字符串对象,所以相等
{

}
equals 在java.lang.object,而String 类将equals方法重写了。

 

 

 


java 基础汇总

 

“当我们声明一个引用类型变量时,系统只为该变量分配了引用空间,初始的通常为null”只有通过new来生成的对象才会被保留在堆内存中


public class Test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        String s1= new String("abc");
        String s2= new String("abc");
        String s3=s1;
        s3="ccc";
        System.out.println(s1);
        System.out.println(s3);

    }

}
//abc
  ccc

 

 

----------------------------------递归

public class RecursionDemo
{
    public static void main(string[] args)
    {
        system.out.println("writeVertical(3):");
        writeVertical(3);
       
        system.out.println("writeVertical(12):");
        writeVertical(12);
       
        system.out.println("writeVertical(324):");
        writeVertical(3);
       
    }
   
    public static void writeVertical(int n)
    {
        if(n<10)
        {
            system.out.println(n);
        }else
        {
            writeVertical(n/10);
            system.out.println(n%10);
        }
    }
}


/*输出:
3

1
2

3
2
4

*/

 

 

----------------------------------数组  数组类型是引用类型

double[] score=new double[5];
score.length 等于5

 

 

 

-----数组初始化

int[] age={2,12,1};
_________________
int[] age= new int(3);
age[0]=2;
age[1]=12;
age[2]=1;
__________
int[] i=new int[]{1,2,3};

 

 

-----多维数组

char[][] a = new char[5][12];

int[][] myarray = new int[4][5];
for(int index1=0;index1<myarray.length;index1++)
{
    for(int index2=0;index2<myarray[index1].length;index2++)
    {

    }
}

 

 

-----循环

public class Test {
    public static void main(String[] args) {
        int[] num=new int[3];
        for(int i=0;i<num.length;i++)
        {
            System.out.println(num[i]);
        }
    }
}

 

 

-----数组排序

静态方法Arrays.sort

import java.util.*;
public class Test {
    public static void main(String[] args)
    {
        int[] num1=new int[]{2,1,3};
        Arrays.sort(num1);
        for(int i=0;i<num1.length;i++)
        {
            System.out.println(num1[i]);
        }
    }
}

/*
结果是
1
2
3

*/


Arrays.binarySearch的前提是必须使用排序Arrays.sort

import java.util.*;
public class Test {
    public static void main(String[] args)
    {
        int[] num1=new int[]{2,1,3};
        Arrays.sort(num1);
        int index=Arrays.binarySearch(num1, 3);
        System.out.println("index="+index);
        System.out.println(num1[index]);
    }
}

double[] b = {7.7,5.5,11,3,4.4};
seletionSort.sort(b,b.length);
for(int i=0;i<b.length,i++)
{
    system.out.print(b[i] + "");
}

 

 

-----java.lang.system中的arraycopy方法

arraycopy(Object src, int srcPos, Object dest, int destPos, int length)  从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。

 

public class Test {
    public static void main(String[] args)
    {
        int[] num1=new int[]{1,2,3};
        int[] num2=new int[3];
        System.arraycopy(num1, 0, num2, 0, num1.length);
        for(int i=0;i<num2.length;i++)
        {
            System.out.println(num2[i]);
        }
    }
}



对象数组:
Point.java
class Point {
    int x;
    int y;
    Point(int x,int y)
    {
        this.x=x;
        this.y=y;
    }
}


Test.java
class Test {
    public static void main(String[] args)
    {
        Point[] pt=new Point[]{new Point(1,1),new Point(2,2),new Point(3,3)};
        Point[] pt2=new Point[3];
        System.arraycopy(pt, 0, pt2, 0, pt.length);
        for(int i=0;i<pt2.length;i++)
        {
            System.out.println(pt2[i].x+"+"+pt2[i].y);
        }
    }
}



Test.java
class Test {
    public static void main(String[] args)
    {
        Point[] pt=new Point[]{new Point(1,1),new Point(2,2),new Point(3,3)};
        Point[] pt2=new Point[3];
        System.arraycopy(pt, 0, pt2, 0, pt.length);
        pt2[1].x=5;
        pt2[1].y=5;
        for(int i=0;i<pt2.length;i++)
        {
            System.out.println(pt2[i].x+"+"+pt2[i].y);
        }
    }
}

/*
结果是:
1+1
5+5
3+3

*/

 

数组的内存分配图


java 基础汇总

 

 

数组的相关操作


java 基础汇总

 

 

 

 

 

--------------------------------------将两个坐标点互换,不能有第三个变量   传值分为基本数据类型传值和引用类型传值

 

public class Test {
    public static void main(String[] args) {
        int x=3;
        int y=4;
        x=x+y;
        y=x-y;
        x=x-y;
        System.out.println(x);
        System.out.println(y);
    }
}







public class Test {
    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);
        System.out.println(y);
       
        int[] num=new int[]{3,4};
        change(num);
        System.out.println(num[0]);
        System.out.println(num[1]);
       
        Point pt=new Point();
        pt.x=3;
        pt.y=4;
        change(pt);
        System.out.println(pt.x);
        System.out.println(pt.y);
    }
}


结果为;

4
3
4
3


为什么第一个基本数据类型x,y结果没有发生互换?

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

 


java 基础汇总

 

 

 


java 基础汇总