0
点赞
收藏
分享

微信扫一扫

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 是不能这样赋值的,会有错误,编译如下:

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

  把 0 改为 true,再次编译,可以通过

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

  运行结果如下:

Java4Android自学记录(5):练习课(一)_编程语言_03

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);
}
}

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

Java4Android自学记录(5):练习课(一)_强制转换_04

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行有如下错误:

Java4Android自学记录(5):练习课(一)_编程语言_05

  这是因为,再把 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;
}
}

  再次编译没有报错。

Java4Android自学记录(5):练习课(一)_强制转换_06

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;
}
}

  编译后的结果如下图所示,可以看到在最后一句赋值语句时,出现了问题,很显然,这样把一个长整型的数赋值给一个整形的,精度肯定是会损失的。

Java4Android自学记录(5):练习课(一)_强制转换_07

  需要注意的是,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是一个双精度浮点型,小数不论怎么计算,都是双精度浮点型。

  整个表达式的计算结果是什么类型,取决于整个公式中最大的那个数的类型。

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

  那如果就要这样写,又要避免错误怎么办,可以使用 强制类型转换,具体用法就是在想要转换的语句前边,用括号加上一个想要的类型,即可。代码体现如下:

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);
}
}

  可以看到,已经编译成功了。

Java4Android自学记录(5):练习课(一)_赋值_09

  在强制转换的时候,有一个地方需要注意,就是必须要在你想要转换的那个类型两端加上括号,后边的语句也要加上对应的括号,不然会报错。

Java4Android自学记录(5):练习课(一)_强制转换_10

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 呢?

Java4Android自学记录(5):练习课(一)_编程语言_11

  仔细想一下,byte 型取值范围是 -128 ~ 127,很明显,加上200后,超过了 byte 的取值范围,这样就会出现预想不到的错误,因此在使用强制转换的时候,需要慎重

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

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

byte < short < int < long < float < double

5 总结


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


举报

相关推荐

0 条评论