动手动脑自信成就人生

动手动脑1

✿仔细阅读示例: EnumTest.java,运行它,分析运行结果?

package demo;

public class Test {

public static void main(String[] args) {

Size s=Size.SMALL;

Size t=Size.LARGE;                                                    //s和t引用不同对象

System.out.println(s==t);                                           //false

System.out.println(s.getClass().isPrimitive());                //false 不是原始数据类型

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

运行结果为:SMALL  MEDIUM  LARGE

✿你能得到什么结论?你掌握了枚举类型的基本用法了吗?

枚举类型的常量以字符串的形式顺序储存,Size value:Size.value() 可遍历Size中的所有值,int ordinal() 可返回其在enum(enumerate)中的位置,构造函数和覆写toString()的方法可给枚举类型赋值……

动手动脑2

✿你看到了什么样的输出,意外吗?为什么double类型的数值进行运算得不到“数学上精确”的结果?

运行结果:

0.05+0.01=0.060000000000000005

1.0-0.42=0.5800000000000001

4.015*100=401.49999999999994

123.3/100=1.2329999999999999

无论是单精度还是双精度在计算机中的储存都分为三个部分:符号位(0代表正,1代表负)、指数位(用于储存科学计数法中的指数数据,并且采用移位存储)、尾数部分。比如8.25和120.5的科学计数法表示为:十进制8.25*10^0、1.205*10^2,二进制1.0001*2^3、1.1101101*2^6,这些数以二进制形式存储在计算机里时,会出现00110011001100110011……的无限循环系列,在进行数据类型转换时会出现误差,而能够用二进制表示十进制数据(比如2.25),这个误差就不存在。(本节参考博客园jillzhang@126.com)。

动手动脑3

✿以下代码的输出结果是什么?

int X=100;

int Y=200;

System.out.println("X+Y="+X+Y);

System.out.println(X+Y+"=X+Y");

输出结果:X+Y=100200  300=X+Y

✿为什么会有这样的输出结果

输出语句1里“+”为连接运算,与("X+Y="+(X+Y));不同,输出字符串“X+Y=”与X与Y,输出语句2里第一个“+”为加法运算符,第二个“+”为连接运算符。

动手动脑4

✿阅读相应教材,或者使用互联网搜索引擎,弄清楚反码、补码跟原码这几个概念,然后编写示例程序,对正数、负数进行各种位操作,观察输出结果,与手工计算的结果进行比对,看看Java中的数是采用上述哪种码表示的。

数在计算机中是以二进制形式表示的,分为有符号数和无符号数,原码、反码、补码都是有符号定点数的表示方法。一个有符号定点数的最高位为符号位,0是正,1是负(以8位整数为例),例如0000001 就是+1,1000001 就是-1,原码就是这个数本身的二进制形式,正数的反码和补码都是和原码相同,负数的反码是将其原码除符号位之外的各位求反 [-3]反=[10000011]反=11111100 。负数的补码是将其原码除符号位之外的各位求反之后在末位再加1,[-3]补=[10000011]补=11111101 。一个数和它的补码是可逆的。特别注意,如果+1之后有进位的,要一直往前进位,包括符号位!(这和反码是不同的!)[10000000]补=[10000000]反+1=11111111+1=(1)00000000=00000000(最高位溢出了,符号位变成了0)

为什么要设立补码呢?

通过补码运算,可以把减法运算变成加法运算;而乘法可以用加法来做,除法可以转变成减法。这样一来,加、减、乘、除四种运算“九九归一”了。这对简化CPU的设计非常有意义,CPU里面只要有一个加法器就可以做算术运算了。还有一个原因是为了统一正0和负0,正零:00000000 负零:10000000 这两个数其实都是0,但他们的原码却有不同的表示,但是他们的补码是一样的,都是00000000。

源代码

package demo;

public class Bit {

public static void main(String[] args) {

// TODO 自动生成的方法存根

System.out.println(3<<2);//3左移2位 把整数m(3)表示的二进制数左移n(2)位,高位移出n位都舍弃,低位补0.(此时将会出现正数变成负数的形式)

System.out.println(-3<<2);//-3左移2位

System.out.println(6>>2);//6右移2位 把整数m表示的二进制数右移n位,m为正数,高位全部补0;m为负数,高位全部补1.

System.out.println(-6>>2);//-6右移2位

System.out.println(-6>>>2);//-6无符号右移2位 整数m表示的二进制右移n位,不论正负数,高位都补零。

}

}

结果截图为:

动手动脑5

✿Java变量遵循“同名变量的屏蔽原则”,请课后阅读相关资料弄清楚相关知识,然后自己编写一些测试代码,就象本示例一样,有意识地在不同地方定义一些同名变量,看看输出的到底是哪

1、局部变量与成员变量

区分两个同名变量可以通过给成员变量名添加前缀的方式。如果类名为A.则

System.out.println("Time输出值:"+time);//输出局部变量的值

System.out.println("成员变量Time输出值:"+A.time);//输出成员变量的值

2、子类与父类

在JAVA中,子类可以继承父类,子类声明的方法与父类有重名时分为两种情况,方法和变量在继承时的覆盖和隐藏问题。

隐藏 :子类隐藏了父类的变量和方法,那么,子类不能访问父类被隐藏的变量或者方法,但是,将B转换成A中,可以访问A被隐藏的变量或者方法

覆盖 :子类覆盖了父类的变量或者方法,那么,子类不能访问父类被覆盖的变量或者方法,将子类转换成父类后同样不能访问父类被覆盖的变量或者方法

java中类是分层次的,当子类和父类的定义同名时,父类变量被隐藏,父类的实例方法被重写,静态方法属于类级别的方法,在子类和父类中互不相碍。

Java代码示例:

class Parent{

int i=10;// 父类变量

public void setI(int i){

this.i=i;

}

}

class Son extends Parent{

int i=10;// 子类与父类同名的变量

public static void main(String args[]){

Son son=new Son();

System.out.println("son.i="+son.i);

son.setI(100);

System.out.println("After setI(100) : son.i="+son.i);

Parent parent=son;

System.out.println("See son as Parent : son.i="+parent.i);

}

}

运行的结果:

son.i=10

After setI(100) : son.i=10

See son as Parent : son.i=100

在这段代码中,子类定义了一个父类中同名的成员变量int i,在父类中有一个对 i 赋值的方法setI(),而在子类中没有定义这个方法。当子类调用继承而来的setI()方法对成员变量i进行改变,直接打印son.i(对照代码)时,成员变量i然而却没有改变。但当把son当作Parent类型来使用,再打印它的成员变量i时,输出的结果就对了,是setI()改变之后的值。

动手动脑6

✿看着这个图,再查查Java中每个数据类型所占的位数,和表示数值的范围,你能得出什么结论?

1.Int       32位    4字节      -2147483648~~~2147483647

2.Short     16位    2字节      -32768~~~32678

3.long      64位    8字节      -9223372036854775808~~~9223372036854775807

4.float     32位    4字节      -340292347E+38~~~+340292347E+38

5.double    64位    8字节      -1.79769313486231576E+308~~~1.79769313486231576E+308

6.char      16位    2字节      ‘\u0000′‘~~~‘\uFFFF’

7.boolean    1位   0.125字节   true/false

8.byte       8位    1字节       -128~~~127

(在转换时遵循以下原则:从低精度向高精度转换、基本类型向类类型转换、类类型向字符串转换、基本类型向字符串的转换)

byte,short,char之间不会互相转换,并且三者在计算时首先转换为int类型

1、自动类型转换

自动类型转换,也称隐式类型转换,是指不需要书写代码,由系统自动完成的类型转换。由于实际开发中这样的类型转换很多,所以Java 语言在设计时,没有为该操作设计语法,而是由 JVM 自动完成。

转换规则:从存储范围小的类型到存储范围大的类型。

具体规则为:byte→char→int→long→float→double。也就是说 byte 类型的变量可以自动转换为char类型,示例代码:

byte b=10;

char sh=b;

在类型转换时可以跳跃。示例代码:

byte b1=100;

int n=b1;

注意问题:在整数之间进行类型转换时,数值不发生改变,而将整数类型,特别是比较大的整数类型转换成小数类型时,由于存储方式不同,有可能存在数据精度的损失。

2、强制类型转换

强制类型转换,也称显式类型转换,是指必须书写代码才能完成的类型转换。该类类型转换很可能存在精度的损失,所以必须书写相应的代码,并且能够忍受该种损失时才进行该类型的转换。

转换规则:从存储范围大的类型到存储范围小的类型。

具体规则为:double→float→long→int→short(char)→byte

语法格式为:(转换到的类型)需要转换的值

示例代码:

double d=3.10;

int n=(int)d;

这里将 double 类型的变量 d 强制转换成 int 类型,然后赋值给变量 n。需要说明的是小数强制转换为整数,采用的是“去 1 法”,也就是无条件的舍弃小数点的所有数字,则以上转换出的结果是 3。整数强制转换为整数时取数字的低位,例如 int 类型的变量转换为 byte 类型时,则只去 int 类型的低 8 位(也就是最后一个字节)的值。

示例代码:

int n=123;

byte b=(byte)n;

int m=1234;

byte b1=(byte)m;

则 b 的值还是 123,而 b1 的值为-46。b1 的计算方法如下:m 的值转换为二进制是10011010010,取该数字低8位的值作为b1的值,则b1的二进制值是11010010,按照机器数的规定,最高位是符号位,1 代表负数,在计算机中负数存储的是补码,则该负数的原码是 10101110,该值就是十进制的-46。

动手动脑7

✿编写一个程序,用户输入两个数,求出其加减乘除,并用消息框显示计算结果

package demo;

import javax.swing.JOptionPane;

public class Test{

public static void main(String[] args) {

int n1=Integer.parseInt(JOptionPane.showInputDialog("Input number 1: "));

int n2=Integer.parseInt(JOptionPane.showInputDialog("Input number 2: "))    //获取从JOptionPane.showInputDialog对话框中输入的值,然后转换为int类型

JOptionPane.showMessageDialog(null,"The sum is:"+(n1+n2)

+"\n"+"The difference is:"+(n1-n2)

+"\n"+"The product is:"+(n1*n2)

+"\n"+"The division is:"+(n1/n2));

}

}

结果截图为:

除数为0时报错

java用对话框输出计算结果_动手动脑及java程序之用消息框进行数的运算相关推荐

  1. java用对话框输出计算结果_Java怎么实现输入一个string表达式然后输出计算的结果...

    展开全部 public class houzhuibiaodashizi { public static void main(String[] args) { //中缀 => 后缀表达式 Str ...

  2. java开发环境及数据类型实验_实验项目1 Java开发环境与语言基础

    <实验项目1 Java开发环境与语言基础>由会员分享,可在线阅读,更多相关<实验项目1 Java开发环境与语言基础(14页珍藏版)>请在人人文库网上搜索. 1.实验项目1 Ja ...

  3. ios java aes_PHP7 AES加密解密函数_兼容ios/andriod/java对等加解密

    **PHP7.0 7.1 7.2 7.3 AES对等加解密类 函数文件_兼容ios/andriod/java等** 由于新项目规划要求使用PHP7.2开发环境,但在部分新系统中仍需使用AES加解密方式 ...

  4. java工程如何跑起来的_你编写的Java代码是咋跑起来的?

    如果你是一名 Java 开发人员,你肯定指定 Java 代码有很多种不同的运行方式.比如说可以在开发工具(IDEA.Eclipse等)中运行,可以双击执行 jar 文件运行,也可以在命令行中运行,甚至 ...

  5. java电商秒杀深度优化_【B0796】Java性能优化亿级流量秒杀方案及电商项目秒杀实操2020视频教程...

    Java视频教程名称:Java性能优化亿级流量秒杀方案及电商项目秒杀实操2020视频教程    java自学网[javazx.com]  性能视频教程   it教程 Java自学网收集整理 java论 ...

  6. java实验报告金陵科技学院_金陵科技学院java

    <Java语言程序设计>学生信息管理_理学_高等教育_教育专区.学生信息管理系统,金陵科技学院 <Java 语言程序设计>课程考查报告 题 目: 学生信息管理程序 学生姓名.. ...

  7. java和.net能共存吗_是否能让JAVA 和 .NET框架共存(转)

    原创作者:Ashish Banerjee 翻译整理:51DOTNET CLUB(WWW.51DOTNET.COM)SLASH 目的:对JAVA与.NET框架共存的可能性做一个评估 目标受众:JAVA程 ...

  8. java中的de是什么_【转】java中main函数解析

    源地址:http://www.cnblogs.com/xwdreamer/archive/2012/04/09/2438845.html 从写java至今,写的最多的可能就是主函数 public st ...

  9. 运行java黑窗口是什么意思_黑窗口运行java文件步骤

    误区纠正:运行java文件可以不用配置jdk环境变量,配置jdk只是为了方便运行时找到它 未配置环境变量运行java程序步骤: 1.安装jdk,在G盘下建一个java文件测试类 2.win+r 快捷键 ...

最新文章

  1. android o miui特性,终于来了,小米开启 Android O 内测
  2. Linux下C语言编程-进程的创建
  3. 聊天机器人突然火了,能解决那方面的需求吗?
  4. 网络安全不是奢侈品,而是必需品
  5. 岁月在变迁,彼此在成长。而我在流浪
  6. 嵌入式Linux系统编程学习之三十一线程的属性
  7. 保留五天的日志 php,怎样让日志在归档目录保留5天?
  8. ASP.NET 实现PDF文件下载[转]
  9. Win7部署Web网站之IIs安装篇
  10. SpringCloud之服务网关(总体第五篇)
  11. 单链表之首尾相连,成对输出
  12. 那些我离不开的 Sketch 插件
  13. C语言中关于二进制的换算
  14. 大数据框架hadoop之JobTracker主要功能分析
  15. 使用强化学习快速让AI学会玩贪食蛇游戏(轻量级二十分钟训练+代码)
  16. 【Python】两种方法计算平均值、中值、众数、方差、标准差、百分位数
  17. 产品经理在路上之二——用户/行业调研
  18. PIE IN THE SKY
  19. C++鲜为人知的符号
  20. 概率统计(一)随机事件与随机变量

热门文章

  1. C++常量、常對象、常函數辨析
  2. (已解决)关于openwrt路由器重启后zerotier的ip变化处理
  3. 2020年中国农业银行校招笔试(北京)
  4. 基因沉默(gene silencing)
  5. 金三银四,你真的懂软件测试吗?
  6. sched_setscheduler()函数
  7. openjudge 1.5.19 救援
  8. SolidWorks二次开发语法技巧及基础
  9. Qt SolidWorks 二次开发
  10. 华为OD机试 - 最多等和不相交连续子序列(Python)| 解题思路+核心知识点