chapter2 数据类型

本文介绍了Java中的数据类型,包括关键字、常量、变量及其规则。强调了变量未初始化的后果和内存分配,讨论了整数、浮点、字符及布尔类型的细节。同时提到了编码与字符集,如Unicode和UTF-8。最后,文章提及了数据类型的转换和常量的使用,并给出了实现圆的周长和面积的练习。
摘要由CSDN通过智能技术生成

数据类型

标识(zhi)符:包,类,变量,方法的名

标识符定义规则:

1、四个可以:数字,字母(英汉日俄均可),下划线_,美元符号$

2、两个不可以:不可以以数字开头;不可以使用Java中的关键字

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

4、大小写敏感:int a;与 int A;不同

5、遵照驼峰命名法

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

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

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

6、长度不限制,但不建议太长

关键字

在这里插入图片描述
在这里插入图片描述

常量

字面常量

整型常量:123,33

实型常量:3.1415926

//字符常量:‘a’(可能有误)

逻辑常量:true false;逻辑常量就只有true和false两个值

字符串常量:“helloworld”

字符常量:使用final修饰的PI等称为符号常量

变量

在这里插入图片描述

1、如果你只定义一个变量,但没有给变量赋值的话,那么这个变量相当于没有定义(可以通过反编译看出来)

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

3、反编译后发现变量名字随机分配,无关紧要

4、变量不可以重复定义,名字必须不一样

Java是一个强类型的语言,只要声明变量就必须定义类型

public class Test{
	public static void main(String args[]){
		int a=10;
		int b=20;
		int c=a+b;
	}
}

对上述代码进行 反编译过程/反汇编过程 javap -v Test.class

在这里插入图片描述

常量池

在这里插入图片描述
在这里插入图片描述

变量的内存:内存只占用一块空间

System.out.println("num1="+num1);
int age=19,age2=20;

​ +加号的作用就是拼接

变量的作用域:作用范围就是离它最近的{}

局部变量:定义在方法中

成员变量:定义在类中,方法外

定义在方法中的变量是局部变量,定义在类中但是在方法外的变量叫成员变量

//以下代码错误,不能运行,仅供理解变量的作用域
public class Test{
    int b=20;
	public static void main(String[] args){
		System.out.println(a);//no
        int a=10;
        System.out.println(a);//yes
        System.out.println(b);//yes
        {
            int c=40;
            System.out.println(c);//yes
            int a=50;//no,属于变量的重复定义
        }
	}
    public void eat(){
        System.out.println(b);//yes
        System.out.println(a);//no
        int a=30;//因为在不同的方法中,所以a不是重复定义
        System.out.println(a);//yes
    }
}

在这里插入图片描述

整数类型:常量和变量

在这里插入图片描述

public class Var{
    public static void main(String[] args){
        int num1=12;//默认情况下赋值就是十进制的情况
        System.out.println(num1);
        int num2=012;//前面加上0,这个值就是八进制
        System.out.println(num2);
        int num3=0x12;//前面加上0x或者0X,这个值是十六进制
        System.out.println(num3);
        int num4=0b10;//前面加上0b或0B,这个值就是二进制
        System.out.println(num4);
        
        byte b=129;//超范围赋值会报错
        
        long num5=12345678910;//报错
        //整数类型默认是int型的,所以12345678910是一个int类型的整数,对于int来说,它超出范围了
        //要想把一个属给long类型,那么后面得加上L或l
        long num5=12345678910L;
    }
}

整数类型默认是int型的,所以12345678910是一个int类型的整数,对于int来说,它超出范围了
要想把一个属给long类型,那么后面得加上L或l,推荐大写L,防止认成l

注意:只有这个数超出int类型的范围后面才需要加上L,否则无需加L也可以赋值给long类型

浮点类型

常量:1、十进制形式

2、科学计数法形式。如:314e2;314E2;314E-2

在这里插入图片描述

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

float a=0.2f;

在这里插入图片描述

编码与字符集:

在这里插入图片描述

GB2312:中文两个字节,兼容ASCII码,ASCII还是用自己的7位,前面不补0

GBK所面临的落实问题:首位是0,就看成一个字节;首位是一,就看出两个字节

在这里插入图片描述

Unicode真实:UTF-8 UTF-16 UTF-32

在这里插入图片描述

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

我们用的最多的就是UTF-8

字符类型:

在这里插入图片描述

Java中无论字母,数字,符号,中午都是字符类型的常量,占用2个字节

字符类型:单引号引起来的单个字符

public class Varchar{
    public static void main(String[] args){
       char ch1='v';
       System.out.println(ch1);
       char ch2='S';
       System.out.println(ch2);
       char ch3='中';
       System.out.println(ch3);
       
       char ch4='^';
       System.out.println(ch4);
       char ch5='8';
       System.out.println(ch5);
       char ch6=' ';
       System.out.println(ch6);

       System.out.println("---------------------");
       char ch7='\n';
       System.out.println("aaa"+ch7+"222");
	   //两句话效果相同
       System.out.println("aaa\nbbb");
       System.out.println("aaa\tbbb");// \t 制表符 距离第一个8位
       System.out.println("aaa\bbbb");//输出aabbb,第三个a被擦除
       System.out.println("aaa\rbbb");//输出bbb,回车将光标回到开头再录入bbb
       System.out.println("\"java\"");//输出 “java”
       // \"将双引号原样输出 \’将单引号原样输出 \\ 将\原样输出
    }

}
public class Varchar{
    public static void main(String[] args){
        char ch1='A';
        System.out.println(ch1);
        System.out.println(ch1+90);//输出155
        
        char ch2='中';
        int num1=(int)ch2;
        System.out.println(num1);//输出20013
        
        char ch=(char)20013;//输出 中
       
        int num1='中';
        char ch5=20013;
        
        面试题:
        char ch6='2'+2;
        System.out.println(ch6);// 输出的是 字符 '4'------>4
        
    }
}

char类型我的看到的是A,但在底层计算的时候,实际上是用码计算的,这个码是ASCII

按Unicode码表存储但是Unicode兼容了ASCII

控制台乱码问题: 记事本用UTF-8编码,控制台用GBK解码,所以乱码

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

布尔类型

在这里插入图片描述

public class Varboolean{
    public static void main(String[] args){
        boolean flag1=true;
        boolean flag2=false;
        boolean flag3= 5==9;
        System.out.println(flag3);//false
    }
}

基本数据类型转换问题

有两种:自动转换和强制转换

多种数据类型参与运算时,整数,浮点,字符类型都可以参与运算,唯独布尔类型不可以参与运算

类型级别:byte short,char,int,long,float,double

级别用来做什么?当一个表达式中有多种数据类型的时候,要找出当前表达式中级别最高的类型,然后其余的类型都转换为当前表达式中级别最高的类型计算

在进行运算时,

左=右:直接赋值

左<右:强转

左>右:直接自动转换

以下情况属于特殊情形:对于byte,short,char类型来说,只要在他们的表述范围内,赋值的时候不需要进行强制转换,直接赋值即可

public class Varchange{
    public static void main(String[] args){
        double d=6;// int--->double   自动转化
        System.out.println(d);//输出6.0
        int i=6.5;// double--->int
        System.out.println(i);//报错 
        int i=(int)6.5;// 强制double--->int,输出6,不存在四舍五入   强制转换
        
        在同一个表达式中,有多个数据类型时,应该如何处理
        double d2=12+1294L+8.5F+3.81+'a'+true;//多种数据类型参与运算时,整数,浮点,字符类型都可以参与运算,唯独布尔类型不可以参与运算
        double d3=12+1294L+8.5F+3.81+'a';
                 =12.0+1294.0+8.5+3.81+97.0;
        System.out.println(d3);//1415.31
        
        int i2=(int)(12+1294L+8.5F+3.81+'a');//1415,括号要全部加上
        
        以下情况属于特殊情形:对于byteshortchar类型来说,只要在他们的表述范围内,赋值的时候不需要进行强制转换,直接赋值即可
        byte b=12;
        System.out.println(b);
        
        byte b2=(byte)270;
        System.out.println(b2);//输出14


    }
}

在这里插入图片描述

练习:实现功能,求圆的周长和面积

public class Circle{
    public static void main(String[] args){
        double c=2*3.14*5;//小数在参与运算时,结果可能不准
        System.out.println("周长为:"+c);
        double s=3.14*5*5;
        System.out.println("面积为:"+s);
    }
}

在这里插入图片描述

提取变量就是为了一劳永逸,以后只要改变变量的值只要用到变量的地方取值都会发生变化

import java.util.Scanner;//在java.util下将Scanner拿过来用,没有这句话,会报错,找不到Scanner
public class Circle{
    public static void main(String[] args){
        //提取变量
        final double PI=3.1415926;
        
        
        //拿来一个扫描器
        Scanner sc=new Scanner(System.in);
        //让扫描器扫描键盘录入的int类型的数据
        System.out.print("请录入一个半径");
        int r=sc.nextInt();
        //int r=5;
        
        
        double c=2*PI*r;
        System.out.println("周长为:"+c);
        PI=6.12;//报错,无法为最终变量pi分配值
        double s=PI*r*r;
        System.out.println("面积为:"+s);
    }
}

一个变量被final修饰,这个变量就变成了一个常量,这个常量的值就不可变了,这个常量就是我们所说的字符常量

约定俗成的规定:字符常量的名字全部大写

如何从控制台输入东西?见上述代码块8行

加深对Scanner的理解

重点看:

import java.util.Scanner;
public class table{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        System.out.print("请输入年龄:");
        int age=sc.nextInt();
        
        System.out.print("请输入身高:");
        double hight=sc.nextDouble();
		System.out.print("请输入姓名:");
        String name=sc.next();//没有nextString,直接next就好
        System.out.print("请输入性别:");
       
        String sexStr=sc.next();
        char sex=sexStr.charAt(0);//字符串转为char类型
        
       //合为一句char sex=sc.next().charAt(0);
        
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值