• Java知识点一


    hello,大家好!我们今天开启Java语言的学习之路,与C语言的学习内容有些许异同,今天我们来简单了解一下Java的基础知识。

    一、数据类型

    分两种:基本数据类型 + 引用数据类型

    (1)整型

    八种基本数据类型包括:整数型:byte(1)、short(2)、int(4)、long(8)

                                            浮点型:float、double

                                            字符型:char

                                            布尔类型:boolean

    其中int、long不管在多少位操作系统当中都是4、8个字节,int取值范围 -2^31~2^31-1Integer包装类,可以认为这是一个Int类型的plus版本,没有有/无符号这一说。long占8个字节取值范围 -2^63~2^63-1,长整型变量的初值后要加大/小写的L,long的包装类型是Long。

    byte占1个字节位,取值范围 -128~127 ;short占2个字节,取值范围 -2^15 ~ 2^15-1 (-32768~32767)。

    计算机内存中的单位有:bit、byte、kb、mb、gb、tb、pb;除了byte—bit是8之外,其余相邻的单位之间都是1024。

    1. public static void main(String[] args) {
    2. //数据各个类型的声明方法
    3. //字节类型
    4. byte x = 100;
    5. System.out.println(x);
    6. System.out.println(Byte.MAX_VALUE);
    7. System.out.println(Byte.MIN_VALUE);
    8. //短整型
    9. short b = 10;
    10. System.out.println(b);
    11. System.out.println(Short.MAX_VALUE);//最大值
    12. System.out.println(Short.MIN_VALUE);//最小值
    13. //整型
    14. int c = 10;
    15. System.out.println(c);
    16. System.out.println(Integer.MAX_VALUE);
    17. System.out.println(Integer.MIN_VALUE);
    18. //长整型
    19. long a = 10L;
    20. System.out.println(a);
    21. System.out.println(Long.MAX_VALUE);
    22. System.out.println(Long.MIN_VALUE);
    23. }

     (2)浮点型

    double双精度,①在任何系统下都占8个字节,②浮点数和整数在内存中存储方式不同,不可以单纯的用2^n的形式来计算,(具体参考C语言中提到的数据在内存中的存储)③double的包装类为Double。

    float单精度,在Java中占4个字节,float的包装类型为Float。同样遵守IEEE 754标准,由于表示的数据精度范围较小,一般在工程上用到浮点数都优先考虑double,不太推荐float。

    1. public static void main(String[] args) {
    2. //双精度类型
    3. double d = 12.5;
    4. System.out.println(d);
    5. //单精度类型
    6. float f = 12.5f;
    7. System.out.println(f);
    8. }

    (3)字符类型

    char不同于C语言的是,他占两个字节,①Java中“单引号+单个字母”表示字符字面值

    ②计算机中字符的本质是一个整数,在C语言中使ASCII表示字符,而Java中用Unicode表示字符,因此一个字符占用2个字节,表示字符种类更多,包括中文。

    1. public static void main(String[] args) {
    2. //字符型,两个字节
    3. //存放字母
    4. char ch1 = 'a';
    5. char ch2 = 'A';
    6. //数字字符
    7. char ch3 = '1';
    8. //汉字
    9. char ch4 = '龙';
    10. System.out.println(ch1);
    11. }

    (4)布尔类型

    boolean在Java中不用引用头文件,可以直接使用;没有明确的大小;不能和其他类型转换,不存在1表示true,0表示false,不能进行+-等运算;包装类是Boolean。

    1. public static void main(String[] args) {
    2. //布尔类型
    3. boolean flg = true;
    4. System.out.println(flg);
    5. }

    二、数据类型之间的相互转换

    如上图,将b的值给a会报错,而将a的值给b就不会报错,因为int是4个字节,long是8个字节,如果将long型数据给到int型数据就会造成数据丢失。

    (1)自动类型转换(隐式)

    即:代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。特点:数据范围小的转化为数据范围大的会自动进行。

    (2)强制类型转换(显式转换)

    大数据类型转换为小数据类型,当进行操作时,代码需要经过一定的格式处理,不能自动完成。

    特点:数据范围大的转换成数据范围小的,但是可能会出现精度丢失,丢掉小数点or数据溢出

    (3)小于4字节的类型转换问题

    因为CPU在内存中进行读写时,都是按照4个字节来进行读写,所以像byte、char、short在进行运算时,都会先提升为int型后在计算,如下图:

    注意事项: 
    1.不同数字类型的变量之间赋值,表示范围更小的类型能隐式转换成范围较大的类型

    2.如果需要把范围大的类型赋值给范围小的,需要强制类型转换但是可能精度丢失

    3.将一个字面值常量进行赋值的时候,Java会自动针对数字范围进行检查

    4.强制类型转换不一定能功,不相干的类型不能互相转换 

    三、字符串类型

    1. //字符串
    2. String str1 = "hello ";
    3. String str2 = "world";
    4. String str3 = str1 + str2;
    5. System.out.println(str3);

    上图代码中的String不是包装类,而是引用数据类型;定义字符串,也可以利用“+”将两个字符串拼接。

    有些情况下可以将int->string相互转换:

    四、运算符

    (1)算术运算符

    基本四则运算符:加减乘除模(+ - * / %)

    我们来看一组%的运算,自己可以预测一下结果:

    1. System.out.println(9%2);
    2. System.out.println(9%-2);
    3. System.out.println(-9%2);
    4. System.out.println(-9%-2);

    我们来看运行结果: 

     符号的正负和运算符前的数字所带符号有关,另外在做“/”和“%”运算时符号右边的数字不能是0。

    增量运算符(+=、-=、*=、/=、%=):会自动进行数据类型转换;

    系统及提示你进行替换 。

     自增自减运算符(++、--)

    【注意】:①如果单独使用,前置++和后置++没有任何区别;

               ②如果混合使用,前置++是先+1后用;后置++是先用值后+1;

               ③只有变量才能使用自增自减运算符,不允许修改的常量不能使用。

    (2)关系运算符

    关系运算符主要有六个:==、!=、<、>、<=、>=,其计算结果是ture,false。

    (3)逻辑运算符(重点)

    逻辑运算符:&&与(有假必假)、|| 非(有真即真),两侧必须是布尔表达式。

    短路求值法
    &&和 || 遵守短路求值的规则:①System.out.println(10>20&&10/0==0); //打印false
                                                    ②System.out.println(10<20 || 10/0==0); //打印ture
     我们都知道,计算10/0会导致程序抛出异常,但是上面的代码却能正常运行,说明10/0并没有真正被求值。

    【注意】: ①对于&&,如果左侧表达式值为false,则表达式结果一定是 false,无需计算右侧表达式. 
                    ②对于 || ,如果左侧表达式值为true,则表达式结果一定是true,无需计算右侧表达式. 
                    ③但是&和|如果表达式结果为boolean时,也表示逻辑运算.

                        但与&&和 || 相比,它们不支持短路求值。

    (4)位运算符 

    在Java中数据存储的最小单位是字节,而数据操作的最小单位是比特位,字节是最小的存储单位,每个字节是由8个二进制比特位组成的,多个字节组合在一起可以表示各种不同的数据。
    位运算符主要有四个: &、|、~、^ ,除 ~ 是一元运算符外,其余都是二元运算符。
    位操作表示按二进制位运算,计算机中都是使用二进制来表示数据的(01构成的序列),按位运算就是在按照二进制位的每一位依次进行计算。

     

     移位运算符(了解)

    移位运算符一共有三个:<<(左移)、>>(右移)、>>>(无符号右移);都是二元运算符,且都是按照二进制比特位来运算的。

     还有一个>>>,这个比较特殊:

    【注意】:

    1.左移1位,相当于原数字*2.左移N位,相当于原数字*2的N次方.

    2.右移1位相当于原数字/2.右移N位,相当于原数字/2的N次方.

    3.计算机计算移位效率高于计算乘除,当某个代码正好乘除2的N次方的时候可以用移位运算代替.

    4.移动负数位或者移位位数过大都没有意义. 

    (5)条件运算符

    是Java中唯一一个三目运算符条件表达式:表达式1 ?表达式2:表达式3

    我们来看一道例题:

    1. boolean flg = true==true ?(true==false ?true :false) :true;
    2. System.out.printLn(flg);//false

     

    (6)运算符优先级

    在一条表达式中,各个运算符可以混合起来进行运算,但是运算符的优先级不同,比如: * 和 / 的优先级要高于+ 和-,有些情况下稍不注意,可能就会造成很大的麻烦。

    1. //求a和b的平均值
    2. int x = 10;
    3. int y = 20;
    4. int c = a+(b-a)>>1;
    5. System.out.printLn(c);//10


    上述表达式中,由于+的优先级要高于>>,因此a先和b-a的结果做加法,整体为20,最后再进行右移,因此结果为10。
     

    今天Java的知识点先分享到这里,小伙伴们可以在评论区留言,点赞支持一下吧!

  • 相关阅读:
    采购SRM系统应该选哪个?
    【C++ Primer Plus】第5章 循环和关系表达式
    我的第一个项目(十二) :分数和生命值的更新(后端增删查改的"改")
    SpringCloud Netflix-Hystix使用
    黑马头条项目经验&BUG
    Spring源码:Bean生命周期(三)
    字节国际化TnS算法实习的碎碎念
    redis之如何实现消息队列
    【创作活动】作为程序员的那些愚蠢瞬间
    树莓派部署.net core网站程序
  • 原文地址:https://blog.csdn.net/2301_77529159/article/details/136222566