No_16_0222 Java基础学习第三天

文档版本 开发工具 测试平台 工程名字 日期 作者 备注
V1.0 2016.02.22 lutianfei none

数据类型中补充的几个小问题
运算符
算术运算符
‘+’的用法
赋值运算符
关系运算符
逻辑运算符
位运算符
三目运算符
键盘录入数据
流程控制语句
顺序结构
选择结构
if语句第一种格式:
if语句第二种格式:
if语句第三种格式:


数据类型中补充的几个小问题

  • 1、在定义Long或者Float类型变量时,要加L或F。
  • 2、byte,short在定义的时候,他们接收的其实是一个int类型的值,如果值超过范围就会报错。
  • 3、对于byte类型 -128 对应2进制 10000000 这里1既是符号位又是数值位
  • 4、byte,short,char -> int -> long -> float -> double
    • long 8 byte ,float :4byte;为什么long会转为float?

      • 1、底层存储结构不同
      • 2、float表示的数据范围比long的范围要大
        • long: 2^63-1
        • float: 3.4*10^38 >2*10^38 > 2*8^38 = 2\2^3^38 = 2*2^114 > 2^63
  • 5、Java中的字符char可以存储一个中文汉字,因为java语言中的字符变量占用两个byte。
  • 6、Java语言采用的是Unicode编码。
  • 补充float存储格式

    float类型数字在计算机中用4个字节存储。遵循IEEE-754格式标准:

    一个浮点数有2部分组成:底数m和指数e

    • 底数部分 使用二进制数来表示此浮点数的实际值
    • 指数部分 占用8bit的二进制数,可表示数值范围为0-255

    但是指数可正可负,所以,IEEE规定,此处算出的次方必须减去127才是真正的指数。

    所以,float类型的指数可从-126到128

    底数部分实际是占用24bit的一个值,但是最高位始终为1,所以,最高位省去不存储,在存储中占23bit

    • 科学计数法格式:

      • SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM

        • S表示浮点数正负
        • E指数加上127后的值得二进制数据
        • M底数
    • 举例:17.625在内存中的存储
      • 首先要把17.625换算成二进制:10001.101
      • 在将10001.101右移,直到小数点前只剩1位:1.0001101 * 2^4 因为右移动了四位
      • 底数:因为小数点前必为1,所以IEEE规定只记录小数点后的就好。所以,此处的底数为:0001101
      • 指数:实际为4,必须加上127(转出的时候,减去127),所以为131。也就是10000011

        符号部分是整数,所以是0

        综上所述,17.625在内存中的存储格式是:

        01000001 10001101 00000000 00000000


运算符

  • 算术运算符
  • 赋值运算符
  • 比较运算符
  • 逻辑运算符
  • 位运算符
  • 三目运算符

算术运算符

  • 注:整数相除只能得到整数,若想得到小数,只需将任意一个数据变为浮点数。

    • eg:System.out.println(x*1.0/y);
  • ++,– :放在操作数前面,先自增或者自减,然后再参与运算。

    放在操作数后面,先参与运算,再自增或者自减。

  • 练习题1:

    int a=10,b=10,c=10

    a=b++; //a=10,b=11,c=10

    c=–a; //a=9,b=11,c=9

    b=++a; //a=10,b=10,c=9

    a=c–; //a=9,b=10,c=8

  • 练习题2:

    int x =4

    int y =(x++)+(++x)+(x*10)

    step1: 4+ (x = 5)

    step2: 4+6(x = 6)

    step3: 4+6 +(6*10)

‘+’的用法
  • 加法运算符

    • System.out.println(‘a’+1); 结果为:98
  • 正号
  • 字符串连接符
    • System.out.println(“Hello” + ‘a’ +1); 结果:helloa1
    • System.out.println(‘a’ + 1 + “Hello”);结果:98hello,第二个加号才是字符串连接符。

赋值运算符

  • 符号:

    • = , +=, -=, *=, /=, %=
    • =为基本的赋值运算符,其他的为扩展的赋值运算符
  • 面试题
    • short s=1; s = s+1; short s=1; s+=1;
    • 上面两个代码有没有问题,如果有,那里有问题

      答:第一个个有问题,因素short型变量参与运算时先转换为int,可能会有精度损失。第二个没有问题,因为扩展的赋值运算符隐含了一个强制类型转换,s+=1;不是等价于s = s+1;而是等价于 s = (s的数据类型)(s+1);

  1. \\eg: 基本运算符例子
  2. class OperatorDemo{
  3. public static void main(String[] args){
  4. int x = 10;
  5. int a,b;
  6. a = b = 10;
  7. System.out.println(a);
  8. System.out.println(b);
  9. }
  10. }

关系运算符

  • 注1:比较运算符的结果都是boolean型,也就是要么是true,要么是false。
  • 注2:比较运算符“==”不能误写成“=”。(会报错:不兼容的类型)

逻辑运算符

  • 逻辑运算符用于连接布尔型表达式,在Java中不可以写成33 & x<6 。
  • “&”和“&&”的区别:
    • 单&时,按位与!左边无论真假,右边都进行运算;
    • 双&时,逻辑与!如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。

    “|”和“||”的区别同理,双或时,左边为真,右边不参与运算。

  • 异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false。

位运算符

  • 注1: ‘~’需注意。eg:~3

    • 3的原码:00000000 00000000 00000000 00000011
    • ~3补码:11111111 11111111 11111111 11111100
    • ~3反码:11111111 11111111 11111111 11111011
    • ~3原码:10000000 00000000 00000000 00000100
    • ~3 结果为-4
  • 注2:’^’的特点:一个数据对另一个数据位异或两次,该数据不变。
  • eg:
  1. class OperatorDemo{
  2. public static void main(String[] args){
  3. int a = 10;
  4. int b = 20;
  5. System.out.println(a^b^b); //10
  6. System.out.println(a^b^a); //20
  7. }
  8. }
  • 面试题1:请自己实现两个整数变量的交换
  1. class OperatorTest{
  2. public static void main(String[] args){
  3. int a = 10;
  4. int b = 20;
  5. System.out.println("a:"+a+",b:"+b);
  6. //方式1:使用第三方变量(开发中最常用的)
  7. int c = a;
  8. a = b;
  9. b = c;
  10. //方式2:用位异或实现
  11. //结论:左边a,b,a; 右边:a^b
  12. a = a ^ b;
  13. b = a ^ b; // a^b^b = a
  14. a = a ^ b; // a^a^b = b
  15. //方式3:用变量相加的做法
  16. a = a+b; // a= 30
  17. b = a-b; // b= 10
  18. a = a-b; // a= 20
  19. 方式4:一句话搞定
  20. b = (a+b) - (a=b);
  21. }
  22. }

三目运算符

  • 格式

    • (关系表达式)?表达式1:表达式2;
    • 如果条件为true,运算后的结果是表达式1;
    • 如果条件为false,运算后的结果是表达式2;
  • 示例:
    • 获取两个数中大数。
    • int x=3,y=4,z;
    • z = (x>y)?x:y;//z变量存储的就是两个数的大数。
  • 练习2:获取三个整数中的最大值
  1. class OperatorTest{
  2. public static void main(String[] args){
  3. int a = 10;
  4. int b = 30;
  5. int c = 20;
  6. int temp = (a>b)?a:b;
  7. //System.out.println(temp);
  8. int max =(temp > c) ? temp : c;
  9. System.out.println("max is "+max);
  10. //方法2:一步搞定
  11. int max1 =(a>b) ? ((a>c) ? a : c) : ((b>c) ? b : c);
  12. }
  13. }

键盘录入数据

  • 如何实现键盘录入数据呢?(目前先记住使用)

    • 导包(位置放到class定义的上面)

      • import java.util.Scanner;
    • 创建对象
      • Scanner sc = new Scanner(System.in);
    • 接收数据
      • int x = sc.nextInt();
  1. import java.util.Scanner;
  2. class ScannerDemo{
  3. public static void main(String[] args){
  4. Scanner sc = new Scanner(System.in);
  5. System.out.println("请输入一个数据:");
  6. int x = sc.nextInt();
  7. System.out.println("你输入的数据是:"+x);
  8. }
  9. }

流程控制语句

  • 流程控制语句分类

    • 顺序结构
    • 选择结构
    • 循环结构

顺序结构

  • 顺序结构概述

    • 是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。

选择结构

  • Java语言提供了两种选择结构语句

    • if语句
    • switch语句
if语句第一种格式:
  1. if(关系表达式) {
  2. 语句体
  3. }
  • 执行流程

    • 首先判断关系表达式看其结果是true还是false
    • 如果是true就执行语句体
    • 如果是false就不执行语句体
  • 注意事项
    • 关系表达式无论简单还是复杂,结果必须是boolean类型
    • if语句控制的语句体如果是一条语句,大括号可以省略;如果是多条语句,就不能省略。建议永远不要省略。
    • 一般来说:有左大括号就没有分号,有分号就没有左大括号
if语句第二种格式:
  1. if(关系表达式) {
  2. 语句体1;
  3. }else {
  4. 语句体2;
  5. }
  • 执行流程

    • 首先判断关系表达式看其结果是true还是false
    • 如果是true就执行语句体1
    • 如果是false就执行语句体2
  • if的第二种格式和三元运算符之间的转换
    • 三元运算符的操作都可以使用if语句改进,反之不成立
    • 什么时候不成立呢?
      • 当if语句控制的语句体是一条输出语句的时候,就不成立。因为三元运算符是一个运算符,必须要求有一个结果返回。而输出语句却不能作为一个返回结果。
  • eg:
  1. //判断一个数据是奇数还是偶数,并输出是奇数还是偶数
  2. if(x%2 == 0){
  3. System.out.println("X is even");
  4. }
  5. else{
  6. System.out.println("X is odd");
  7. }
if语句第三种格式:
  1. if(关系表达式1) {
  2. 语句体1;
  3. }else if (关系表达式2) {
  4. 语句体2;
  5. }
  6. else {
  7. 语句体n+1;
  8. }
  • if语句的使用场景:

    • A:针对表达式是一个boolean类型的判断
    • B:针对一个范围的判断

来自为知笔记(Wiz)

时间: 2024-08-07 04:15:17

No_16_0222 Java基础学习第三天的相关文章

JAVA基础学习-集合三-Map、HashMap,TreeMap与常用API

一.Map简述 1.1.简述 public interface Map<K,V> 类型参数: K - 此映射所维护的键的类型 key V - 映射值的类型 value 该集合提供键--值的映射.key不能重复,一对对的存储方式 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值. 1.2.方法 嵌套类摘要 static interface Map.Entry<K,V> 映射项(键-值对). 方法摘要 void clear() 从此映射中移除所有映射关系(可选操

Java基础学习(三)——面向对象思想

学习Java,就离不开学习面向对象的编程思想.Java语言是纯粹的面向对象的程序设计语言,这主要表现为Java完全支持面向对象的三种基本特征: 封装(encapsulation) 继承(inheritance) 多态(polymorphism) Java语言完全以对象为中心,Java程序的最小程序单位是类,整个Java程序由一个一个的类组成. 万物皆对象 “面向对象”(英语:Object Oriented,简称OO)是一种以事物为中心的编程思想. 面向对象程序设计(英语:Object-orien

Java基础学习笔记三 Java基础语法

Scanner类 Scanner类属于引用数据类型,先了解下引用数据类型. 引用数据类型的使用 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式. 数据类型 变量名 = new 数据类型(); 每种引用数据类型都有其功能,我们可以调用该类型实例使用其功能. 变量名.方法名(); Scanner类 Scanner类可以完成用户键盘录入,获取到录入的数据. Scanner使用步骤: 导包: import java.util.Scanner; 创建对象实例:Scann

Java基础学习第三天——运算符与流程控制语句

文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 2016.02.22 lutianfei none 运算符 算术运算符 赋值运算符 比较运算符 逻辑运算符 位运算符 三目运算符 算术运算符 * 注:整数相除只能得到整数,若想得到小数,只需将任意一个数据变为浮点数. * eg:System.out.println(x*1.0/y); ++,– : 放在操作数前面,先自增或者自减,然后再参与运算. 放在操作数后面,先参与运算,再自增或者自减. 练习题1: int a=10,b=1

Java基础学习(三)

面向对象编程(OOP)的三大特征 什么是封装? (1) 把对象的状态和行为看成一个统一的整体,将二者存放在一个独立的类中; (2) "信息隐藏", 把不需要让外界知道的信息隐藏起来,向外提供统一的方法用于设置和读取属性,保证外界安全访问功能;  把所有的字段使用private私有化,不准外界访问,把方法使用public修饰,允许外界访问. [注意]除了属性的封装,将需要重复使用的代码提取到方法中,这叫方法的封装.将相同的是属性和方法提取到一个类中也称为封住. 实现访问控制,限制属性访问

java基础学习第三天

数组 ---------------------------------------- 1.容器,相同类型 2.通过下标,以0为基址 3.定义数组 类型[] 名称 = new 类型 [元素个数或数组长度]; int [] arr = new int[5] 类型[] 名称 = new 类型 []{元数,元素,元素,....};直接进行了初始化 4. 5. 6. 7.使用数组时,不要空.不要越界 堆:heap ---------------------- Object head,对象堆 栈:stac

Java基础学习(三)多线程基础【面试题形式】

1.多线程和单线程的区别和联系? 在单核 CPU 中,将 CPU 分为很小的时间片,在每一时刻只能有一个线程在执行,是一种微观上轮流占用 CPU 的机制. 多线程会存在线程上下文切换,会导致程序执行速度变慢,即采用一个拥有两个线程的进程执行所需要的时间比一个线程的进程执行两次所需要的时间要多一些. 结论:即采用多线程不会提高程序的执行速度,反而会降低速度,但是对于用户来说,可以减少用户的响应时间. 2.多线程的优势? (1)资源利用率更好 想象一下,一个应用程序需要从本地文件系统中读取和处理文件

Java基础学习总结——Java对象的序列化和反序列化

一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中: 2) 在网络上传送对象的字节序列. 在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存.比如最常见的是Web服务器中的Session对象,当有 10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,于是Web容器就会把一些s

java基础学习总结——java环境变量配置(转)

java基础学习总结——java环境变量配置 前言 学习java的第一步就要搭建java的学习环境,首先是要安装 JDK,JDK安装好之后,还需要在电脑上配置"JAVA_HOME”."path”."classpath"这三个环境变量才能够把java的开发环境 搭建好.在没安装过jdk的环境下,path环境变量是系统变量,本来存在的,而JAVA_HOME和classpath是不存在的. 一.配置JAVA_HOME变量 操作步骤(win7系统):计算机→右键“属性”→高