Java语言学习(第三次记录)

首先,这里需要说一下一个Java程序的框架构成:

public class TestNormalPerson {
    public static void main(String[] args){
        //一个基本框架
    }
}

这个class代表它是一个类,这个“类”,我们可以理解为是C语言中的结构体(因为它里面可以定义很多很多的变量),这里的main方法就相当于是C语言中的main函数(是整个程序的入口),但是Java相对C语言来说结构更加严格,这里的格式不可更改,如若是更改了void,则这个一段代码就是自己写的函数,不是整个程序的入口,那么下面开始正文:

基本数据类型:

        整型

类型字节范围
byte1-128~127
short2-2^15~2^15-1
int4-2^31~2^31-1
long8-2^63~2^63-1

这四种整型的定义方式如下:

//定义一个byte类型并输出
byte by=127;
//定义一个short类型整数并输出
short shor=12223;
//定义一个int类型整数并输出
int i=114514;
//定义一个long类型整数并输出
long lon=134235678679L;

这里我们需要提到一点:

        在Java语言当中整形的字面量默认为int类型,如果赋值的时候long类型的值大于int类型的最大值,则我们需要在后面添加“L”或者“l”字符(区别是大小写,不过个人这里推荐使用大写,因为好区分)。还有一点就是这个字面量,赋值的时候可以赋予一个小于字面量的值,但是不能赋予大于字面量的之(否则就要添加L)

        PS:Java语言中,有这么几个规则:

int a=0b11;//二进制
int b=0x1f23;//十六进制
int c=011;//八进制

        浮点型,我们只需要了解:float类型能保存小数点后7位,而double类型能保存小数点后14位。浮点型的字面量默认为double类型,给一个float类型浮点型赋值的时候需要在末尾添加“f”。

        布尔型,布尔型是逻辑值,我们赋值的时候只能赋予它true或者false(或者是一个表达真假的式子)。

        字符型,字符型占两个字节,且只能表示一个字符。(但是这个字符包含世界上所有字符)

                包含所有字符是因为Java语言底层使用的编码是Unicode编码,它采用十六进制算法,总共能包含110万种字符,几乎涵括世界上所有字符。

                char类型也可以参与运算,运算的时候使用Unicode编码先将字符转换为对应的编码中的是兼职编号然后参与运算。

String类型:

        String类型就是字符串,可以表示多个字符:

char ch='a';
String str="abcd";

        如上,其实定义的时候跟C语言很像,字符使用单引号(')字符串使用双引号("),只是在Java中定义非常严格。

        但是String不能做加减法。它本质上其实也是一个一个字符的存储,也就是用一个数组将这几个字符存入合并到一起,所以这一个整体不能做加减法,但是String可以和其他八种基本数据类型做连接“+”,效果就是将两个数据的内容简单暴力的拼接在一起,最后得到的结果还是String类型。

基本数据类型转换

        在日常使用Java语言中我们难免碰上不同类型的数据进行运算。那么在这里我们就需要学习不同数据类型究竟要如何转换:

        一般来说只有七种基本类型能进行转换:除了布尔类型的其他七种。(因为布尔类型的值并非是数字)

        数据类型转换分为两种:默认转换和强制转换。

        默认转换:其他七种类型的数据转换遵从以下的规则:将容量小的转换为容量大的

(byte/short/char)-->int(4)-->long(8)-->float(4)-->double(8)

        那么这里肯定会有人异或:为什么8个字节的long整型容量还没有4个字节的float容量大?

        这是因为整型的保存方式与浮点型的保存方式不同:

                就以float为例:总共4字节,32位,其中第一位是符号位(s),2~9为指数域(E),剩下的则是小数域(M)。这就代表着浮点型的计算方式与整数直接计算方式完全不同,通过计算(V=(-1)^S * M * 2^E)之后,会发现实际上浮点型的值是非常非常大的。

        强制转换:一般来说是将大容量转换为小容量。但是强制转换存在着精度不准以及溢出的问题,究其原因还是在于转换的算法:因为每一个类型它存储的字节不同,所以在转换的时候会先把数值转换为二进制,然后按从左到右的顺序,将前面的不符合要求的位删掉,所以就例如将258(int)转换成short类型的时候,结果是2。

        258的二进制是0000 0001 0000 0010,而转换成short之后会变成0000 0010,算出来结果为2。所以在使用强制转换的时候要注意这些问题。

运算符

        算术运算符:

        Java语言中的算数运算符其功效基本和C语言中的差不多(+,-,*,/,%),这里对各别运算符做出强调:

        +:加号运算符再Java语言中除了表示正号加运算之外还多了一个连接运算的功能(就是上述刚讲过的String连接+运算)

        ++:除了加运算之外,再者就是++运算。i++与++i,相必它在C语言阶段已经折磨大家许久了,无所谓,在Java语言里我们还要跟这俩兄弟打交道。不过万幸的是Java语言中和C语言的++并没有什么区别,i++变量在前就先取值然后自增,++i变量在后就先自增然后取值。

        比较运算符:

        比较运算符就是比较两个变量或者常量的值然后得出 true 或者 false 两种结果的运算符。但最主要的问题还是要注意比较双方的格式是否一样,须是两个相同格式的量才能进行比较,不然就像是再用一个人的身高和猎豹的跑步速度相比较一样,完全没有任何逻辑可言。比较运算符主要就是以下几个了:==(比较是否相等),>,>=,<,<=,!=

        赋值运算符:

        赋值运算符也需要注意=(赋值符号,另外还有:+=,-=,*=,/=,%=)两边的类型是否相同。不过它比之比较运算符而言可以进行强制转换。但在使用的时候还是需要注意两边的数据类型。比如下面这个例子:

short shor=5;
shor = shor + 2;//1
shor += 2;//2

        这个题看似都没有什么问题但实际上1式会报错。原因是shor与2的数据类型不同。我们在上面说过,整形的字面量默认为int型,而我们对shor这个数据类型定义为short型,在运算过程中被悄悄转化为int类型与2进行加法运算。所以这=左右两边这两个数据实际上类型并不相同,故而1式会报错。

        那么有人就会问:2式为何不会报错?

        实际上我们可以试着将2式展开来看看:

shor += 2;//shor = (short)(shor + 2)

        +=这个式子展开来看是存在着隐式转换的所以本来是int类型的值被强行转换为了short类型,所以不会报错。但是我们知道强制转换的过程中存在着巨大的隐患,故而使用的时候要格外小心这个不显山不露水的隐式强制转换。

        逻辑运算符:

        逻辑运算符包括:&,&&,|,||,!,^,下来我们用一个表格来表示他们的结果:

ab&&&|||!a^
ttttttff
tfffttft
ftfftttt
fffffftf

 

        在这里Java语言和C语言几乎也是没有太大差别的,只是个别需要做出解释强调:

        &和&&的区别:&与&&从上表可以看出来他们两个的判断结果都一样,有一假则结果为假,不一样的地方在于:&运算无论左边式子是真是假都会进行右边式子的计算,但是&&若左边式子为假就直接判断结果不会进行右边式子的计算。

        |和||的区别:道理同上,但||是当左边为真的时候不进行右边的判断。

        ^:是当两边同真同假才为假,如果两边相异则为真。

        条件运算符:

        条件运算符就跟C语言当中的三目运算符一样,格式如下:(条件表达式)?表达式一:表达式二;

        若条件表达式为真则进行表达式一,若条件表达式为假则进行表达式二。

        位运算符

        Java语言在位运算符上与C语言也无太大差异,不过现在位运算符使用较少,当然如果能巧妙的使用位运算可以极大程度的减少开销优化算法:

        

<<左移一位补零
>>带符号右移一位(即最高位是几移动之后补几)
>>>无符号右移,右移一位补零
&只有1&1为1,其余都为0
|只有0|0为0,其余都为1
^相同则为0,相异则为1
~按补码取反

控制台输入:

        我们在Java语言中如果要进行向控制台输入数据的话,我们需要先导入一个包:

import java.util.Scanner  然后在主函数里面才能调用有关输入的函数,具体如下:

import java.util.Scanner;

public class Circulation {

    public static void main(String[] args) {
        Scanner wbbb=new Scanner(System.in);
    }

}

        接着在main函数中创建Scanner类型的对象也就是:Scanner wbbb=new Scanner(System.in);这一行代码,至于后面要求输入的时候就需要用到next()这类函数了,具体如下:

System.out.println("请输入您的年龄:");
        int age = wbbb.nextInt();
        System.out.println("您的年龄是"+age);

循环

        Java语言中的循环与C语言中的循环是一摸一样,这里不再过多赘述,只对if-else语句和switch语句进行对比:if-else语句:作用域更广,使用场景相对于switch语句更加宽广。但是碰上可以同时使用switch和if-else语句的情景,我们一般选择去是哟个switch语句,因为switch语句运行起来“效率更高”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值