Java基础语法

主要内容


详细内容

基本格式

所有Java代码都应该在一个class中。

Java严格区分大小写的。

Java是一种自由格式的语言。Java代码分为结构定义语句和功能执行语句,功能执行语句最后必须以分号结束

注释

文档注释

Java中特有的一种注释,它可以通过JDK提供的工具(javadoc.exe)公爵直接将源代码中的文档注释提取成一份系统的API文档。

格式:/**注释内容*/

单行注释

在程序中注释一行代码,在Java中,将双斜线(//)放在需要注释的内容之前便可。

多行注释

指一次性地将多行代码注释掉。使用“/*”和“*/”将程序中需要注释的内容包含起来,“/*”表示注释的开始,“*/”表示注释的结束。

标识符

定义

标识符程序中自定义的一些名字,包括:包名、类名、函数名、变量名、常量名。

命名规则

由大小写字母、数字、下划线(_)和美元符号($)组成,开头不能是数字。不能使用关键字。推荐使用全英文。

通用规范

1类名、接口名:所有单词首字母大写,驼峰式命名,例如:XxxYyyZzz

2变量名、函数名:第一个单词首字母小写,其他单词首字母大写,驼峰式命名,例如:xxxYyyZzz

3常量名:所有字母都大写,单词之间用下划线分割,例如:XXX_YYY_ZZZ

4包名:全部小写,例如:xxx.yyy.zzz

关键字


注意:java sizeof ,goto, const 关键字,但不能用goto const作为变量名

常量

整型

整型:整数,4个字节。

长整型:整数,8个字节。以L结尾。

浮点型

单精度浮点数:小数,4个字节。以F结尾。

双精度浮点数:小数,8个字节

布尔

只有两个值,真(true)或假(false),1个字节。

字符

单个字符,2个字节。

在字符常量中,斜杠(\是一个特殊的字符,它的作用是用来转义后面一个字符,这些字符通常是不可见的或者有特殊意义的。

'\r' 回车,回到一行的开始

'\n' 换行,换到下一行

'\t' 制表符,键盘上的Tab

'\b' 类似退格,键盘上的Backspace

以上字符都不可见,无法直接表示,所以用斜杠加上另外一个字符来表示。

'\'' 单引号,Java代码中单引号表示字符的开始和结束,如果直接写程序会认为前两个是一对,报错。

'\"' 双引号,Java代码中双引号表示字符串的开始和结尾,如果要写一个包含双引号的字符串那么这个双引号也需要转义。

'\\' 斜杠,Java代码中的斜杠是转义字符,用来和后面一个字符配合使用,在真正需要用斜杠的时候那么就要用另一个斜杠来转义。

以上字符都有特殊意义,无法直接表示,所以用斜杠加上另外一个字符来表示。

字符串:由若干个字符组成的一串。可以是一个字符、多个字符、或者一个都没有。字符串没有固定大小。

空:null

只有这一个值,用来表示一个引用为空。

变量

定义

变量没有固定的值,是在内存中开辟的一片空间。

Java中的变量中只能存储同一种类型的值。

变量在被取值之前必须初始化(第一次给变量赋值)

变量分类

a.基本数据类型: 8

整数:

byte  1个字节,最小值:-128,最大值:127

short 2个字节,最小值:-32768,最大值:32767

int 4个字节,最小值:-2147483648,最大值:2147483647

long 8个字节,最小值:- 9223372036854775808,最大值:9223372036854775807

浮点数:

float 4个字节,最小值:1.4E-45,最大值:3.4028235E38

double 8个字节,最小值:4.9E-324,最大值:1.7976931348623157E308

字符:

char 2个字节,最小值:0,最大值:65535

布尔:

boolean 1个字节,truefalse

b.引用数据类型:

类、接口、数组都是引用数据类型,除了8种基本数据类型,其他所有类型都是引用数据类型。

类型转化

a. 自动类型转换

byteshortchar参与运算的时候会自动提升为int,相当于将一个占空间较小的值放入了一个较大的空间。如下图所示:

 

b. 强制类型转换

可以将一个占空间较大的值使用(类型)的形式强制放入一个较小的空间,有可能损失精度。

c. 字符串转换

任何值和字符串相加都会得到字符串。

变量的作用域与生命周期

作用域:变量定义在哪一级大括号中,哪个大括号的范围就是这个变量的作用域。

相同的作用域中不能定义两个同名变量。

生命周期:变量的生命周期从定义时开始,超出作用域后结束。变量生命周期以外不能使用。

补充:成员变量和局部变量的区别:

(1)作用域:

成员变量:针对整个类有效;

局部变量:只在某个范围内有效(一般只的是方法,语句体内)。

2)存储位置:

成员变量:随着对象的创建而存在,随着对象的消失而消失,存储在堆内存中;

局部变量:当方法被调用,或者语句被执行的时候存在,存储在栈内存中。当方法调用完,或者语句结束后,就自动释放。

3)初始值:

成员变量:有默认的初始值;

局部变量:没有默认的初始值,使用前必须赋值。

函数

函数的定义

函数就是一段有名字的代码,可以完成某一特定功能。

如果某个函数在执行的时候需要调用者传入数据,那么可以定义参数列表,用于接收数据。

如果函数运行之后需要返回给调用者数据,那么需要指定返回值类型,并且用关键字return返回。

定义函数的3个必要条件:函数名、参数列表、返回值类型。如果不需要参数也要写小括号,如果没有返回值类型要写void

参数类型:函数的参数的类型,一旦定义传入时必须匹配。

返回值:函数运行结束后返回的值,使用return关键字返回。

返回值类型:函数运行结束后返回的值的类型,在类型非void情况下必须返回,而且必须类型匹配。

形参和实参

形参:在定义函数时小括号中的参数,用来接收数据的参数。

实参:在调用函数时真正传入的参数,传递给函数的数据。

重载和覆盖

重载(overload)

表示在一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同);在调用时,JVM就会根据不同的参数样式选择合适的方法执行。

在使用重载时需要注意以下几点:

(1)在使用重载的时候只能通过不同的参数样式,比如说:不同的参数类型,不同的参数个数,不同的参数顺序;

(2)不能通过访问权限、返回类型、抛出的异常进行重载;

(3)方法的异常类型和数目不会对重载造成影响;

(4)对于继承来说,如果某一方法在父类中的访问权限是private,那么就不能在子类中进行重载,如果定义的话,也只是定义了一个新方法,不会达到重载的效果。

覆盖(override)

表示子类的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了。

在继承中可能存在子类覆盖父类的方法,需要注意以下几点:

(1)覆盖的方法的标志必须和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;

(2)覆盖的方法的返回值必须和被覆盖的方法返回一致;

(3)覆盖的方法所抛出的异常必须和被覆盖的方法所抛出的异常一致,或者是其子类;

(4)被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有进行覆盖。

运算符

算数运算符

包括:+(正号)、—(负号)、+(加)、—(减)、*(乘)、/(除)、%(取模)、++(自增前)、++(自增后)、——(自减前)、——(自减后)、

加号:在操作数字、字符、字符串时是不同的,两个字符相加得到的是码表值,两个字符串相加是将字符串连接在一起。

除号:整数在使用除号操作时,得到的结果仍为整数(小数部分忽略)。

取模:模数的符号忽略不计,结果的正负取决于被模数。

自增:符号在前就是先运算后取值,符号在后则是先取值后运算。

赋值运算符

包括:=(赋值)、+=(加等于)、-=(减等于)、*=(乘等于)、/=(除等于)、%=(模等于)

比较运算符


比较运算符运行结束之后返回的都是boolean值。

注意:运算符==不要写成=

逻辑运算符

逻辑运算符运行结束之后返回的也是boolean


总结:&& 在前半是false的时候短路,|| 在前半是true的时候短路

位运算符

任何信息在计算机中都是以二进制的形式保存的,&|^除了可以作为逻辑运算符,也可以做为位算符。

它们对两个操作数中的每一个二进制位都进行运算,0当做false1当做true


运算符优先级


尽量写简单的表达式,遇到运算符优先级的问题使用括号解决。

语句

顺序结构

程序从上到下一行一行执行的结构,中间没有判断和跳转,直到程序结束。

选择结构

程序具备多个分支,通过条件判断决定程序选择那一条分支执行

if语句:

通过if...else if...else决定程序流程。

如果if中的条件满足则执行其中语句,if未满足则继续判断else if,如果满足则执行,不满足继续判断下一个else if,如果所有都不满足,则执行else

具体格式如下所示:

if (logic expression)
{
	statement...
}
else if(logic expression)
{
	statement...
}
...//可以有零个或多个else if语句
else//最后的else语句也可以省略
{
	statement...
}

switch语句:

通过switch...case...default语句控制程序流程。

根据switch后括号中的值判断运行哪一个case,这个值可以是byteshortch;arint

default语句是可选的,如果所有case都不满足,则会执行default

一旦匹配到一个case,程序就会从这个case向下执行,执行完一个case之后不会跳过其他的case,如需跳过请使用break

在switch语句后面的控制表达式的数据类型只能是byteshort,char,int四个整数类型和枚举类型,不能是boolean类型。Java 7中允许switch语句中的控制表达式为java.lang.String类型;

具体格式如下所示:

switch (expression)
{
	case condition1:statement1;
		break;
	case condition2:statement2;
		break;
		...
	case conditionN:statementN;
		break;
	default:
		statement;
}
三元运算符

语法:表达式 结果1 : 结果

如果表达式结尾为true取结果1,为false则取结果2

注意三元运算符也是有短路的效果,根据表达式的结果,只运行冒号一边的,另外一边的不参与运行。

循环结构

通过循环语句让同一段代码反复执行多次,执行完毕程序才会继续往后运行

while

先判断while中的表达式结果是否为truetrue则执行循环体,执行结束之后再次判断,如果表达式结果为false则跳出循环。

具体格式如下所示:

[init_statement]
while (test_condition)
{
	statement;
	[iteration_statement]
}

do...while

先执行一次循环体,然后判断while中的表达式,如果是true继续执行,如果是false则跳出循环。

具体格式如下所示:

[init_statement]
do
{
	statement;
	[iteration_statement]
}
while (test_condition);
 for

for循环的括号中有三条语句,都是可选项。

语句1:这条语句会在整个循环开始之前执行,且仅运行一次,不参与循环。

语句2:必须是一个返回boolean值的表达式,如果写了这个语句那么每次循环开始之前会判断,true则执行循环,false则不执行。没写则直接执行。

语句3:这条语句在每次循环体运行结束之后执行。

具体格式如下所示:

for (init_statement;test_expression ;iteration_statement )
{
	statement;
}

continuebreakreturn

continue结束本次循环,继续执行下一次

break:结束循环

return:结束方法

数组

定义

数组是一个类型一致,长度不可变的容器。可以通过索引操作容器中的每一个元素。

如果有多个类型相同的数据需要存储,可以将其定义为一个数组,这样做省去了创建多个变量的麻烦。

具体语法格式如下所示:

静态初始化:

type [] arrayName = new type[]{element1,element2,element3 ...};
动态初始化:

type [] arrayName = new type[length];

访问数组元素、遍历数组

存在数组中的数据是有索引的,从0开始递增,我们通过数组名和索引就可以操作其中每一个元素。

数组的长度

数组可以使用length属性获取其长度。

遍历数组

由于数组可以通过索引获取每一个元素,又可以通过length获取长度,那么可以定义循环来遍历数组中的每一个元素了。

使用数组时的异常

如果访问数组时索引越界(小于0或者大于length-1),会抛出异常:ArrayIndexOutOfBoundsExcepion

如果访问数组的引用为空(null),会抛出空指针异常:NullPointerException

与数组操作相关函数

Arrays.toString() : 将一个数组转为字符串表示形式;

具体方法格式如下所示:

public static String toString(type[] a)
System.arraycopy() :将一个数组中的某些元素拷贝到另一个数组的指定位置;

具体方法格式如下所示:

public static void arraycopy(Object src,int srcPos,Object dest, int destPos,int length)

数组分类

多维数组:数组中的每一个元素都是数组,这样的数组就是多维数组。

补充:

栈内存:用于存储局部变量,当数据使用完,所占空间会自动释放;

堆内存:数组和对象,通过new关键字建立的实例都存放在堆内存中;

方法区:静态方法,构造函数,常量池,线程池等;

本地方法区:window系统所占用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值