• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

索静丨LLH

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

Java-数据类型

第二章 Java数据类型

标识符

【1】标识符:读音   biao zhi fu

【2】什么是标识符? 

  包,类,变量,方法.....等等,只要是起名字的地方,那个名字就是标识符

【3】标识符定义规则:

1.四个可以(组成部分):数字,字母,下划线_,美元符号$

注意:字母概念比较宽泛,指的是英文字母,汉字,日语,俄语......

但是我们一般起名字尽量使用英文字母

2.两个不可以:不可以以数字开头,不可以使用java中的关键字

3.见名知意:增加可读性

4.大小写敏感:  int a ;  int A;

5.遵照驼峰命名:

  类名:首字母大写,其余遵循驼峰命名

     方法名,变量名:首字母小写,其余遵循驼峰命名

     包名:全部小写,不遵循驼峰命名

6.长度无限制,但是不建议太长  asdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasfd

 

关键字

关键字:被JAVA语言赋予了特殊含义,用作专门用途的单词

特点:JAVA中所有关键字都为小写

官网:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html

 

 

变量和常量

举例:

丽丽的年龄:去年17岁,今年18岁,明年19岁

年龄:17--》18---》19  --》值不断变化  

 

年龄---》变量

常量:  17  ,  18  ,  19    ----》 常量中的字面常量 

 

字面常量

常量分为两种:

常量通常指的是一个固定的值,例如:1、2、3、’a’、’b’、true、false、”helloWorld”等。

在Java语言中,主要是利用关键字final来定义一个常量。 常量一旦被初始化后不能再更改其值。

为了更好的区分和表述,一般将1、2、3、’a’、’b’、true、false、”helloWorld”等称为字面常量,而使用final修饰的PI等称为符号常量(字符常量)。

 

 

字面常量的类型:

 

注意:逻辑常量就两个值,一个是true,一个是false

 

变量

变量本质上就是代表一个”可操作的存储空间”,空间位置是确定的,但是里面放置什么值不确定。我们可通过变量名来访问“对应的存储空间”,从而操纵这个“存储空间”存储的值。Java是一种强类型语言,每个变量都必须声明其数据类型。变量的数据类型决定了变量占据存储空间的大小。 比如,int a=3; 表示a变量的空间大小为4个字节。变量作为程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。变量在使用前必须对其声明, 只有在变量声明以后,才能为其分配相应长度的存储空间。

 

【1】变量声明格式:

type  varName [=value][,varName[=value]...]; //[ ]中的内容为可选项,即可有可无

数据类型  变量名  [=初始值] [,变量名  [=初始值]…];

案例:

int     age   = 19 , age2 = 90  ;

int  age,age2;

【2】变量的声明:

(1)如果你只定义一个变量,没有给变量进行赋值的话,那么其实这个变量相当于没有定义:

  

(2)变量如果没有进行赋值的话,那么使用的时候会出错,告诉你:尚未初始化变量:

  

【3】变量的赋值:

  

我们自己定义的时候直接就可以用一句话定义:

int age = 10;

变量的值可以更改:

1.  public class TestVar01{
2.          public static void main(String[] args){
3.                  //变量的声明(定义变量)(以年龄为案例讲解)
4.                  //java是一个强类型的语言,只要声明变量就必须定义类型:定义整数类型
5.                  int age ; //定义一个整数类型的变量,变量名字为age 
6.                  //对变量进行赋值操作:
7.                  age = 10; //变量名字为age,具体的值为10 
8.                  age = 12;
9.                  age = 20;
10.                age = age + 4;
11.                age = 9;
12.                age = 9;
13.                System.out.println(age);
14.                
15.        }
16.}

 

变量不可以重复定义:

  

【4】变量的使用:

1.  public class TestVar01{
2.          public static void main(String[] args){
3.                  //变量的声明(定义变量)(以年龄为案例讲解)
4.                  //java是一个强类型的语言,只要声明变量就必须定义类型:定义整数类型
5.                  int age ; //定义一个整数类型的变量,变量名字为age 
6.                  //对变量进行赋值操作:
7.                  age = 10; //变量名字为age,具体的值为10 
8.                  age = 12;
9.                  age = 20;
10.                age = age + 4;
11.                age = 9;
12.                age = 9;
13.                System.out.println(age);
14.                System.out.println(age-2);
15.                System.out.println(age+10);
16.                int num = age + 66;
17.                System.out.println(num);
18.                
19.        }
20.}

扩展:

1.  public class TestVar02{
2.          public static void main(String[] args){
3.                  int a = 10;
4.                  int b = 20;
5.                  int c = a + b ;
6.          }
7.  }

现在对上述代码进行“反编译过程”“反汇编过程”

 

 

 

【5】变量的内存:

  

【6】习题:

1.  public class TestVar03{
2.          public static void main(String[] args){
3.                  int num1 = 10;
4.                  int num2 = 20;
5.                  num1 = num2;
6.                  num2 = num2 + 10;
7.                  num1 = num2 - 10;
8.                  num2 = num1;
9.                  System.out.println("num1="+num1);
10.                System.out.println("num2="+num2);
11.        }
12.}

内存分析:

 

结果:

  

【7】变量的作用域:

作用域指的就是作用范围,变量在什么范围中有效

作用范围就是离它最近的{}

备注:一会我们写的代码,不要去运行,会出错

1.  /*
2.  局部变量:定义在方法中
3.  成员变量:定义在类中,方法外
4.  */
5.  public class TestVar04{
6.          int b = 20;
7.          public static void main(String[] args){
8.                  System.out.println(a);//no
9.                  int a = 10;
10.                System.out.println(a);//yes
11.                System.out.println(b);//yes
12.                {
13.                        int c = 40;
14.                        System.out.println(c);//yes
15.                        int a = 50;//属于变量的重复定义
16.                }
17.                System.out.println(c);//no
18.        }
19.        
20.        public void eat(){
21.                System.out.println(b);//yes
22.                System.out.println(a);//no
23.                int a = 30;//不是变量的重复定义
24.                System.out.println(a);//yes
25.        }
26.}

 

基本数据类型

Java是一种强类型语言,每个变量都必须声明其数据类型。 

Java的数据类型可分为两大类:基本数据类型(primitive data type)和引用数据类型(reference data type)。

 

PS:巧妙记忆:除了基本数据类型以外的所有类型都属于引用数据类型,本章重点:基本数据类型

整数类型
整数类型常量

十进制整数,如:99, -500, 0

八进制整数,要求以 0 开头,如:015

十六进制数,要求 0x 或 0X 开头,如:0x15

二进制:要求0b或者0B开头,如:0b11

 

几进制:就是逢几进1的问题:

平时实际生活中用的最多的是:十进制

计算机用二进制最多

 

扩展:进制转换问题

【1】二进制转换为十进制:

二进制: 1101

    1*2^3  +   1*2^2   +  0*2^1  +     1*2^0

=    8         +      4       +     0       +      1

=  13 

【2】十进制转换为二进制:

十进制  13   

  

【3】八进制转换十进制:

八进制: 16

 

1*8^1 +   6*8^0

=   8     +  6

=14

 

 

【4】十进制转换为八进制:

十进制14:

  

【5】八进制转换为十六进制:

 

把十进制当做一个中转站:

八进制---》十进制---》十六进制

 

实际上根本不用自己转换这么麻烦:我们可以直接用系统中提供给我们的计算器:

  

整数类型变量

整型数据类型:

  

比如:byte的右侧表数范围127怎么算出来的?

byte: 1字节 =  8位 

二进制:01111111

   1*2^6  + 1*2^5  +  1*2^4 + 1*2^3  + 1*2^2 +   1*2^1 +   1*2^0

= 64     +     32       +     16      +8         +4             +    2       +1

= 127

 

 

代码:

1.  public class TestVar05{
2.          public static void main(String[] args){
3.                  //定义整数类型的变量:
4.                  //给变量赋值的时候,值可以为不同进制的:
5.                  int num1 = 12 ;//默认情况下赋值就是十进制的情况
6.                  System.out.println(num1);
7.                  int num2 = 012;//前面加上0,这个值就是八进制的
8.                  System.out.println(num2);
9.                  int num3 = 0x12;//前面加上0x或者0X,这个值就是十六进制的
10.                System.out.println(num3);
11.                int num4 = 0b10;//前面加上0b或者0B,这个值就是二进制的
12.                System.out.println(num4);
13.                
14.                //定义byte类型的变量:
15.                byte b = 126;//定义了一个byte类型的变量,名字叫b,赋值为12
16.                System.out.println(b);
17.                //注意:超范围的赋值会报错。
18.                short s = 30000;
19.                System.out.println(s);
20.                int i = 1234;
21.                System.out.println(i);
22.                //整数类型默认就是int类型的,所以12345678910是一个int类型的数,对于int类型来说,它超出范围了
23.                //要想把一个数给long类型变量,那么后面加上L(推荐)或者l就可以了
24.                long num5 = 12345678910L;
25.                System.out.println(num5);
26.                //注意:只有这个数超出int类型的范围了后面才需要加上L,否则无需加L也可以赋值给long类型:
27.                long num6 = 12;
28.                System.out.println(num6);
29.                
30.        }
31.}

 

浮点类型
浮点类型常量

(1)十进制数形式,例如:                              

3.14       314.0      0.314

(2)科学记数法形式,如

314e2      314E2 (E的大小写没有区分)    314E-2

double  f = 314e2;  //314*10^2-->31400.0

double  f2 = 314e-2; //314*10^(-2)-->3.14

 

浮点类型变量

float类型又被称作单精度类型,尾数可以精确到7位有效数字,在很多情况下,float类型的精度很难满足需求。

而double表示这种类型的数值精度约是float类型的两倍,又被称作双精度类型,绝大部分应用程序都采用double类型。

float类型的数值有一个后缀F或者f ,没有后缀F/f的浮点数值默认为double类型。

也可以在浮点数值后添加后缀D或者d, 以明确其为double类型。

 

PS:有效数字指的是从左开始第一个不为0的数到最后一个数

 

代码:

1.  public class TestVar06{
2.          public static void main(String[] args){
3.                  //浮点类型的常量有两种形式:
4.                  //十进制形式:
5.                  double num1 = 3.14;
6.                  System.out.println(num1);
7.                  //科学计数法形式:
8.                  double num2 = 314E-2;
9.                  System.out.println(num2);
10.                
11.                //浮点类型的变量:
12.                //注意:浮点型默认是double类型的,要想将一个double类型的数赋给float类型,必须后面加上F或者f
13.                float f1 = 3.14234567898623F;
14.                System.out.println(f1);
15.                //注意:double类型后面可以加D或者d,但是一般我们都省略不写
16.                double d1 = 3.14234567898623D;
17.                System.out.println(d1);
18.                
19.                //注意:我们最好不要进行浮点类型的比较:
20.                float f2 = 0.3F;
21.                double d2 = 0.3;
22.                System.out.println(f2==d2);
23.                /*
24.                区别:
25.                = 赋值运算:  将等号右侧的值赋给等号左侧
26.                == 判断==左右两侧的值是否相等  :结果要么相等 要么不相等
27.                ==运算符的结果就是要么是true,要么是false
28.                */
29.                
30.        }
31.}

 

字符类型

【1】Java中使用单引号来表示字符常量,字符型在内存中占2个字节。

char 类型用来表示在Unicode编码表中的字符。Unicode编码被设计用来处理各种语言的文字,它占2个字节,可允许有65536个字符。

 

【2】转义字符:

  

【3】ASCII表:

 

【4】Unicode编码表:

https://www.cnblogs.com/csguo/p/7401874.html

 

代码1:

1.  public class TestVar07{
2.          public static void main(String[] args){
3.                  //定义字符类型的变量:
4.                  char ch1 = 'a';
5.                  System.out.println(ch1);
6.                  char ch2 = 'A';
7.                  System.out.println(ch2);
8.                  char ch3 = '4';
9.                  System.out.println(ch3);
10.                char ch4 = '中';
11.                System.out.println(ch4);
12.                char ch5 = '?';
13.                System.out.println(ch5);
14.                //java中无论:字母,数字,符号,中文都是字符类型的常量,都占用2个字节。
15.                char ch6 = ' ';
16.                System.out.println(ch6);
17.                //字符类型:单引号引起来的单个字符
18.                System.out.println("--------------------------------");
19.                /*
20.                转义字符:
21.                \将后面的普通字符转换为特殊含义
22.                */
23.                char ch7 = '\n';
24.                System.out.println("aaa"+ch7+"bbb");
25.                
26.                System.out.println("aaa\nbbb");// \n  换行
27.                
28.                System.out.println("aaaaaaa\tbbb");  //  \t  制表符
29.                
30.                System.out.println("aaa\bbbb");//aabbb  \b  向前退一格
31.                System.out.println("aaa\rbbb");//bbb   \r 将光标到本行开头 :回车
32.                
33.                System.out.println("\"java\""); // \" 将双引号原样输出  \' 将单引号原样输出 \\ 将\原样输出
34.        }
35.}

 

代码2:

1.  public class TestVar08{
2.          public static void main(String[] args){
3.                  char ch1 = 'A';
4.                  System.out.println(ch1);//A
5.                  System.out.println(ch1+90);//155
6.                  System.out.println(155-ch1);//90
7.                  //char类型我们看到的样子就是它本身的字面常量,但是底层在进行计算的时候,实际上是按照一个码进行计算的。
8.                  //这个码就是ASCII
9.                  //之前说char类型是按照Unicode码表进行存储的 (Unicode兼容了ASCII码,Unicode的前128位置ASCII)
10.                
11.                char ch2 = '中';
12.                System.out.println(ch2);// 中
13.                System.out.println(ch2+90);// 20103
14.                System.out.println(20103-ch2);// 90
15.                
16.                //转换:
17.                int num1 = (int)ch2;
18.                System.out.println(num1);//20013
19.                
20.                char ch = (char)20013;
21.                System.out.println(ch);
22.                
23.                int num2 = '中';
24.                char ch5 = 20013;
25.                System.out.println(ch5);
26.                
27.                //面试题:
28.                char ch6 = '2'+2;
29.                System.out.println(ch6);//'4'--->4
30.        }
31.}

 

编码和字符集

【1】什么是编码?

 

【2】通过生活案例:

 

【3】由权威机构形成的编码表才可以称之为:字符集

  • ASCII

          英文字符集    

          用一个字节的7位表示

  • IOS8859-1

          西欧字符集

          用一个字节的8位表示

  • GB2312

          简体中文字符集

          最多使用两个字节编码

PS:中文:2个字节

GB2312兼容了ASCII中的字符:

  • GBK

          GB2312的升级,加入了繁体字

          最多使用两个字节编码

疑问:

 

首位如果是0:一个字节代码代表一个字符

首位如果是1:那么一个字节不够,要加上后面的字节才能完整的表示一个字符。

  • Unicode

           国际通用字符集,融合了目前人类使用的所有字符。为每个字符分配唯一的字符码。

退出了UTF标准:

三种编码方案:  UTF-8,UTF-16,UTF-32 



以UTF-8为案例讲解:

中文: 珊     ---》Unicode  : 29642

 

 

 

底层存储:

 

UTF-8标准最多可以用6个字节表示:

  

以后我们用的最多的就是UTF-8.

 

解释乱码问题

 

用记事本选择编码方法的时候一般要选择为ANSI---》获取当前操作系统的编码格式:GBK

 

布尔类型

boolean类型有两个常量值,true和false,在内存中占一位(不是一个字节),不可以使用 0 或非 0 的整数替代 true 和 false ,这点和C语言不同。 boolean 类型用来判断逻辑条件,一般用于程序流程控制 。

1.  public class TestVar09{
2.          public static void main(String[] args){
3.                  //创建一个布尔类型的变量:
4.                  boolean flag1 = true;
5.                  System.out.println(flag1);
6.                  boolean flag2 = false;
7.                  System.out.println(flag2);
8.                  boolean flag3 = 5==9;
9.                  System.out.println(flag3);
10.                boolean flag4 = 5<9;
11.                System.out.println(flag4);
12.        }
13.}

 

基本数据类型的转换

【1】什么是类型转换:

在赋值运算或者算数运算的时候,要求数据类型一致,就要进行类型的转换。

 

【2】类型转换的种类:

自动转换,强制转换

【3】内存演示:

 

【4】代码:

1.  public class TestVar10{
2.          public static void main(String[] args){
3.                  //类型转换的两种形式:
4.                  double d = 6;//int-->double  自动类型转换
5.                  System.out.println(d);
6.                  int i = (int)6.5;//double--->int  强制类型转换 (强转)
7.                  System.out.println(i);
8.                  
9.                  //在同一个表达式中,有多个数据类型的时候,应该如何处理:
10.                //多种数据类型参与运算的时候,整数类型,浮点类型,字符类型都可以参与运算,唯独布尔类型不可以参与运算。
11.                //double d2 = 12+1294L+8.5F+3.81+'a'+true;
12.                double d2 = 12+1294L+8.5F+3.81+'a';
13.                System.out.println(d2);
14.                /*
15.                类型级别:(从低到高的)
16.                byte,short,char-->int--->long--->float--->double
17.                级别用来做什么?当一个表达式中有多种数据类型的时候,要找出当前表达式中级别最高的那个类型,然后
18.                其余的类型都转换为当前表达式中级别最高的类型进行计算。
19.                double d2 = 12+1294L+8.5F+3.81+'a';
20.                          = 12.0+1294.0+8.5+3.81+97.0
21.                */
22.                int i2 = (int)(12+1294L+8.5F+3.81+'a');
23.                System.out.println(i2);
24.                /*
25.                在进行运算的时候:
26.                左=右  : 直接赋值
27.                左<右  :强转
28.                左>右  :直接自动转换
29.                */
30.                
31.                //以下情况属于特殊情形:对于byte,short,char类型来说,只要在他们的表数范围中,赋值的时候就不需要进行
32.                //强转了直接赋值即可。
33.                byte b = 12;
34.                System.out.println(b);
35.                byte b2 = (byte)270;
36.                System.out.println(b2);
37.                
38.                
39.                
40.        }
41.}

 

练习:final,字符常量,Scanner的使用
1.  import java.util.Scanner;//形象理解:在java.util下将Scanner拿过来用
2.  public class TestVar11{
3.          public static void main(String[] args){
4.                  //实现功能:求圆的周长和面积
5.                  //【1】提取变量:提取变量,就是为了一劳永逸,以后只要改变变量的值,下面只要用到这个变量的地方,取值也都发生变化了
6.                  //【2】一个变量被final修饰,这个变量就变成了一个常量,这个常量的值就不可变了
7.                  //     这个常量就是我们所说的 字符常量  ---》pi
8.                  //     约定俗成的规定:字符常量的名字全部大写
9.                  //【3】使用扫描器:Scanner的使用--》注意通过形象的理解去使用
10.                final double PI = 3.14;
11.                //拿来一个扫描器:
12.                Scanner sc = new Scanner(System.in);
13.                //给一个友好性的提示:
14.                System.out.print("请录入一个半径:");
15.                //让扫描器扫描键盘录入的int类型的数据:
16.                int r = sc.nextInt();
17.                
18.                //求周长:
19.                double c = 2*PI*r;
20.                System.out.println("周长为:"+c);
21.                
22.                //求面积:
23.                //PI = 9.29;报错:TestVar11.java:12: 错误: 无法为最终变量pi分配值
24.                double s = PI*r*r;
25.                System.out.println("面积为:"+s);
26.                
27.                
28.        }
29.}

 

练习:加深对Scanner的使用

 

1.  import java.util.Scanner;
2.  public class TestVar12{
3.          public static void main(String[] args){
4.                  //键盘录入学生的信息:年龄,身高,姓名,性别:
5.                  //键盘录入年龄:(接收int类型数据)
6.                  Scanner sc = new Scanner(System.in);
7.                  System.out.print("请录入年龄:");
8.                  int age = sc.nextInt();
9.                  //键盘录入身高:(接收double类型数据)
10.                System.out.print("请录入身高:");
11.                double height = sc.nextDouble();
12.                //键盘录入姓名:(接收String类型数据--》字符串)
13.                System.out.print("请录入姓名:");
14.                String name = sc.next();
15.                //键盘录入性别:(接受char类型)
16.                System.out.print("请录入性别:");
17.                String sexStr = sc.next();
18.                char sex = sexStr.charAt(0);
19.                //上面两句可以合为一句表示:char sex = sc.next().charAt(0);
20.                System.out.println("该学生的信息为:姓名是:"+name+",年龄是:"+age+",身高为:"+height+",性别是:"+sex);
21.        }
22.}

 

posted on 2023-11-09 00:34  索静丨LLH  阅读(53)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3