JAVA 11.11

本文详细介绍了Java中的数据类型,包括基本数据类型(如byte、short、int、long、float、double、boolean和char)及其内存占用和取值范围。讲解了对象类型,特别是String字符串类型。讨论了自动类型转换和强制类型转换的规则,以及运算结果的数据类型提升。此外,还提到了隐式类型转换的情况以及可能出现的问题。最后,文章探讨了局部变量的作用域和流程控制语句。
摘要由CSDN通过智能技术生成

JAVA第二天

1.1java中的数据类型(b)

java中的数据类型:  基本数据类型    和   对象类型
    
java是一种强语言,严格遵循类型匹配原则。也就是说 我们存储数据的时候 什么样的数据就必须使用什么样的类型去接收。
​
对象类型: 无数种
基本数据类型:八种
​
public  static void  main(String[] args){
​
         /* 整型   4个 */
        byte  a1 = 20;    字节型
        short a2 = 20;    短整型
        int   a3 = 30;    整型
        long  a4 = 60L;   长整型
​
        /* 浮点型 2个*/
        float  b1 = 20.5F; 单精度浮点型
        double b2 = 30.6;  双精度浮点型    精确到小数点后面的位数不一样 
​
        boolean c1 = true;   布尔类型
        boolean c2 = false;
​
        char  d1 = 'a';     字符型
        char  d2 = '你';
        char  d3 = 100;
​
        System.out.println(d3);
​
 }
​
问题: 我们存储整数 就有四种?我什么时候用哪一种呢?
java语言设计的时候 就希望我们能在功能实现的基础之上尽量的节省内存。
 所以java就设计了多种数据类型 ,每一种所占据的内存空间和存储的范围是不一样的  
所以java就希望我们存储数据的时候 不同的场景使用不同的数据类型,例如 我们要存储人的年龄  我们可以使用 byte 存储银行卡的余额 double类型
 所以我们需要记住 各种类型的所占内存和取值范围

 

问题: 一个字节 两个字节是啥概念?
1G = 1024MB   1MB=1024KB   1KB=1024B   1B就是一字节   1B=8b
​
面试题: java中的char类型 能否存储一个汉字?
其他语言中char类型占一个字节,一个汉字占两个字节,但是java中的char类型占俩字节 
    
问题: 一个汉字占2字节,一个字母或者数字占1个字节,char类型能存储2个字节 --- char能否存储两个数字或字母?
    
Too many characters in character literal    
char  d1 = 'aa';
​
​
java中的对象类型:  其中一种是 String  字符串类型

1.2 自动类型转换和强制类型转换(b)

java是遵循类型匹配原则 不一样的类型不能胡乱赋值
int  a = "123";
​
但是
 public  static void  main(String[] args){
​
        byte  a = 20;
        
        int  b = a;
        
    }
此时我们将byte类型的数据赋值给int类型 发现不报错。这是为什么?
此时发生了 自动类型转换:  所占字节数小的 赋值给 所占字节数大的 可以完成赋值。
此时有一张图 记录了 自动类型转换的方向

 

此时如果违背这个图 就会报错
​
public  static void  main(String[] args){
        int  a = 20;
        byte  b = a;
}
​
此时我就想将 a的值赋值给 b  此时就需要 强制类型转换。
public  static void  main(String[] args){
​
        int  a = 20;
​
        byte  b = (byte) a;
​
    }
在变量的前面添加一个 () 里面写数据类型  写什么类型代表转换成什么类型  注意:int  a = (int)"123"; 不能转换
此时强制类型转换 就是欺骗个编译器  依然会出现数据溢出的情况   
 
 public  static void  main(String[] args){
​
        int  a = 130;
        /* -128----127*/
        byte  b = (byte) a;
        System.out.println(b);// -126
​
}

1.3 运算结果(b)

​
一目运算符:  ++  --
二目运算符:  + - * / %  += -=   ==  != > < >= <=
三目运算符:  (条件表达式)? (真):(非真)
​
​
a++和++a有什么区别?
​
public  static void  main(String[] args){
​
         int  a = 10;
         int  b = a++;
         int  c = ++a;
​
        System.out.println(a); // 12    因为无论 a++  还是 ++a 都是对a的值进行自增1 
        System.out.println(b); // 10    先计算a++ 11  然后将a++之前的值赋值给b
        System.out.println(c); // 12    先计算++a 12  然后将++a之后的值赋值给c
​
}
​
+ 在java中也有两种运算形式: A 数学相加   B 字符串拼接 
​
并且java中的内容 进行运算的时候 结果会 自动提升
    
public  static void  main(String[] args){
​
         int  a = 10;
         int  b = 20;
​
         float  c = a/b;
​
         //0.0
         System.out.println(c);
}
​
此时我们需要分布去看代码:  首先计算  a/b 得到的结果是 0.5  ,java中结果也需要数据类型 此时结果的数据类型取决于参与运算的变量并且会选择大的(自动提升)所以结果是int类型
所以就变成了0  然后将0 赋值给 float类型的 c  输出 0.0 
 public  static void  main(String[] args){
​
         int  a = 10;
         float  b = 20;
​
         float  c = a/b;
​
         //0.0
         System.out.println(c);
​
 }

1.4 隐式转换(b)

我们发现一个问题:写这个代码会报错
​
public  static void  main(String[] args){
​
         byte  a = 128;
        float  b = 20.5;
}
Incompatible types.
Required:byte
Found:int
Incompatible types.
Required:float
Found:double  
问题是 found int?  
    所以就证明一件事情  10 20 30 50 100 200 数字也是有数据类型的  并且是  int 类型
    20.5  30.6 40.8 小数数字也是有数据类型的  并且是 double 类型
    
 此时我们发现 赋值 127的时候 明明是 int给 byte 不能给的但是不报错  因为发生了 隐式类型转换。编译器会发现127在byte范围之内 所以底层会偷偷地帮我们转换
    public  static void  main(String[] args){
         byte  a = 20;
    }
​
所以 float类型的要赋值需要添加F   long类型的要加L
public  static void  main(String[] args){
         float  a =  20.5F;
         long  b = 99999999999999L;
}
​
 请问以下代码会有什么问题?
    short  a = 20;  // 20是int类型 但是在short范围之内 所以隐式转换
           a = a+5; // 先计算 a+5; 得到结果25 自动提升为int类型 所以将int类型的25 赋值给 short类型的 a 报错
    short  b = 30;
           b += 6;  // b+=6 在底层编译成字节码文件的时候 是  b =  (short)( b+6 );
​
​
请问以下代码会有问题吗?
   public  static void  main(String[] args){
​
        short  b = 30;
        byte   a = 60;
​
        short  c = a+b;
​
    } 
此时这个代码报错  Incompatible types. Required:short  Found:int    
提高了性能但是浪费了内存。所以这是JDK后来才有的操作,因为大家的电脑内存都变大了 没必要纠结那一个两个字节了  

1.5 流程控制

if  if-else   for  while  switch

1.6 局部变量作用域(b)

public class Haha {
​
    /** 成员变量  字段  属性   全局变量  */
    int  b = 30;
​
​
    public static void main(String[] args) {
        /*定义到函数内部的变量*/
        int  a = 20;
​
    }
}
​
局部变量的作用域 指的是 定义的局部变量在哪可以使用: 从定义开始 到所在的结束大括号
 public static void main(String[] args) {
​
​
        for (int i=0;i<666;i++){
​
        }
​
        for (int i=0;i<666;i++){
​
            
        }
​
 }
​
同一作用域内 不能重复定义变量名
public static void main(String[] args) {
​
         int  a = 20;
​
         //Variable 'a' is already defined in the scope
         int  a = 30;
}

1.7 输出路径

src 用来写源文件
out 用来存放编译后的字节码文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值