java基础2

在生活中,菜需要用盘子来盛装,盘子有大小之分,也有不同类型。比如,鱼会用外形像鱼一样的特色盘子盛放,汤则用圆深的盘子来装,一般盘子大小要么刚好容纳菜,要么大于菜的大小,因为用小盘子装大量的菜容易撒汤。​

在计算机世界里,菜就如同数据,而盘子则是承载数据的变量。数据和菜一样有各种类型,变量也有多种类型,并且变量的类型通常由它所存储的数据类型决定。这就好比一个盘子,今天可以用来装小炒肉,明天可以用来装红烧肉,数据在变量中的存储也是如此,是可以变化的,所以被称为变量。​

以 Java 语言为例,它就像一个有着严格规则的国家。在 Java 中,一旦为变量指定了类型,就如同规定了某种特定类型的容器只能装特定类型的数据。比如定义了一个整型变量,它就只能存储整数类型的数据,不能存储字符串或者浮点数,否则就会出现错误,就像规定水杯只能装液体,你却想往里面装固体,这显然是不符合规则的。​

再看计算机中的溢出概念,这就好比用一个小容量的盘子去装过多的菜,菜会溢出来洒得到处都是。在计算机里,当我们给一个变量存储的数据超出了它所能容纳的范围,就会发生溢出。例如,一个字节类型的变量,它能存储的整数范围是有限的,如果我们给它赋值一个超出这个范围的数,就会导致数据溢出,产生错误的结果。

言归正传,在Java中,变量的声明格式为

数据类型 变量名 = 数据;

数据类型分为基本数据类型和引用数据类型。

基本数据类型(四类)

整数型:

        byte

        short

        int (默认类型)

        long

浮点型(小数)

        float

        double (默认类型)

字符型

        char

布尔型

        boolean

引用类型

类class

接口 interface

数组 array

 比如整数型,有四个类型,那怎么区分哪个数据用哪个类型呢?用大小,每个类型能装的大小是不一致的,就比如盘子。用的盘子大,有的盘子小。大盘子装大一点的菜,小盘子装小的菜。以下表格是能装的“大小”,即类型能表示的范围

整型

整数(1字节=8bit)byteshortintlong
字节1248
范围-128 ~ +127     

-2的15次方到2的15次方-1

-2的31次方到2的31次方-1-2的63次方到2的63次方-1
 要求默认类型使用时以l或L结尾
写法byte 变量short 变量int 变量long 变量 = 123L

浮点类型

浮点数floatdouble
字节48
范围±3.4028235E38±1.7976931348623157E308
要求数据后缀带F或f默认类型
类型单精度类型双精度类型
精度8位有效数字16位有效数字
写法float f=1.23242fdouble d = 1.123123

char类型

字符型char
要求使用单引号,但只能写一个字符
写法char 变量 = ‘c’
字节2
特点可以和数字进行运算,因为它有对应的Unicode编码
UnicodeA=65,Z=90,a=97,z=122,0=48,9=57(十进制)

Unicode编码表完全兼容ASCII码表(下图是ASCII表,码值一样)

        

boolean类型

布尔型boolean
要求只能取true和false中一个值
写法boolean 变量= true;
使用场景常用于条件判断或者循环结构中使用
注意点不能用0或非0的数字来表示false或true

变量

对于变量Java只有严格规范的。

  • 变量可以由26个英文字母+数字0-9+_下划线和$组成

        int abc;

        int $abc_123;

  • 不能以数字开头

        int $a 可以

        int 1a 不可以。

  • Java严格区分大小写

        int  a 和int A 是不一样的。

  • 不能单独使用关键字保留字作为变量

        int class =1 不可以

        int abclass=1 可以

除了这些强硬规范以外,作为一名合格的开发人员,应自觉遵守以下规则

凡是能自己起名字的地方都叫做标识符。

涉及到:包名、类名、接口名、变量名、方法名、常量名等

  • 标识符要使用驼峰命名法
    • 类名首字母应大写,XxxXxx的形式 UserInfo 用户信息类
    • 变量名,方法名应首字母小写,xxxXxx的形式 userName : 用户名
    • 常量名:所有字符应大写,多单词时用下划线链接 XXX_XXX的形式
    • 包名:所有字符应小写,还可以使用项目的功能或者网站域名命名,com.域名.xx包
  • 标识符要见名知意
    • 比如要描述用户名。 命名为a 显然是不合适的,可以命名为userName

什么是关键字和保留字?

在 Java 世界里,关键字和保留字就像是盘子使用规则里的特殊指令和预留概念。​

关键字就好比餐厅里有着特定用途标识的盘子。比如餐厅里标着 “甜品专用” 的盘子,只能用来盛放蛋糕、布丁等甜品,绝对不能用来装炒菜。在 Java 中,像 “public”“class”“int” 这些关键字,都有固定且明确的用途。“public” 用于修饰类、方法或变量的访问权限,就像标明这个 “盘子”(代码元素)的使用范围;“class” 用来定义类,是构建 Java 程序的基础框架,类似一种特定结构的盘子模具,规定了盛放数据和功能(菜)的特定方式;“int” 表示整数类型,当你定义一个 “int” 类型的变量,就相当于拿到一个只能装整数这种 “菜” 的盘子,其他类型的数据是装不进去的。这些关键字是 Java 语法规则中不可或缺的组成部分,一旦使用错误,整个程序就会像放错菜的盘子一样混乱,无法正常运行。​

而保留字则像是餐厅为未来发展预留的盘子概念。比如餐厅计划推出新的菜系,提前规划了 “新菜系专用盘” 的概念,虽然目前还没有实际的盘子样式和使用规则,但这个名称已经被预留,不会再用于其他用途。在 Java 里,像 “goto”“const” 这些保留字,虽然当前版本的 Java 没有赋予它们实际的功能,但为了保证语言发展的兼容性和扩展性,这些词汇被保留下来,不允许开发者用作变量名、方法名等自定义标识符。就好像你不能擅自把餐厅预留的 “新菜系专用盘” 概念拿去标注普通盘子,Java 开发者也不能随意使用保留字,否则就违反了 Java 语言的规范。

以下表格为Java中的关键字

用于定义数据类型的关键字
classbyteshortintlong
charbooleanfloatdoubleinterface
enumvoid
用于定义流程控制的关键字
ifelseswitchcasedefault
whiledoforbreakcontinue
return
用于定义访问权限修饰符的关键字
privateprotectedpublic
用于定义类,函数,变量修饰符的关键字
abstractfinalstaticsynchronized
用于定义类与类之间关系的关键字
extendsimplements
用于定义建立实例及引用实例,判断实例的关键字
instanceofnewthissuper
用于异常处理的关键字
trycatchthrowthrowsfinally
用于包的关键字
importpackage
其他修饰符关键字
nativestrictfptransientvolatileassert
用于定义数据类型值的字面值
truefalsenull
保留字
gotoconst

现在类型也知道了,数据也知道改写什么了。那么变量如何使用声明或者使用呢?

定义变量的格式

        第一种:

                数据类型 变量名 = 值

       第二种:

                数据类型 变量名;

                变量名= 值;

注意:变量必须先定义才能使用。变量在其作用域内有效,出了作用域无效。

作用域就是:离的最近的那个一个大括号{}。同一个作用域内,不能声明重名变量。

数据之间的运算法则

 上文提到,char类型可以和int类型进行运算,是因为char类型有对应的Unicode码。

在基本数据类型中,除了boolean类型以外,其他7种都可以相互转换。

        自动类型转换:容量小的变量与容量大的变量进行运算时,结果会自动提升为容量大的类型

        byte\char\short -->int --->long -->float --> double

        低               ----------------->                        高

        short s = 100

        int i =s;

        当byte、char、short三种类型的变量做运算时,结果为int

        强制类型转换:

                int i =1000;

                short s = (short) i;

                使用强转符() 使用强转,可能会导致精度丢失。

运算,肯定涉及到运算符。

算术运算符

+、-、*、/(基本算术运算符)

%:求余数

比如

10 % 3   结果为 1 

++ : 自增1

--  : 自减1

++、--在变量前,则变量先+1或-1再进行运算

++、--在变量后,则先运算再+1或-1

例:
int a =1,b=1;
System.out.print(++a+1);  结果为:3
System.out.print(b+++1); 结果为:2

赋值运算符

= 号和算术运算符混合使用

比如+=   *= 

a+=2  等同于  a=a+2;

比较运算符

== ,<, >,!=  <=,>=

a==b 判断a的值和b的值是否相等。

小于,大于,小于等于,大于等于

a!=b  判断a的值和b的值是否不相等。

逻辑运算符

&&  || !

与  或 非

a && b  a是true才会执行b的运算。若作为条件,即a,b都是true才能满足条件

a || b 只要有一个是true就行。a是true时,不会执行b

! : !true 就是false, !false 就是true

逻辑运算符操作的都是boolean类型的变量。而且结果也是boolean类型

位运算符,需要使用进制进行计算

进制

 1.进制分为:
    二进制 : 0,1 满2进1,以Ob或O开头
    十进制 : 0-9日常使用的数字,满 10进1
    八进制 : 0-7 满8进1,以数字0开头
    十六进制 : 0-9以及A-F,满16进1,以0x或0X开头表示,此处的A-F不区分大小写
2.二进制的使用说明
    1.计算机底层的存储方式:所有数字在计算机底层都已二进制形式存在
    2.二进制数据的存储方式:所有的数字,不管正负,底层都以补码的方式存储
    3.原码、反码、补码的说明
        整数:三码合一,原码,反码,补码都一样
        负数:
            原码:直接将一个数值换成二进制数,最高位是符号位,0表示整数,1表示负数,0正1负
            负数的反码:符号不变, 对原码按位取反,0变1,1变0
            负数的补码:其反码+1
        0的反码,补码都是0
        运算看补码,结果是原码
3.进制间的转换

其他进制转换10进制
假如N进制的abcd.ef数字,整数一共四位
a*N^n-1 + b*N^n-2 + c*N^n-3 + d*N^n-4 + e*N^n-5 + f*N^n-6

10进制转其他进制

除N取余数
16 转 2进制
16 / 2 = 8...0  ^
8 % 2 = 4...0  |
4  /  2 = 2...0  |
2  /  2 = 1...0  |
               ---> |
       二进制进制就是10000

二进制转8进制,16进制

每三位2进制就对应一位8进制数

每四位2进制就对应一位16进制数

10010 --> 010 010  22(8进制) 

10010 --> 1 0010 12--> C(16进制)

 位运算符

<< 、 >> 、>>> 、& 、|、 ^、 ~
&的二进制运算,遇零则零
|的二进制运算,遇一则一
^的二进制运算,不同为1,相同为0
<< 左移运算符 左移1位,就乘2
>> 有符号右移运算符,右移一位就除2 如果值为正,则在高位补0 ,如果值为负,则在高位补1
>>> 无符号右移运算符,无论值的正负,都在高位补0
~num=-(num+1)
x<<y的结果为:x的二进制后面+y个零
    2<<4
    010 -->010 0000  == 0100000 == 32
x>>y的结果为:x的二进制从右往左数y个舍去,若y大于x的个数,则为0

x>>>y的结果为:x的二进制从右往左数y个舍去,若y大于x的个数,则为0

位运算符的效率比算术运算符的效率要快

 三元运算符

三元运算符:(条件表达式) ? 表达式1 : 表达式2 
    条件为真运行问号后面的表达式1 如果不为真,运行表达式2
条件表达式的结果为boolean类型
三元运算符可以嵌套使用,当条件很多时,不推荐使用
    (条件表达式) ? (条件表达式2 ? 表达式1 : 表达式2 ) :表达式2
条件较少时优先使用三元运算符,因为简洁,执行效率高

 


本人是Java初学者,水平有限,本文章中如果有不对的地方,麻烦您能指出来。向您表示感谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值