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
    }
}
复制代码

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

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

posted @   yi0123  阅读(422)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示