• JavaSE学习笔记(一)—— 数据、数值类型


    一、关键字

      关键字:被java语言赋予特定含义的单词。

      特点:组成关键字单词的字母全部小写。

      注意:

        A:goto和const是保留字
        B:类似于Notepad++这样的高级记事本,针对关键字都有特殊的颜色标记。

    二、标识符

    2.1 标识符介绍

      标识符:就是给类,接口,方法,变量等起名字。

      组成规则:
        A:英文字母大小写
        B:数字字符
        C:$和_

    //正确做法
    int x = 100;

      注意事项:
        A:不能以数字开头
        B:不能是Java中的关键字
        C:Java语言严格区分大小写

    //不能以数字开头
    //int 1y = 100;
    int y1 = 100;
    
    //不能是Java中的关键字
    //int public = 100;
    int Public = 100;

    2.2 常见的命名规则

      命名规则要做到“见名知意”,比如:我要定义一个学生类class Student {}

    【包】

      其实就是文件夹,用于把相同的类名进行区分,要求全部小写。

      单级包:test

      多级包:com.baidu

    【类或者接口】

      一个单词:单词的首字母必须大写
        举例:Student,Dog
      多个单词:每个单词的首字母必须大写
        举例:HelloWorld,StudentName

    【方法或者变量】

      一个单词:单词的首字母小写
        举例:main,age
      多个单词:从第二个单词开始,每个单词的首字母大写
        举例:studentAge,showAllNames()

    【常量】

      一个单词:全部大写
        举例:PI
      多个单词:每个字母都大写,用_隔开
        举例:STUDENT_MAX_AGE

    三、注释

    【概述】

      注释:用于解释说明程序的文字
      Java中注释的分类及格式
      单行注释://
      多行注释:/* */  (注意:多行不可以嵌套使用,而单行是可以的)
      文档注释:被javadoc工具解析生成一个说明书

    【作用】

      A:解释说明程序,提高程序的阅读性
      B:可以帮助我们调试程序。

      注释是一个程序员必须要具有的良好编程习惯。初学者编写程序可以养成习惯:先写注释再写代码。将自己的思想通过注释先整理出来,再用代码去体现。因为代码仅仅是思想的一种体现形式而已。

    /*
        需求:我准备写一个java程序,把"HelloWorld"这句话输出在控制台
        
        分析:
            A:要写一个Java程序,必须定义类
            B:把数据能够输出,说明我们的程序是可以独立运行的,而程序要独立运行,必须定义main方法
            C:把数据输出在控制台,必须使用输出语句
            
        实现:
            A:java语言提供了一个关键字:class用来定义类,后面跟的是类名
            B:main方法的格式是固定的:
                public static void main(String[] args) {
                
                }
            C:输出语句的格式是固定的:
                System.out.println("HelloWorld");
                "HelloWorld"这个内容是可以改变的
    */
    
    //这是我的HelloWorld案例
    class HelloWorld {
        /*
            为了程序能够独立运行,定义main方法
            main方法是程序的入口
            被jvm自动调用
        */
        public static void main(String[] args) {
            //为了把数据显示在控制台,我们就使用了输出语句
            System.out.println("HelloWorld");
        }
    }

    三、常量

    【概述】

      在程序执行过程中,其值不发生改变的量。

    【分类】

      A:字面值常量
      B:自定义常量

    【字面值常量】

      A:字符串常量:用双引号括起来的内容。
        举例:"hello","world","HelloWorld"
      B:整数常量:所有的整数
        举例:100,200
      C:小数常量:所有的小数
        举例:10.23,110.11
      D:字符常量:用单引号括起来的内容
        举例:'a','A','0'
        错误的:'ab'
      E:布尔常量:比较特殊
        举例:true,false
      F:空常量 
        举例:null  

    【自定义常量】

      被final关键字修饰的变量就变成了变量,只能被赋值一次。如final int x = 10;

      在Java中针对整数常量提供了四种表现形式

    • 二进制 由0,1组成。以0b开头。
    • 八进制 由0,1,...7组成。以0开头。
    • 十进制 由0,1,...9组成。整数默认是十进制。
    • 十六进制 由0,1,...9,a,b,c,d,e,f(大小写均可)组成。以0x开头。
    public class JinZhiDemo {
        public static void main(String[] args) {
            System.out.println(100); //十进制
    
            System.out.println(0b100); //二进制,结果为:4
            System.out.println(0100); //八进制,结果为:64
            System.out.println(0x100); //十六进制,结果为256
        }
    }

    四、进制转换

    4.1 进制概述

      进制:是一种进位的方式。x进制,表示逢x进1.

      计算机的电子原件的状态:开,关。

      那么我们表达数据的时候,也是按照开,关的状态来表示的。

      

      如果我们表达数据仅仅用这两种状态,那么能够表达的数据是比较少的,而我们常见的数据:英文字母、数字、标点符号等。两个状态肯定是不够的。

      为了能够表示更多的数据,国际化标准组织就规定:用8个这样的信号来表示一个数据,这个数据的单位叫:字节。

      后来,我们就通过数字1,0分别来表示开和关。

      这个时候,我们把上面的数据用1,0改进。

      由这样的1,0组成的数据就是二进制数据。

    1byte=8bit
    1k=1024byte
    1m=1024k
    1g=1024m
    1t=1024g

      但是,用二进制表达数据的表现形式有点长,所以我们就要简化一下。如何简化呢?

      把二进制的数据,从右开始,每三位一组合,最左边不够的时候,补0。然后分别计算出对应的十进制数值,最后,再把每个十进制的数据组合起来,就是一个八进制数据。

      这种表现形式还不是最简单的,我们还有更简单的。

      把二进制的数据,从右开始,每四位一组合,最左边不够的时候,补0。然后分别计算出对应的十进制数值。最后再把每个十进制的数据组合起来,就是一个十六进制数据。

      规则:进制越大,表现形式越短

    4.2 任意进制到十进制的转换

      

      得到下面数据的十进制值:
      0b10101
        =1*2^4 + 1*2^2 + 1*2^0
        =16 + 4 + 1
        =21

      0123
        =1*8^2 + 2*8^1 + 3*8^0
        =64 + 16 + 3
        =83
      0x3c
        =3*16^1 + c*16^0
        =48 + 12

    4.3 十进制到任意进制的转换

      除基取余,直到商为0,余数反转。

      52分别得到二进制,十进制,十六进制

      得到二进制:
        52 / 2 = 26 0
        26 / 2 = 13 0
        13 / 2 = 6 1
        6 / 2 = 3 0
        3 / 2 = 1 1
        1 / 2 = 0 1

        0b110100

      得到八进制:
        52 / 8 = 6 4
        6 / 8 = 0 6

        064

      得到十六进制:
        52 / 16 = 3 4
        3 / 16 = 0 3

        0x34

    4.3 快速的进制转换法

      8421码,是bcd码的一种。

      它表达的意思是每一个二进制位上的数据对应一个固定的值,只需要把对应的1位置的数据值给相加,即可得到该二进制对应的十进制的值。

     

      

    4.4 原码反码补码

      有符号数据的表示法:原码、反码、补码。

      为什么讲解这个知识点呢?因为计算机在操作的时候,都是采用数据对应的二进制的补码来计算的。

      用原码、反码、补码来分别表示+7和-7

      首先我们得到7的二进制:111

      

      

      补充:已知某数X的原码为10110100B,试求X的补码和反码。

      

      已知某数X的补码11101110B,试求其原码。

      

    五、变量

    【什么是变量】

      变量就是在程序的执行过程中,其值是可以在一定范围内发生改变的量。(如同数学中的未知数)

    【变量的组成规则】

      A:必须对其进行限定。如何限定呢?用数据类型。

      B:我们在运算的时候,不可能是拿着这个空间去运算,我们真正运算时使用的是该空间中的值,我们就给该空间起了一个名字:变量名。

      C:即使你有数据类型了,你有变量名了,但是如果没有值,这个空间是一个垃圾空间,没有任何意义,所以要初始化值。

    【定义变量的格式】

      数据类型  变量名 = 初始化值

    【使用变量的时候要注意的问题】

    • 作用域:变量定义在哪个大括号内,它就在这个大括号内有效。并且,在同一个大括号内不能同时定义同名的变量。
    • 初始化值:没有初始化值的变量不能直接使用。你只要在使用前给值就行,不一定非要在定义的时候立即给值。推荐在定义的时候给值。
      定义变量的格式:
          a:数据类型 变量名 = 初始化值;
          b:数据类型 变量名;
            变量名 = 初始化值;
    • 在一行上建议只定义一个变量。可以定义多个,但是不建议
    class DataTypeDemo{
        public static void main(String[] args) {
            //定义变量
            int x = 100;
            
            //错误,不能有同名的
            //int x = 200;
            
            //定义变量必须给值
            //int y;
            //System.out.println(y);
            
            int z;
            z = 100;
            System.out.println(z);
            
            //在一行上定义多个变量
            //int a = 10; int b = 20; int c  = 30;
            //上面的写法可以,但是不建议。
            int a = 10; 
            int b = 20; 
            int c  = 30;
            
            //int d, e;
            //d = 40;
            //e = 50;
            
            //int f,int g; //错误
            //int h; int i; //正确
        }
    }

    六、数据类型

    6.1 数据类型介绍

      Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存总分配了不同大小的内存空间。

      

      

    【注意】
      整数默认是int类型;浮点数默认是double类型。
      长整型后缀用L或者l标记。建议使用L。
      单精度浮点数用F或者f标记。建议使用F。

    class DataTypeDemo {
        public static void main(String[] args) {
            //定义变量的格式:
            //数据类型 变量名 = 初始化值;
            
            //定义一个字节变量
            byte b = 10;
            System.out.println(10);
            System.out.println(b);
            
            //定义一个短整型变量
            short s = 100;
            System.out.println(s);
            
            //定义一个整型变量
            int i = 1000;
            System.out.println(i);
            
            //超过了int的范围
            //int j = 1000000000000;
            long j = 1000000000000L;
            //long j = 100L;
            System.out.println(j);
            
            //定义浮点数据变量
            float f = 12.345F;
            System.out.println(f);
            
            double d = 12.345;
            System.out.println(d);
            
            //定义字符变量
            char ch = 'a';
            System.out.println(ch);
            
            //定义布尔变量
            boolean flag = true;
            System.out.println(flag);
        }
    }

    6.2 默认转换

      byte,short,char—int—long—float—double

    只要是byte,short,char参与运算,它们都会先转换为int类型。
    long占8个字节,float占4个字节,为什么会先转换为long类型?因为它们底层的存储结构不同,且float表示的数据范围比long的范围更大 

      byte,short,char相互之间不转换,他们参与运算首先转换为int类型。

    //定义一个byte类型,一个int类型,做加法
    byte a = 3;
    int b = 4;
    System.out.println(a + b);
    
    //可能损失精度
    //byte c =  a + b;
    int c = a + b;
    System.out.println(c);

      注意:boolean类型不能转换为其他的数据类型

    6.3 强制转换

    【强制转换】
      从大的数据类型到小的数据类型。
    【格式】
      目标数据类型 变量 = (目标数据类型) (被转换的数据);
    【注意】
      不要随意的去使用强制转换,因为它隐含了精度损失问题。

    byte a = 3;
    int b = 4;
    
    //这个肯定没有问题
    //int c = a + b;
    
    //byte c = 7;
    //这个是有问题的
    //byte c = a + b; 
    //用强制类型转换改进
    byte c = (byte) (a + b);
    System.out.println(c);

     

    思考题1:请问下面这个有没有问题

      double d = 12.345;
      float f = d;

    //把double赋值给float,加了强制类型转换
    double d = 12.345;
    float f = (float)d;

    思考题2:看看下面两个定义有没有区别呢?

    float f1 = (float)12.345;
    float f2 = 12.345F;

      f1其实是通过一个double类型转换过来的。
      而f2本身就是一个float类型。建议用这种表示。

    思考题3

    byte b1=3,b2=4,b;
    b=b1+b2;
    b=3+4;

      哪句是编译失败的呢?为什么呢?

      b = b1 + b2;是有问题的。两个byte类型相加,首先会转换为int类型,将int类型转为byte类型就会出问题。
      因为变量相加,会首先看类型问题,最终把结果赋值的也会考虑类型问题。
      常量相加,首先做加法,然后看结果是否在赋值的数据类型范围内,如果不是,才报错。

    思考题4

      byte b = 130;有没有问题?如果我想让赋值正确,可以怎么做?结果是多少呢?

    //因为byte的范围是:-128到127。
    //而130不在此范围内,所以报错。
    //byte b = 130; 
    
    //我们可以使用强制类型转换
    byte b = (byte) 130;
    
    //结果是多少呢?-126
    System.out.println(b);

     分析过程:

      我们要想知道结果是什么,就应该知道是如何进行计算的。而我们又知道计算机中数据的运算都是补码进行的。而要得到补码,首先要计算出数据的二进制。

      A:获取130这个数据的二进制。
        00000000 00000000 00000000 10000010
        这是130的原码,也是反码,还是补码。
      B:做截取操作,截成byte类型的了。
        10000010
        这个结果是补码。
      C:已知补码求原码。
           符号位       数值位
      补码: 1             0000010
      反码: 1             0000001
      原码: 1             1111110

    6.4 看程序写结果

    【字符和整数相加】

    class DataTypeDemo8 {
        public static void main(String[] args) {
            //直接输出一个字符
            System.out.println('a'); //a
            //输出一个字符和一个整数做加法
            System.out.println('a'+1); //98
        }
    }

       通过字符和一个整数相加,我们给出一张表:ASCII码表。

      通过看完这张表以后,我们要记住三个值:
        'a' 97
        'A' 65
        '0' 48

    【字符串和其它数据相加】

    class DataTypeDemo9 {
        public static void main(String[] args) {
            System.out.println("hello"+'a'+1); //helloa1
            System.out.println('a'+1+"hello"); //98hello
            
            System.out.println("5+5="+5+5); //5+5=55
            System.out.println(5+5+"=5+5"); //10=5+5
        }
    }

       字符串数据和其他数据做+,结果是字符串类型。

      这里的+不是加法运算,而是字符串连接符。

  • 相关阅读:
    软件工程 团队开发(2)
    软件工程 团队开发(1)
    大道至简阅读笔记01
    小工具集合用户模板和用户场景
    人月神话阅读笔记03
    人月神话阅读笔记02
    本周java学习
    本周学习总结
    本周java 学习进度报告
    《构建之法》读后感
  • 原文地址:https://www.cnblogs.com/yft-javaNotes/p/10769575.html
Copyright © 2020-2023  润新知