java测试程序2

一:基本数据要注意的一些情况

package zb;

public class FloatTest
{
	public static void main(String[] args) 
	{
		float af = 5.2345556f;
		//下面将看到af的值已经发生了改变
		System.out.println(af);
		double a = 0.0;
		double c = Double.NEGATIVE_INFINITY;    //注意:是Double不是double
		float d = Float.NEGATIVE_INFINITY;      //注意:是Float不是float
		//看到float和double的负无穷大是相等的。
		System.out.println(c == d);
		//0.0除以0.0将出现非数
		System.out.println(a / a);
		//两个非数之间是不相等的
		System.out.println(a / a == Float.NaN);
		//所有正无穷大都是相等的
		System.out.println(6.0/0 == 555.0/0);
		//负数除以0.0得到负无穷大
		System.out.println(-8 / a);
		//整数除以0会抛出异常
		//System.out.println(-3 / 0);
	}
}

运行结果:

5.2345557
true
NaN
false
true
-Infinity

二:获取基本数据类型所占比特数

package zb;

public class FloatTest
{
	public static void main(String[] args) 
	{
		int a=Byte.SIZE;
		int b=Short.SIZE;
		int c=Character.SIZE;
		int d=Integer.SIZE;
		int e=Long.SIZE;
		int f=Float.SIZE;
		int g=Double.SIZE;		
		System.out.println(a+"、"+b+"、"+c+"、"+d+"、"+e+"、"+f+"、"+g);
	}
}
运行结果:

8、16、16、32、64、32、64
三:基本数据类型遇到字符串,都会自动转为字符串类型

package zb;
public class PrimitiveAndString
{
	public static void main(String[] args) 
	{
		//下面代码是错的,因为5是一个整数,不能直接赋给一个字符串
		//String str1 = 5;
		//一个基本类型值和字符串进行连接运算时,基本类型值自动转换为字符串
		String str2 = 3.5f + "";
		//下面输出3.5
		System.out.println(str2);
		//下面语句输出7Hello!
		System.out.println(3 + 4 + "Hello!");
		//下面语句输出Hello!34,因为Hello! + 3会把3当成字符串处理,
		//而后再把4当成字符串处理
		System.out.println("Hello!" + 3 + 4);
	}
}

运行结果:

3.5
7Hello!
Hello!34

注意:System.out.println(3 + 4 + "Hello!");与System.out.println("Hello!" + 3 + 4);的区别

四:

package zb;
public class PrimitiveAndString
{
	public static void main(String[] args) 
	{
		//输出字符串Hello!a7
		System.out.println("Hello!"+'a'+7);
		//输出字符串104Hello!
		System.out.println('a'+7+"Hello!");
	}
}
运行结果:

Hello!a7
104Hello!

‘a’的ascii码为97,97+7=104,先转化为整形,再转化为字符型。

五:用Unicode为字符型赋值

package zb;
public class PrimitiveAndString
{
	public static void main(String[] args) 
	{
		char a='\u0061';
		System.out.println(a);
	}
}
输出:a

六:求模运算

package zb;

public class ModTest
{
	public static void main(String[] args) 
	{
		double a = 5.2;
		double b = 3.1;
		double mod = a % b;
		//mod的值为2.1
		System.out.println(mod);
		System.out.println(5%3);
		//输出非数:NaN
		System.out.println("5对0.0求余的结果是:" + 5 % 0.0);
		//输出非数:NaN
		System.out.println("-5.0对0求余的结果是:" + -5.0 % 0);
		//输出0
		System.out.println("0对5.0求余的结果是:" + 0 % 5.0);
		//输出非数:NaN
		System.out.println("0对0.0求余的结果是:" + 0 % 0.0);
		//下面代码将出现异常 
		//java.lang.ArithmeticException: / by zero
		//System.out.println("-5对0求余的结果是:" + -5 % 0);
	}
}
运行结果:

2.1
2
5对0.0求余的结果是:NaN
-5.0对0求余的结果是:NaN
0对5.0求余的结果是:0.0
0对0.0求余的结果是:NaN

七:数学运算

package zb;

public class MathTest
{
	public static void main(String[] args) 
	{
		//定义变量a为3.2
		double a = 3.2;
		//求a的5次方,并将计算结果赋为b。
		double b = Math.pow(a , 5);
		//输出b的值
		System.out.println(b);
		//求a的平方根,并将结果赋给c
		double c = Math.sqrt(a);
		//输出c的值
		System.out.println(c);
		//计算随机数,返回一个0~1之间的伪随机数。
		double d = Math.random();
		//输出随机数d的值
		System.out.println(d);
		//求1.57的sin函数值:1.57被当成弧度数
		double e = Math.sin(1.57);
		//输出接近1
		System.out.println(e);
	}
}
运行结果:

335.5443200000001
1.7888543819998317
0.3274970519909547
0.9999996829318346

八:说明+=更健壮

package zb;

public class EnhanceAssignTest
{
	public static void main(String[] args) 
	{
		//定义一个byte类型的变量
		byte a = 5;
		//下面语句出错,因为5默认是int类型,a + 5就是int类型。
		//把int类型赋给byte类型的变量,所以出错
		//a = a + 5;
		//定义一个byte类型的变量
		byte b = 5;
		//下面语句将不会出现错误
		b += 5;
	}
}
九:二维数组练习

package zb;

public class TwoDimensionTest
{
	public static void main(String[] args) 
	{
		//定义一个二维数组
		int[][] a;
		//把a当成一维数组进行初始化,初始化a是一个长度为4的数组
		//a数组的数组元素又是引用类型
		a = new int[4][];
		//把a数组当成一维数组,遍历a数组的每个数组元素
		for (int i = 0 , len = a.length; i < len ; i++ )
		{
			System.out.println(a[i]);
		}
		//初始化a数组的第一个元素
		a[0] = new int[2];
		//访问a数组的第一个元素所指数组的第二个元素
		a[0][1] = 6;
		//a数组的第一个元素是一个一维数组,遍历这个一维数组
		for (int i = 0 , len = a[0].length ; i < len ; i ++ )
		{
			System.out.println(a[0][i]);
		}

		//同时初始化二维数组的2个维数
		int[][] b = new int[3][4];
		for(int i=0;i<b.length;i++)
			for(int j=0;j<b[0].length;j++)
				System.out.print(b[i][j]+"、");
		System.out.println();
		//使用静态初始化的语法来初始化一个二维数组
		String[][] str1 = new String[][]{new String[3] 
			, new String[]{"hello"}};
		//使用简化的静态初始化语法来初始化二维数组
		String[][] str2 = {new String[3] 
			, new String[]{"hello"}};
		for(int i=0;i<str1[0].length;i++)
			str1[0][i]="hello"+i;
		for(int i=0;i<str1[0].length;i++)
			System.out.println(str1[0][i]);
		System.out.println(str1[1][0]);
		System.out.println(str2[1][0]);
	}
}
十:练习使用数组的操作类Arrays

package zb;

import java.util.Arrays;

public class ArraysTest
{
	public static void main(String[] args) 
	{
		//定义一个a数组
		int[] a = new int[]{3, 4 , 5, 6};
		//定义一个a2数组
		int[] a2 = new int[]{3, 4 , 5, 6};
		//a数组和a2数组的长度相等,每个元素依次相等,将输出true
		System.out.println("a数组和a2数组是否相等:"
			+ Arrays.equals(a , a2));
		//通过复制a数组,生成一个新的b数组
		int[] b = Arrays.copyOf(a, 6); 
		System.out.println("a数组和b数组是否相等:"
			+ Arrays.equals(a , b));
		//输出b数组的元素,将输出[3, 4, 5, 6, 0, 0]
		System.out.println("b数组的元素为:"
			+ Arrays.toString(b));
		//将b数组的第3个元素(包括)到第5个元素(不包括)赋为1
		Arrays.fill(b , 2, 4 , 1);
		//输出b数组的元素,将输出[3, 4, 1, 1, 0, 0]
		System.out.println("b数组的元素为:" 
			+ Arrays.toString(b));
		//对b数组进行排序,升序
		Arrays.sort(b);
		//输出b数组的元素,将输出[0, 0, 1, 1, 3, 4]
		System.out.println("b数组的元素为:" 
			+ Arrays.toString(b));
	}
}

运行结果:

a数组和a2数组是否相等:true
a数组和b数组是否相等:false
b数组的元素为:[3, 4, 5, 6, 0, 0]
b数组的元素为:[3, 4, 1, 1, 0, 0]
b数组的元素为:[0, 0, 1, 1, 3, 4]

十一:返回this,可以实现多次连续调用同一方法

package zb;

public class ReturnThis
{
	public int age;
	public ReturnThis grow()
	{
		age++;
		//return this,返回调用该方法的对象
		return this;
	}
	public static void main(String[] args)
	{
		ReturnThis rt = new ReturnThis();
		//可以连续调用同一个方法
		rt.grow()
			.grow()
			.grow().grow();
		System.out.println("rt的age Field值是:" + rt.age);
	}
}
运行结果:rt的age Field值是:4

十二:函数传入可变参数

package zb;

public class Varargs
{
	//定义了形参个数可变的方法
	public static void test(int a , String... books)
	{
		//books被当成数组处理
/*		for (String tmp : books)
		{
			System.out.println(tmp);
		}*/
		for(int i=0;i<books.length;i++)
			System.out.println(books[i]);
		//输出整数变量a的值
		System.out.println(a);
	}
	public static void main(String[] args) 
	{
		//调用test方法
		test(5);
		test(5 , "疯狂Java讲义" , "轻量级Java EE企业应用实战");		
	}
}
运行结果:

5
疯狂Java讲义
轻量级Java EE企业应用实战
5

对比以下代码:

package zb;

public class Varargs
{
	//定义了形参个数可变的方法
	public static void test(int a , String[] books)
	{
		//books被当成数组处理
/*		for (String tmp : books)
		{
			System.out.println(tmp);
		}*/
		for(int i=0;i<books.length;i++)
			System.out.println(books[i]);
		//输出整数变量a的值
		System.out.println(a);
	}
	public static void main(String[] args) 
	{
		//调用test方法
		test(5,new String[]{});
		test(5 ,new String[]{"疯狂Java讲义" , "轻量级Java EE企业应用实战"});		
	}
}

补充:可将test(5,new String[0]);替代test(5,new String[] { });运行结果一样。

十三:可变参数、函数重载

package zb;

public class OverloadVarargs
{
	public void test(String msg)
	{
		System.out.println("只有一个字符串参数的test方法 ");
	}
	//因为前面已经有了一个test方法,test方法里有一个字符串参数。
	//此处的长度可变形参里不包含一个字符串参数的形式
	public void test(String... books)
	{
		System.out.println("****形参长度可变的test方法****");
	}
	public static void main(String[] args)
	{
		OverloadVarargs olv = new OverloadVarargs();
		//下面两次调用将执行第二个test方法
		olv.test();
		olv.test("aa" , "bb");
		//下面将执行第一个test方法
		olv.test("aa");
		//下面调用将执行第二个test方法,因为显示的说明了函数参数是一个String数组
		olv.test(new String[]{"aa"});
	}
}
运行结果:

****形参长度可变的test方法****
****形参长度可变的test方法****
只有一个字符串参数的test方法 
****形参长度可变的test方法****
十四:多态

package zb;

class BaseClass
{
	public int book = 6;
	public void base()
	{
		System.out.println("父类的普通方法");
	}
	public void test()
	{
		System.out.println("父类的被覆盖的方法");
	}
}
public class SubClass extends BaseClass
{
	//重新定义一个book实例Field隐藏父类的book实例Field
	public String book = "轻量级Java EE企业应用实战";
	public void test()
	{
		System.out.println("子类的覆盖父类的方法");
	}
	public void sub()
	{
		System.out.println("子类的普通方法");
	}
	public static void main(String[] args)
	{
		//下面编译时类型和运行时类型完全一样,因此不存在多态
		BaseClass bc = new BaseClass();
		//输出 6
		System.out.println(bc.book);
		//下面两次调用将执行BaseClass的方法
		bc.base();
		bc.test();
		//下面编译时类型和运行时类型完全一样,因此不存在多态
		SubClass sc = new SubClass();
		//输出"轻量级J2EE企业应用实战"
		System.out.println(sc.book);
		//下面调用将执行从父类继承到的base方法
		sc.base();
		//下面调用将执行从当前类的test方法
		sc.test();
		//下面编译时类型和运行时类型不一样,多态发生
		BaseClass ploymophicBc = new SubClass();
		//输出 6 —— 表明访问的是父类Field
		System.out.println(ploymophicBc.book);
		//下面调用将执行从父类继承到的base方法
		ploymophicBc.base();
		//下面调用将执行从当前类的test方法
		ploymophicBc.test();
		//因为ploymophicBc的编译类型是BaseClass,
		//BaseClass类没有提供sub方法,所以下面代码编译时会出现错误。
		//ploymophicBc.sub();
	}
}

十五:初始化块的执行顺序

package zb;

class Root
{
	static{
		System.out.println("Root的静态初始化块");
	}
	{
		System.out.println("Root的普通初始化块");
	}
	public Root()
	{
		System.out.println("Root的无参数的构造器");
	}
}
class Mid extends Root
{
	static{
		System.out.println("Mid的静态初始化块");
	}
	{
		System.out.println("Mid的普通初始化块");
	}
	public Mid()
	{
		System.out.println("Mid的无参数的构造器");
	}
	public Mid(String msg)
	{
		//通过this调用同一类中重载的构造器
		this();
		System.out.println("Mid的带参数构造器,其参数值:"
			+ msg);
	}
}
class Leaf extends Mid
{
	static{
		System.out.println("Leaf的静态初始化块");
	}
	{
		System.out.println("Leaf的普通初始化块");
	}	
	public Leaf()
	{
		//通过super调用父类中有一个字符串参数的构造器
		super("疯狂Java讲义");
		System.out.println("执行Leaf的构造器");
	}
}
public class Test
{
	public static void main(String[] args) 
	{
		new Leaf();
		new Leaf();
	}
}


运行结果:

Root的静态初始化块
Mid的静态初始化块
Leaf的静态初始化块
Root的普通初始化块
Root的无参数的构造器
Mid的普通初始化块
Mid的无参数的构造器
Mid的带参数构造器,其参数值:疯狂Java讲义
Leaf的普通初始化块
执行Leaf的构造器
Root的普通初始化块
Root的无参数的构造器
Mid的普通初始化块
Mid的无参数的构造器
Mid的带参数构造器,其参数值:疯狂Java讲义
Leaf的普通初始化块
执行Leaf的构造器
十六:基本类型和字符串的互换,parseInt和valueOf函数

package zb;

public class Primitive2String
{
	public static void main(String[] args) 
	{
		String intStr = "123";
		//把一个特定字符串转换成int变量
		int it1 = Integer.parseInt(intStr);
		int it2 = new Integer(intStr);
		System.out.println(it1+"  "+it2);
		String floatStr = "4.56";
		//把一个特定字符串转换成float变量
		float ft1 = Float.parseFloat(floatStr);
		float ft2 = new Float(floatStr);
		System.out.println(ft1+" "+ft2);
		//把一个float变量转换成String变量
		String ftStr = String.valueOf(2.345f);
		System.out.println(ftStr);
		//把一个double变量转换成String变量
		String dbStr = String.valueOf(3.344);
		System.out.println(dbStr);
		//把一个boolean变量转换成String变量
		String boolStr = String.valueOf(true);
		System.out.println(boolStr.toUpperCase());
	}
}

十七:只能产生一个实例,单例类

/**
 * Description:
 * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> 
 * <br/>Copyright (C), 2001-2012, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author Yeeku.H.Lee kongyeeku@163.com
 * @version 1.0
 */
class Singleton
{
	//使用一个变量来缓存曾经创建的实例
	private static Singleton instance;
	//将构造器使用private修饰,隐藏该构造器
	private Singleton(){}
	//提供一个静态方法,用于返回Singleton实例
	//该方法可以加入自定义的控制,保证只产生一个Singleton对象
	public static Singleton getInstance()
	{
		//如果instance为null,表明还不曾创建Singleton对象
		//如果instance不为null,则表明已经创建了Singleton对象,
		//将不会重新创建新的实例
		if (instance == null)
		{
			//创建一个Singleton对象,并将其缓存起来
			instance = new Singleton();
		}
		return instance;
	}
}
public class SingletonTest
{
	public static void main(String[] args)
	{
		//创建Singleton对象不能通过构造器,
		//只能通过getInstance方法来得到实例
		Singleton s1 = Singleton.getInstance();
		Singleton s2 = Singleton.getInstance();
		//将输出true
		System.out.println(s1 == s2);
	}
}

十八:final关键字的使用


/**
 * Description:
 * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> 
 * <br/>Copyright (C), 2001-2012, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author Yeeku.H.Lee kongyeeku@163.com
 * @version 1.0
 */
public class FinalVariableTest
{
	//定义成员变量时指定默认值,合法。
	final int a = 6;
	//下面变量将在构造器或初始化块中分配初始值
	final String str;
	final int c;
	final static double d;
	//既没有指定默认值,又没有在初始化块、构造器中指定初始值,
	//下面定义char Field是不合法的。
	//final char ch;
	//初始化块,可对没有指定默认值的实例Field指定初始值
	{
		//在初始化块中为实例Field指定初始值,合法
		str = "Hello";
		//定义a Field时已经指定了默认值,
		//不能为a重新赋值下面赋值语句非法
		//a = 9;
	}
	//静态初始化块,可对没有指定默认值的类Field指定初始值
	static
	{
		//在静态初始化块中为类Field指定初始值,合法
		d = 5.6;
	}
	//构造器,可对既没有指定默认值、有没有在初始化块中
	//指定初始值的实例Field指定初始值
	public FinalVariableTest()
	{
		//如果初始化块中对str指定了初始化值,
		//构造器中不能对final变量重新赋值,下面赋值语句非法
		//str = "java";
		c = 5;
	}
	public void changeFinal()
	{
		//普通方法不能为final修饰的成员变量赋值
		//d = 1.2;
		//不能在普通方法中为final成员变量指定初始值
		//ch = 'a';
	}
	public static void main(String[] args) 
	{
		FinalVariableTest ft = new FinalVariableTest();
		System.out.println(ft.a);
		System.out.println(ft.c);
		System.out.println(ft.d);
	}
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值