一、Java基础1.3~1.7


软件是一系列按照特定顺序组织的计算机数据和指令的集合

1.3标识符和关键字

在编程语言中,标识符用于标识目的。 在Java中,标识符可以是类名方法名变量名标签

注:标识,多音词,biāo zhì,表明特征的记号或事物。biāo shí标示识别。本文中出现的标识都读成 biāo zhì

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

在上面的Java代码中,我们有5个标识符,即:
Test:类名。
main:方法名称
String:预定义的类名。
args:变量名
a:变量名

1.3.1定义标识符的规则

定义有效的Java标识符需要遵循某些规则。 如果不遵守这些规则,则会出现编译时错误。 这些规则对其他语言(例如C,C ++)也有效。

规则如下:
①标识符唯一允许的字符是所有大小写字母([A-Z],[a-z])数字([0-9])“ $”(美元符号)“ _”(下划线)。例如,“ DS @”不是 有效的Java标识符,因为它包含’@'特殊字符。还有运算符号+、-、*、/也是不可以的。

②标识符不应以**数字([0-9])**开头。 例如,“ 123DS”是无效的Java标识符。

③Java标识符区分大小写。例如,HelloWorld和helloworld就是两个不同的标识符。

④标识符的长度没有限制,但是建议仅使用4-15个字母的最佳长度。

⑤保留字不能用作标识符。 例如“ int while = 20;” 是无效语句,而while是保留字。 Java中有53个保留字。

除了第四点不强制要求,其余都必须遵循。
硬性要求之后,有一点要注意的是见名知意

接下的我的代码编写将按照如下要求:
包:
规则:包名采用小写字母,不要出现下划线等符号。
名词用有意义的缩写或者英文单词。并且包名的前缀总是一个顶级域名。
域名倒过来写,要求所有字母小写。
例如:com.ds.包名(描述这个包是干什么的)

类:
规则:类名采用每个单词的首字母大写,其余字母小写的方式。
尽量保证类名简介而富于描述。使用完整单词,避免缩写词。
如果是一个单词,首字母大写,例如:Test
如果是多个单词,每个单词的首字母大写,例如:HelloWorld(驼峰命名规则)

抽象类、接口类、接口实现类等需要相关的前缀及后缀

类的类型前缀后缀实例
抽象类AbstractAbstractLogin
接口类Login
接口实现类ImplLoginImpl
控制类(web)ActionLoginAction
服务类(web)ServiceLoginService
控制类(spring)ControllerLoginController
服务类(spring)ServiceLoginService
异常类ExceptionLoginException

方法:
规则: 方法名采用第一个单词的首字母小写、剩余单词首字母大写,其余字母小写的方式,一般由动词+名词组成。动作方法采用动词和动宾结构。
如果是一个单词,全部小写。例如:hello
如果是多个单词,从第二个单词开始,首字母大写。例如:helloWorld

常量:
规则:常量名采用大写字母,用下划线做间隔,并且使用final static修饰。程序中应该使用常量替代多处相同的变量,这样做的好处是,当因需要修改时,只需要修改一处。
如果是一个单词,全部大写,例如:HELLO
如果是多个单词,每个单词之间用下划线连接,例如:HELLO_WORLD

属性:
规则:属性名采用第一个单词的字母小写、剩余单词首字母大写,其余字母小写的方式。与方法命名相同。
如果是一个单词,全部小写。例如:name
如果是多个单词,从第二个单词开始,首字母大写。例如:userName

变量
规则:变量名采用第一个单词的首字母小写、剩余单词首字母大写,其余字母小写的方式。与方法、属性命名相同。
根据变量的作用范围,作用范围大的应该使用长名称,作用范围大,表名变量的声明周期比较长,为了有助于理解,应尽量用长名称以表达变量的真实意图。反之,对于作用范围小,可以使用一些简化的名称,比如i,j,k等,提高编程效率。
对于集合类的变更,变量名称应使用复数,如后缀"s"
对于布尔型变量,避免使用否定布尔变量
例如:
Collection<'qwqwqw> users;
int[] lists; //避免 list
boolean isChecked; //避免 isNotChecked

1.3.2保留字

任何编程语言都保留一些单词来表示该语言所定义的特殊功能。 这些词称为保留字。
它们可以简要分为两部分:关键字(50)和字面量(3)。
关键字定义功能,字面量定义值
在这里插入图片描述
不用死记硬背到底有哪些关键字,知道有这回事就足够了,万一不小心把某个关键字用作标识符使用,编译器也会提示这个错误的。

关键字列表

abstractassertbooleanbreakbytecase
catchcharclasscontinuedefaultdo
doubleelseenumextendsfinalfinally
floatforifimplementsimportinstanceof
intinterfacelongnativenewpackage
privateprotectedpublicreturnshortstatic
strictfpsuperswitchsynchronizedthisthrow
throwstransienttryvoidvolatilewhile
constgoto

虽然false、true和null看起来像关键字,但事实上它们是字面量,就像数字一样。

符号表在编译器体系结构的各种分析阶段(如词法,语法,语义)中会使用标识符。

注意:关键字const和goto是保留的,即使它们当前未使用。 为了代替const,使用final关键字。 更高版本的Java中包含诸如strictfp之类的一些关键字。

1.4数据类型

Java语言是一门强类型的语言,对应每一种数据都定义了明确的类型每一种类型在内存中分配的空间大小时不同的。
在Java中针对不同类型的数据,共归类出8种简单(基本)数据类型和3种引用数据类型。
在这里插入图片描述
这里先讲基本数据类型

1.4.1基本数据类型

①整型,用来表示整数

关键字名称占内存取值范围
byte一个字节-27~27-1
short两个字节-215~215-1
int四个字节-231~231-1
long八个字节-263~263-1

注:一个字节存储8位无符号数,储存的数值范围为0-255。
这些数据都是有符号的,所有整数变量都是无法可靠地存储其取值范围以外的数据值,因此定义数据类型时一定要谨慎。
java在数学计算的时候,不检查范围,在超范围计算的时候,会发生溢出计算可能是有害的,需要在编程中加以避免(了解极值)
long处理与时间相关的东西(毫秒)

②浮点型,用来表示小数

关键字名称占内存符号位指数位尾数位精确度范围
float四个字节18237~8-3.4E38~3.4E38
double八个字节1115216~17-1.7E308~1.7E308

以float为例,指数位为8位,除去1位符号位,剩下7位全为1的情况下最大值为127(27),因为这是在计算机中,所以数据会被还原成"1.尾数×2指数 "样式,所以最大值情况为1.111111111111111111111×2127(1.后面23个1,由于尾数的范围1~2,其最高位总为1,故只需存取小数部分,所以小数为是23位1,尾数最大值应该是接近2但不等于2),约等于2×2127 ≈ 3.4*1038

注:需要使用浮点型的时候,直接使用double类型。因为浮点型的字面量默认使用double类型。

③布尔型,用来表示状态是否成立

关键字名称占内存取值
boolean一位(1/8个字节)true:真/false:假

④字符型,用来表示单个字符

关键字名称占内存取值范围
char两个字节0~65535

char类型用来存储诸如字母、数字标点符号之类的单一字符。Java语言中所有字符均使用Unicode编码。Unicode编码采用16位编码方式,可以对65535种字符进行编码,能编码的字符量比8位的ASCII码多得多,能够容纳目前世界上已知的字符集。Unicode编码通常用十六进制表示。
字符常量有以下几种表示
(1)放在两个单引号里的单个字符,例如’a’、‘1’。
(2)以反斜杠开始的转义序列,表示一些特殊字符。
(3)使用Unicode编码值表示的字符\u****,这里****是4位十六进制数。例如,’\u0022’和’"'都可以表示双引号。

1.5变量

变量是给定的存储器位置的名称。它是存储在程序的基本单元。
存储在变量中的值可以在程序执行期间被改变。
变量是只给一个内存位置的名称,该变量影响该内存位置所做的所有操作。
在Java中,所有的变量在使用前必须声明。

如何声明变量?
我们可以在java中声明变量,如下所示:
在这里插入图片描述
数据类型:可以存储在此变量中的数据类型。
变量名:给变量的名称。
:它是存储在变量中的初始值。

1.5.1变量初始化

变量可以在声明的同时初始化,也可以在变量声明后,通过赋值语句对其进行初始化。初始化后的变量任然可以通过赋值语句赋予新的值。

int age;	//变量声明
age = 10;	//初始化赋值
...
age = 20;	//重新赋值,但不是初始化
double height = 175.5;	//在声明变量的同时进行初始化

1.5.2变量的类型

Java中有三种类型的变量:
局部变量
实例变量
静态变量

现在让我们详细地了解每一个变量。
①局部变量
在块、方法或构造函数中定义的变量称为局部变量。
这些变量是在输入的块或调用函数时创建的,并在退出块或调用从函数返回时销毁。
这些变量的作用域只存在于声明变量的块中。也就是说,我们只能在那个块中访问这些变量。
局部变量的初始化是强制性的

②实例变量
实例变量是非静态变量,在任何方法、构造函数或块之外的类中声明。
由于实例变量是在类中声明的,所以这些变量是在类的对象创建时创建的,并在对象销毁时销毁。
与局部变量不同,我们可以对实例变量使用访问说明符。如果我们没有指定任何访问说明符,那么将使用默认的访问说明符。
实例变量的初始化不是强制性的。它的默认值是0或null。
实例变量只能通过创建对象来访问。

③静态变量
静态变量也称为类变量。
这些变量的声明类似于实例变量,不同之处在于静态变量是使用static关键字在任何方法构造函数或块之外的类中声明的。
与实例变量不同,不管我们创建了多少对象,每个类只能有一个静态变量的副本。
静态变量在程序执行开始时创建,在执行结束时自动销毁。
静态变量的初始化不是强制性的。它的默认值是0
如果我们访问静态变量,比如实例变量(通过对象),编译器将显示警告消息,它不会停止程序。编译器将自动将对象名替换为类名。
如果我们访问的静态变量没有类名,编译器会自动附加类名。
要访问静态变量,不需要创建该类的对象,只需将变量访问为类名.静态变量名

实例变量VS静态变量

每个对象都有自己的实例变量副本,而不管我们创建多少对象,每个类只能有一个静态变量副本。
使用一个对象对实例变量所做的更改不会反映到其他对象中,因为每个对象都有自己的实例变量副本。但在静态变量情况下,更改将反映在其他对象中,因为静态变量对于类的所有对象都是通用的。
我们可以通过对象引用访问实例变量,而静态变量可以使用类名直接访问。

1.5.3变量范围

变量的作用域是程序中变量可以访问的部分。与c/c++一样,在Java中,所有标识符都是按词法(或静态)确定作用域的,即变量的作用域可以在编译时确定,与函数调用堆栈无关。
Java程序以类的形式组织。每个类都是某个包的一部分。Java范围规则可以分为以下几类。

成员变量(类级范围)
这些变量必须在类内部(在任何函数外部)声明。它们可以在类中的任何地方直接访问

局部变量(方法级范围)
方法内部声明的变量具有方法级别范围,不能在方法外部访问
注:局部变量在方法执行结束后不存在

循环变量(块范围)
在方法的一对方括号“{”和“}”中声明的变量的作用域仅在方括号内

关于Java中变量作用域的一些要点:

通常,一组花括号{}定义了一个范围。

①在Java中,我们通常可以访问一个变量,只要它定义在与我们编写的代码相同的方括号内,或者定义变量的方括号内的任何方括号内。

②在任何方法外部的类中定义的任何变量都可以被所有成员方法使用。

③当方法具有与成员相同的局部变量时,可以使用this关键字引用当前类变量。

④如果要在循环结束后读取变量,必须在循环体之前声明它。

1.5.4变量类型转换

当将一种数据类型的值分配给另一种数据类型时,这两种类型可能彼此不兼容。 如果数据类型兼容,那么Java将自动执行称为自动类型转换的转换,如果不兼容,则需要将其显式转换或转换。 例如,将int值分配给long变量。

int a = 1;
long b = a;//将int型变量赋值给long型,不会报错

long c = 2;
int d = c;//将long型变量赋值给int型,会报错

解决方法分为两类
方式1:加宽或自动类型转换
当自动转换两种数据类型时,将进行加宽转换。 在以下情况下会发生这种情况:
①两种数据类型兼容。
②当我们将较小数据类型的值分配给较大数据类型时。
在这里插入图片描述
例如,在Java中,数字数据类型彼此兼容,但是不支持从数字类型到char或boolean的自动转换。 而且,char和boolean彼此不兼容。

方式2收缩或显式转换
如果要将较大的数据类型的值分配给较小的数据类型,则执行显式类型转换或缩小。
这对于无法自动转换的不兼容数据类型很有用。
在此,目标类型需要将指定值转换为的所需类型。
在这里插入图片描述

long c = 2;
int d = (int) c;//此时即可类型转换

字符和数字彼此不兼容。如何进行显式转换?
当将值赋给字节类型时,小数部分丢失并减少到256模数(字节范围)。

表达式中的类型提升
在计算表达式时,中间值可能会超出操作数的范围,因此将提升表达式值。 类型提升的一些条件是:
·在计算表达式时,Java会自动将每个字节,short或char操作数提升为int。
·如果一个操作数是long,float或double,则整个表达式将分别提升为long,float或double。

表达式中的显式类型转换
在计算表达式时,结果将自动更新为操作数的更大数据类型。但如果我们把结果存储在更小的数据类型中,则会产生编译错误,因此我们需要对结果进行类型转换。
注:对于单个操作数,结果将被转换为int类型,然后相应地进行类型转换。

1.6常量

常量就是程序里持续不变的值,它是不能改变的数据。Java中的常量包含整型常量、浮点型常量、布尔常量等。在Java中可以利用final关键字来定义常量。

1.6.1整型常量

整型常量可以分为十进制、十六进制和八进制

十进制
0 1 2 3 4 5 6 7 8 9
注:以十进制表示时,第一位不能是0(数字0除外)
例如:

int a = 10;
int b = 010;//此时的b已经不等于a了

十六进制
0 1 2 3 4 5 6 7 8 9 A B C D E F
注:以十六进制表示时,需要以0x或0X开头
例如:

int a = 0x0A;//表示十进制的10

八进制
0 1 2 3 4 5 6 7
注:八进制必须以0开头
例如:

int a = 012;//表示十进制的10

long型
注:long型必须以l/L结尾
例如:

int a = 10;
long b = 10l;

1.6.2浮点型常量

浮点数常量有float和double两种类型,分别叫做单精度浮点数和双进度浮点数,表示浮点数时,要在后面加上f(F)或者d(D),用指数表示也可以。
注:由于小数常量的默认类型为double型,所以float类型的后面一定要加f(F),用以区分
例如:

float a = 1.25f;
double b = 1.25;

1.6.3.字符串常量

字符串常量和字符型常量的区别是,字符串常量是用双引号括起来的常量,用于表示一连串字符。而字符型常量是用单引号扩起来的,用于表示单个字符。
注:
①字符串所用的双引号和字符所用的单引号,都是英文的,不要误写成中文的引号
有些时候,无法直接往程序里面写一些特殊的按键和字符,比如想打印出一句带引号的字符串,或者判断读者的输入是不是一个回车键等。对于这些特殊的字符,需要以反斜杠(\)后跟一个普通字符来表示,反斜杠(\)在这里就成了一个转义字符

1.6.4boolean常量

布尔值是“真” True 或“假” False 中的一个

1.6.5null常量

null常量只有一个值,用null表示对象的引用为空。
几乎所有的编程语言都与null绑定。几乎没有一个程序员不为null而烦恼。
在Java中,null与Java .lang. nullpointerexception相关联。因为它是java中的一个类。当我们尝试执行一些带有或不带null的操作时,它会被调用,有时我们甚至不知道它发生在哪里。
以下是关于java中的null的一些要点,每个java程序员都应该知道:

  1. null是区分大小写的:null在Java中是文字,因为关键字在Java中是区分大小写的,所以我们不能像在C语言中那样写null或0。
  2. 引用变量值:Java中的任何引用变量都有默认值null。
  3. null的类型:与常见的误解不同,null不是Object也不是类型。 这只是一个特殊值,可以将其分配给任何引用类型,并且可以将强制类型转换为任何类型
    4.自动装箱和拆箱:在自动装箱和拆箱操作期间,如果将空值分配给原始装箱的数据类型,则编译器仅引发Nullpointer异常错误。
  4. instanceof运算符:java instanceof运算符用于测试对象是否是指定类型(类,子类或接口)的实例。 在运行时,如果Expression的值不为null,则instanceof运算符的结果为true。
    这是instanceof操作的重要属性,使其对于类型转换检查很有用。
    6.静态方法与非静态方法:我们不能对具有空值的引用变量调用非静态方法,它将抛出NullPointerException,但可以对具有空值的引用变量调用静态方法。 由于静态方法是使用静态绑定进行绑定的,因此它们不会引发Null指针异常。
  5. ==和!=在Java中,允许进行比较且不等于运算符,但可以使用null。 这对于用Java中的对象检查null很有用。

1.7运算符

运算符是一种特殊符号,用以表示数据的运算、赋值和比较。运算符共分为算术运算符、赋值运算符、比较运算符、逻辑运算符、移位运算符。

1.7.1算术运算符

算术运算符的功能是做各种算术运算,其操作数可以是字符型、整型或浮点型数据。Java定义算术运算符又可以分为两种:单目算术运算符和双目算术运算符。单目运算符的操作数只有一个,只对唯一的操作数进行处理。双目运算符操作数有两个,运算过程中由操作参与完成。
算术运算符相比较简单,这里重点讲解自增(++)和自减(–)两种运算符。++和–运算符又因为前缀和后缀的原因可以分为四种。

前缀算术运算符,表达式先加减后运算
后缀算术运算符,表达式先运算后加减
例如

int a = 1;
int b = 2;
//      1     2     2     2     2     3     3     1
int c = a++ + b++ - a-- + --b + ++a - ++b - b-- + --a;
//      2     3     1     2     2     3     2     1    
System.out.println(c);//0

1.7.2赋值运算符

赋值运算符的作用是将一个值赋给一个变量,最常用的复制运算符是“=”,赋值运算符的左边必须是一个变量,而不能是一个值。赋值表达式的结果是一个值,这个值就是赋值运算符左边的变量在赋值完成后的值。在Java里可以把赋值语句连在一起。

运算符运算
=赋值
+=加等于
-=减等于
*=乘等于
/=除等于
%=模等于

1.7.3关系运算符

关系运算符用来比较两个值得关系,是双目运算符,运算结果为boolean类型,当关系成立时,结果为true;否则为false。关系运算符常用于if语句中的条件判断,循环语句中的终止条件等。

预算符运算
==相等于
!=不等于
<小于
>大于
<=小于等于
>=大于等于
instanceof检查是否是类的对象

注:比较运算符“==”不能误写成“=”,如果少写一个“=”,那就不是比较了,整个语句变成了赋值语句

1.7.4逻辑运算符

逻辑运算符用于对boolean型结果的表达式进行运算,运算的结果都是boolean型

运算符运算
&
|
!
^异或
&&
||

注:
①&&:逻辑功能和"&“一样,但如果根据运算符“&&”左边表达式
的结果(即为false时)能确定与结果时,右边的表达式将不被执行
②||:逻辑功能和”|"一样,但如果根据运算符“||”左边表达式
的结果(即为true时)能确定与结果时,右边的表达式将不被执行

“&”和“&&”的区别在于,如果使用前者连接,那么无论任何情况,“&”两边的表达式都会参与计算。如果使用后者连接,当“&&”的左边为false,则将不会计算其右连接表达式,因为不管右边是真是假,整个表达式的结果都是假的。同理“|”和“||”。

1.7.5位运算符

在计算机内部,数据是以二进制编码存储的,Java语言允许人们对这些二进制编码进行位运算。

位操作符运算
&
|
^异或
!
>>右移
<<左移
>>>>无符号右移

左移很简单,就是将左边操作数在内存中的二进制数据左移右移操作数指定的位数,右边移空的部分补0
对Java来说,用">>“移位时,如果最高位是0,左边移空的高为就填入0,如果最高位是1,左边移空的高为就填入1
Java也提供一个新的移位运算符”>>>>",不管通过“>>>>”移位的整数最高位是0还是1,左边移空的高位都填入0,也称无符号右移

1.7.6其他运算符

①三目运算符
(逻辑表达式1)?(逻辑表达式2):(逻辑表达式3)
如果“表达式1”为真,则整个表达式的值取“表达式2”的值,反之如果“表达式1”为假,则整个表达式值取“表达式3”的值
②括号运算符 ()
它主要用于强制类型转换、方法调用
③方括号运算符 []
声明、创建数组及访问数据中的特定元素
④内存分配运算符 new
创建对象、数组,分配内存地址单元
⑤域选择运算符.
访问类成员变量,对象成员变量
⑥实例运算符 instanceof
判断一个对象是否为一个类的实例
由于数据类型的长度是确定的,所以没有长度运算符sizeof

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值