Java4Android自学记录(5):练习课(一)

1 目录及资源索引

  Java4Android自学过程目录及资源索引

2 练习1

  题目:创建一个 Java 源文件,命名为 Exerc01.java 。在主函数当中创建一个 Boolean 类型的变量,并且尝试为这个变量赋值(true、false、0),并将这个变量的值打印出来。
  代码如下:

public class Exerc01
{
	public static void main(String args[])
	{
		boolean bTemp1 = true;
		boolean bTemp2 = false;
		boolean bTemp3 = 0;				

		System.out.println(bTemp1);
		System.out.println(bTemp2);
		System.out.println(bTemp3);
	}
}

  很显然,bTemp3 是不能这样赋值的,会有错误,编译如下:
在这里插入图片描述
  把 0 改为 true,再次编译,可以通过
在这里插入图片描述
  运行结果如下:
在这里插入图片描述

3 练习2

  题目:创建一个 Java 源文件,命名为 Exerc02.java 。在主函数当中创建一个 char 类型的变量,并尝试为这个变量赋值(英文字符或中文字符),并将这个变量的值打印出来。
  代码如下:

public class Exerc02
{
	public static void main(String args[])
	{
		char cTemp1 = 'a';
		char cTemp2 = 'b';
		char cTemp3 = '你';
		char cTemp4 = '好';

		System.out.println(cTemp1);
		System.out.println(cTemp2);
		System.out.println(cTemp3);
		System.out.println(cTemp4);
	}
}

  同样的,根据之前的经验,有汉字时,在编译命令后边要加上使用的字符集编码,编译运行结果如下:
在这里插入图片描述

3 练习3

  题目:创建一个 Java 源文件,命名为 Exerc03.java 。在主函数为每一种数值型创建一个变量,并且赋值,然后进行各种加减乘除的运算。

3.1 测试代码1

  测试代码1:

public class Exerc03
{
	public static void main(String args[])
	{
		byte	bTempA = 0;
		short	sTempB = 0;
		int		iTempC = 0;
		long	lTempD = 0;
		float	fTempE = 0.1;
		double	dTempF = 0;
	}
}

  上述代码,编译后,可以看到第9行有如下错误:
在这里插入图片描述
  这是因为,再把 0.1 赋值给 fTempE 的时候,默认是 double 类型的,因此就会报如上错误,为了解决此问题,可以参考上节,定义一个 long 整形的变量,需要在后边加上一个大写的 L,这样才能代表是长整型。类比过来就是要在后边加上一个大写的F,修改后代码如下:

public class Exerc03
{
	public static void main(String args[])
	{
		byte	bTempA = 0;
		short	sTempB = 0;
		int		iTempC = 0;
		long	lTempD = 0;
		float	fTempE = 0.1F;	// 后边加上大写的F
		double	dTempF = 0;
	}
}

  再次编译没有报错。
在这里插入图片描述

3.2 测试代码2

  测试代码2如下:

public class Exerc03
{
	public static void main(String args[])
	{
		byte	bTempA = 0;
		short	sTempB = 0;
		int		iTempC = 0;
		long	lTempD = 1;
		float	fTempE = 0.1F;	// 后边加上大写的F
		double	dTempF = 0;

		iTempC = lTempD;
	}
}

  编译后的结果如下图所示,可以看到在最后一句赋值语句时,出现了问题,很显然,这样把一个长整型的数赋值给一个整形的,精度肯定是会损失的。
在这里插入图片描述
  需要注意的是,0是整形,通常不能直接赋值给其他类型,但是 byte 和 short 两种类型除外。

3.3 测试代码3

  测试代码3如下:

public class Exerc03
{
	public static void main(String args[])
	{
		byte	bTempA = 0;
		short	sTempB = 0;
		int		iTempC = 0;
		long	lTempD = 1;
		float	fTempE = 0.1F;	// 后边加上大写的F
		double	dTempF = 0;

		int iA1 = 0.5 * 10;
		System.out.println(iA1);
	}
}

  编译结果如下,可以看到,报出了可能损失精度的错误,为什么呢?因为0.5是一个双精度浮点型,小数不论怎么计算,都是双精度浮点型。
  整个表达式的计算结果是什么类型,取决于整个公式中最大的那个数的类型。
在这里插入图片描述
  那如果就要这样写,又要避免错误怎么办,可以使用 强制类型转换,具体用法就是在想要转换的语句前边,用括号加上一个想要的类型,即可。代码体现如下:

public class Exerc03
{
	public static void main(String args[])
	{
		byte	bTempA = 0;
		short	sTempB = 0;
		int		iTempC = 0;
		long	lTempD = 1;
		float	fTempE = 0.1F;	// 后边加上大写的F
		double	dTempF = 0;

		int iA1 = (int)(0.5 * 10);
		System.out.println(iA1);
	}
}

  可以看到,已经编译成功了。
在这里插入图片描述
  在强制转换的时候,有一个地方需要注意,就是必须要在你想要转换的那个类型两端加上括号,后边的语句也要加上对应的括号,不然会报错。
在这里插入图片描述

3.4 测试代码4

  测试代码4如下:

public class Exerc03
{
	public static void main(String args[])
	{
		byte	bTempA = 0;
		short	sTempB = 0;
		int		iTempC = 0;
		long	lTempD = 1;
		float	fTempE = 0.1F;	// 后边加上大写的F
		double	dTempF = 0;

		int iA1 = (int)(0.5 * 10);
		System.out.println(iA1);

		byte bA2 = (byte)(bTempA + 200);
		System.out.println(bA2);
	}
}

  编译运行结果如下,可以看到,编译没有错误,但是运行结果怎么会是 -56 呢?
在这里插入图片描述
  仔细想一下,byte 型取值范围是 -128 ~ 127,很明显,加上200后,超过了 byte 的取值范围,这样就会出现预想不到的错误,因此在使用强制转换的时候,需要慎重

4 什么时候可以使用强制转换?

数值型类型表数范围关系:

byte < short < int < long < float < double

5 总结

  1. 在程序中有汉字字符时, 需要在编译命令后加上所使用的字符集;
  2. 0 通常是整形,不能随便赋值给其他类型变量,但是 byte 和 short 两种类型除外;
  3. 强制转换需要慎用;
  4. 由于文章纯手打,可能会有错误之处,望各位看到的时候可以及时提醒,我也及时改正,谢谢~
发布了88 篇原创文章 · 获赞 84 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/Fighting_Boom/article/details/103896824
今日推荐