演示一:

 public class EnumTest {
public static void main(String[] args) {
Size s=Size.SMALL;
Size t=Size.LARGE;
//s和t引用同一个对象?
System.out.println(s==t);
//是原始数据类型吗?
System.out.println(s.getClass().isPrimitive());//getClass()返回对象时的运行类
//class .isPrimitive()确定指定的Class对象表示一个基本类型(此方法返回true,当且仅当这个类表示一个基本类型。)
//从字符串中转换
Size u=Size.valueOf("SMALL");
System.out.println(s==u); //true
//列出它的所有值
for(Size value:Size.values()){
System.out.println(value);
}
}
}
enum Size{SMALL,MEDIUM,LARGE};

结果与分析:

Size枚举类型定义的s,t对象引用的是Size里不同的元素,故不为同一对象,故第一个输出为false。

第二个判断对象s的所属类类型是否是一般类型,得到false输出,所以s所属的类并不是一般类型。

然后定义对象u引用SMALL,与s引用同一元素,故为同一对象。

然后循环打印Size里的元素,即得到输出结果。

结论:

枚举类型是一种特殊的类。

枚举类型是引用类型。

枚举类型可用于switch语句中。

枚举类型中实例化不同元素的对象不是同一对象,枚举不属于原始数据类型,他的每个具体值都引用一个特定的对象,相同的值则引用相同的对象。

使用枚举可以很方便的定义常量。

从字符串中转化的枚举类型可以与原枚举类型进行比较,且可以地址相同。可以使用“==”和“equal()”方法直接对比枚举常量的值。 

演示二:

实现两数相加,用两个文本框输入数据,一个文本框输出。

 // An addition program
import javax.swing.JOptionPane; // import class JOptionPane
public class Addition {
public static void main( String args[] )
{
String firstNumber, // first string entered by user
secondNumber; // second string entered by user
int number1, // first number to add
number2, // second number to add
sum; // sum of number1 and number2 // read in first number from user as a string
firstNumber =
JOptionPane.showInputDialog( "Enter first integer" ); // read in second number from user as a string
secondNumber =
JOptionPane.showInputDialog( "Enter second integer" ); // convert numbers from type String to type int
number1 = Integer.parseInt( firstNumber );
number2 = Integer.parseInt( secondNumber ); // add the numbers
sum = number1 + number2; // display the results
JOptionPane.showMessageDialog(
null, "The sum is " + sum, "Results",
JOptionPane.PLAIN_MESSAGE ); System.exit( 0 ); // terminate the program
}
}

运行结果:

演示三:

验证如下代码的输出结果。

 import java.util.*;

 public class InputTest
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in); // get first input
System.out.print("What is your name? ");
String name = in.nextLine(); // get second input
System.out.print("How old are you? ");
int age = in.nextInt(); int i,j;
String value="100";
i=Integer.parseInt(value);//Integer.parseInt()return a int value
j=200;
String s=String.valueOf(j);//String.valueOf() return a String object // display output on console
System.out.println("Hello, " + name + ". Next year, you'll be " + (age + 1));
System.out.println("i="+i+",s="+s); }
}

运行结果:

演示四:

验证精度不准。

 public class TestDouble {

     public static void main(String args[]) {
System.out.println("0.05 + 0.01 = " + (0.05 + 0.01));
System.out.println("1.0 - 0.42 = " + (1.0 - 0.42));
System.out.println("4.015 * 100 = " + (4.015 * 100));
System.out.println("123.3 / 100 = " + (123.3 / 100));
}
}

运行结果:

结论:使用double类型的数值进行计算,结果是不准确的。

归根结底,这个问题涉及到二进制与十进制的转换。而N进制可以理解为:数值×基数的幂。Double类型的数值占用64bit,即64个二进制数,除去最高位表示正负符号的位,在最低位上一定会与实际数据存在误差(除非实际数据恰好是2的n次方)。

所以几乎都会存在误差。

演示五:

精度不准的处理方法。

 import java.math.BigDecimal;

 public class TestBigDecimal
{
public static void main(String[] args)
{
BigDecimal f1 = new BigDecimal("0.05");
BigDecimal f2 = BigDecimal.valueOf(0.01);
BigDecimal f3 = new BigDecimal(0.05);
System.out.println("下面使用String作为BigDecimal构造器参数的计算结果:");
System.out.println("0.05 + 0.01 = " + f1.add(f2));
System.out.println("0.05 - 0.01 = " + f1.subtract(f2));
System.out.println("0.05 * 0.01 = " + f1.multiply(f2));
System.out.println("0.05 / 0.01 = " + f1.divide(f2));
System.out.println("下面使用double作为BigDecimal构造器参数的计算结果:");
System.out.println("0.05 + 0.01 = " + f3.add(f2));
System.out.println("0.05 - 0.01 = " + f3.subtract(f2));
System.out.println("0.05 * 0.01 = " + f3.multiply(f2));
System.out.println("0.05 / 0.01 = " + f3.divide(f2));
}
}

运行结果:

结论:

在构建BigDecimal对象时应使用字符串而不是double数值,否则,仍有可能引发计算精度问题。

演示六:

字符串连接

 public class Test {
public static void main(String[] args) {
int X=100;
int Y=200;
System.out.println("X+Y="+X+Y);
System.out.println(X+Y+"=X+Y");
}
}

运行结果:

分析原因:

1、在第一个输出语句中,第一个遇到的是字符串,所以后面的X,Y也转换成字符串输出。此时“+”被理解为连接符。

2、而第二个语句中,第一个遇到的X与第二个遇到的Y是int型,而第三个是字符串,所以连接输出了运算结果和字符串。此时“+”则被理解为运算符。

演示七:

每个数据类型所占的位数和取值范围:

①byte(字节):8bits,数值范围为-128-127

②short(短整型):16bits,数值范围为-32768-32768

③int(整型):32bits,数值范围为-2147483648-2147483648

④long(长整型):64bits,数值范围为-9233372036854477808-9233372036854477808

⑤float(浮点型):32bits,数值范围为-3.40292347E+38-3.40292347E+38

⑥double(双精度):64bits,数值范围为-1.7976931486231570E+308-1.7976931486231570E+308

⑦char(字符型):16bits,数值范围为‘\u0000-u\ffff’

⑧boolean(布尔型):1bits,数值范围为true/false

结论:

java中的基本数据类型转换分为自动类型转换和强制类型转换。自动数据类型转换是由优先级别低的数据赋值给优先级别高的变量。强制类型转换是由优先级别高的数据赋值给优先级别低的变量。强制类型转换通常都会有存在精度的损失,特别是比较大的整数类型转换成小数类型时,由于存储方式不同,精度损失则很容易发生。

演示八:

使用类型转换生成六位验证字符串,示例程序每次运行时,都会生成不同的字符串。

 public class RandomStr
{
public static void main(String[] args)
{
//定义一个空字符串
String result = "";
//进行6次循环
for(int i = 0 ; i < 6 ; i ++)
{
//生成一个97~122的int型的整数
int intVal = (int)(Math.random() * 26 + 97);
//将intValue强制转换为char后连接到result后面
System.out.println(intVal+"--"+(char)intVal);
result = result + (char)intVal;
}
//输出随机字符串
System.out.println(result);
}
}

运行结果:

    

第二周Java课堂作业的更多相关文章

  1. 第二周Java实验作业

    实验二 Java基本程序设计(1) 实验时间 2018-9-6 1.实验目的与要求 (1)进一步熟悉命令行和IDE两种方式下java程序开发的基本步骤: (2)掌握Eclipse集成开发环境下导入Ja ...

  2. 20155237 第十一周java课堂程序

    20155237 第十一周java课堂程序 内容一:后缀表达式 abcde/-f+ 内容二:实现Linux下dc的功能,计算后缀表达式的值 填充下列代码: import java.util.Scann ...

  3. 第二周java学习总结

    学号 20175206 <Java程序设计>第二周学习总结 教材学习内容总结 第二章是基本数据类型与数组,第三章是运算符.表达式和语句的内容.如果说第一章是让我们了解JAVA,那么第二章和 ...

  4. 第二周java学习收获

    JAVA学习第二周总结 教材学习内容总结 第二章:讲了标识符与关键字,以及基本数据类型:逻辑类型.整数类型.字符类型.浮点类型. 输入输出,System.in,System.out和数组. 第三章:运 ...

  5. 20145231第二周Java学习笔记

    20145231 <Java程序设计>第2周学习总结 教材学习内容总结 本周的学习采用的依然是先看课本,再看视频,然后实践敲代码,最后根据学习笔记总结完成博客. 第三章:基础语法 知识点比 ...

  6. Java课堂作业详解

    今天的Java课堂留下了一个作业:使用Eclipse编写一个程序,使输入的两个数进行加和,并且输出他们的和.对于这个题目,我们首先可以把它分解成为三个不同的小步骤 第一步就是输入这两个数,因为我们无需 ...

  7. 20165234 《Java程序设计》第二周课下作业

    1. 教材代码完成情况测试P14 把100改为自己的后四位学号,编译运行Kernighan.java 代码的功能是从给定一个数字,实现从1依次加到此数的和. 如下是我用命令行实现代码的编译与运行. 2 ...

  8. 201521123110第二周Java学习总结

    1.本章学习总结 本周的Java学习相对前一周更进了一步,初步学习了Java简单的输入和输出,String类的对象创建后不能修改,它是不可变的,在Java中浮点型默认是double型与C中的int型不 ...

  9. 201521123021第二周Java学习总结

    1.本章学习总结 ①初步掌握了Java程序简单的输入和输出. ②回顾了运算符和表达式的使用. ③在数据类型的学习的中,要注意各类型的取值范围,特别是byte型范围很小,若为128即溢出. ④在Java ...

随机推荐

  1. jQuery的$符号

    jQuery使用$的原因是: 书写简洁, 相对于其他字符与众不同, 容易被记住. JQuery占用了两个变量: $ 和 jQuery. 当在代码中打印 $ 和 jQuery时: <script ...

  2. Jquery 2.0+版本不支持IE8,如何解决?

    用了JQuery2.0+以后,在IE8下会报错,下面是我的方法. 先看代码: <!--[if !IE]> -->        <script src="/Scrip ...

  3. 10分钟梳理MySQL核心知识点

    数据库的使用,是开发人员的基本功,对它掌握越清晰越深入,你能做的事情就越多. 做业务,要懂基本的SQL语句:做性能优化,要懂索引,懂引擎:做分库分表,要懂主从,懂读写分离... 今天我们用10分钟,重 ...

  4. Kafka Eagle 安装

    Kafka Eagle 是一款开源的 Kafka 集群监控系统. 一.下载 https://download.kafka-eagle.org/ 二.安装 # 解压 .tar.gz -C /opt/ / ...

  5. OpenCV中出现“Microsoft C++ 异常: cv::Exception,位于内存位置 0x0000005C8ECFFA80 处。”的异常

    对于OpenCV的安装 要感谢网友空晴拜小白提供的教程 链接如下: https://blog.csdn.net/sinat_36264666/article/details/73135823?ref= ...

  6. leetcode94 不同的二叉搜索树

    solution 1:**动态规划 class Solution { public: int numTrees(int n) { vector<int> g={1,1,2}; for(in ...

  7. 最新create-react-native-app搭建rn教程

    一.前置条件: 1.nodeJS环境 2.npm 3.yarn 二.安装及项目初始化 1.安装脚手架 npm install -g create-react-native-app 2.用脚手架初始化创 ...

  8. 传统Web应用请求和响应特点【显示当前时间】

    (1)请求:浏览器以HTTP协议的方式提交请求到服务器 (2)响应:服务器以HTTP协议的方式响应内容到浏览器 注意:HTTP是WEB大众化非安全协议 HTTPS是WEB安全协议,是基于HTTP协议的 ...

  9. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_3-2.使用Mybatis注解开发视频列表增删改查

    笔记 2.使用Mybatis注解开发视频列表增删改查     讲解:使用Mybatis3.x注解方式 增删改查实操, 控制台打印sql语句              1.控制台打印sql语句      ...

  10. 小D课堂 - 新版本微服务springcloud+Docker教程_5-02 Netflix开源组件断路器

    笔记 2.Netflix开源组件断路器Hystrix介绍     简介:介绍Hystrix基础知识和使用场景          文档地址:         https://github.com/Net ...