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);
}
}
结果为;
3
4
3
4
3
为什么第一个基本数据类型x,y结果没有发生互换?
在java中,传参时,都是以传值的方式进行的。
对于基本数据类型,传递的都是数据的拷贝,对于引用类型,传递的引用的拷贝。
2 通过引用类型来熟悉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方法重写了。
“当我们声明一个引用类型变量时,系统只为该变量分配了引用空间,初始的通常为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
*/
数组的内存分配图
数组的相关操作
--------------------------------------将两个坐标点互换,不能有第三个变量 传值分为基本数据类型传值和引用类型传值
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);
}
}
结果为;
3
4
3
4
3
为什么第一个基本数据类型x,y结果没有发生互换?
在java中,传参时,都是以传值的方式进行的。
对于基本数据类型,传递的都是数据的拷贝,对于引用类型,传递的引用的拷贝。