java基础-03基本语法

关键词

常用关键字53个(含2个保留字):

1、保留关键字(2个)

const ——常量

常数:用于修改字段或局部变量的声明。

goto——转到

指定跳转到标签,找到标签后,程序将处理从下一行开始的命令

2、访问修饰符的关键字(3个)

public (公有的)

可跨包

protected (受保护的)

当前包内可用

private (私有的)

当前类可用

3、定义类、接口、抽象类和实现接口、继承类的关键字、实例化对象(6个)

class (类):

public class A(){}花括号里是已实现的方法体,类名需要与文件名相同

interface (接口):

public interface B(){}花括号里有方法体,但没有实现,方法体句子后面是英文分号;结尾

abstract (声明抽象):

public abstract class C(){}介于类与接口中间,可以有,也可以没有已经实现的方法体

implements (实现):

实现接口public class A implements B(){}

extends (继承):

继承类public class A extends D(){}

new (创建新对象):

A a=new A();A表示一个类

4、包的关键字(2个)

package (定义包的关键字):

将所有相关的类放在一个包类以便查找修改等

import (引入包的关键字):

引入包

5、数据类型的关键字(12个)

byte (字节型):8bit

char (字节型):16bit

short (短整型):16bit

int (整型):32bit

long (长整型):64bit

float (浮点型):32bit

double (双精度):64bit

boolean (布尔型):

true (真)

false (假)

void (无返回):

public void A(){}其他需要反回的经常与return连用

null (空值)

6、条件循环(流程控制)(12个)

if (如果) :

if(条件语句{执行代码}

如果条件语句成立,就开始执行{}里面的内容

else (否则,或者) :

常与if连用,用法相同:

if(...){...}else{...}

while (当什么时候):

while(条件语句){执行代码}

do (运行) :

通长与while连用 do {} while()

for(带序号的遍历):

for(初始化循环变量;判断条件;循环变量值{}

break (跳出循环):

直接跳出循环,执行循环体后的代码

continue (继续) :

中断本次循环,并开始下一轮循环

switch (选择结构):

代码如下

switch(表达式){
case 常量表达式1:语句1;
...
case 常量表达式2:语句2;
default:语句;

case (匹配switch的表达式里的结果) :同上

default (默认): default就是如果没有匹配的case就执行它, default并不是必须的

return (返回) :

返回方法指定类型的值或结束方法的执行

instanceof(实例):

一个二元操作符,和==、>、<是同一类的。测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据

7、修饰方法、类、属性和变量(9个)

static(静态的):

  • 属性和方法都可以用static修饰,直接使用【类名.属性和类名.方法名】。

  • 只有内部类可以使用static关键字修饰,调用直接使用【类名.内部类类名】进行调用。

  • static可以独立存在,静态代码块,初始化静态变量。

final(最终的不可被改变):

  • 方法和类都可用final来修饰;
  • final修饰的类是不能被继承的;
  • final修饰的方法是不能被子类重写。
  • 常量的定义:final修饰的属性就是常量

super(调用父类的方法):

常见public void paint(Graphics g){super.paint(g);...}

this(当前类的对象):

调用当前类中的方法(表示调用这个方法的对象)this.addActionListener(al):等等

native(本地):

native 关键字可以应用于方法,以指示该方法是用 Java 以外的语言实现的。

strictfp(严格,精准,strict float point 精确浮点):主要针对浮点数运算

  • 在Java虚拟机进行浮点运算时,如果没有指定strictfp关键字时,Java的编译器以及运行环境在对浮点运算的表达式是采取一种近似于我行我素的行为来完成这些操作,以致于得到的结果往往无法令人满意。

  • 一旦使用了strictfp来声明一个类、接口或者方法时,那么所声明的范围内Java的编译器以及运行环境会完全依照浮点规范IEEE-754来执行。因此如果想让浮点运算更加精确,而且不会因为不同的硬件平台所执行的结果不一致的话,那就请用关键字strictfp。

  • 可以将一个类、接口以及方法声明为strictfp,但是不允许对接口中的方法以及构造函数声明strictfp关键字

transient(短暂的) 美[ˈtrænziənt],修饰字段,该字段不被序列化

对象在持久化或网络传输时,都需要序列化,而有一些没有必要出现在序列化结果中的字段,就可以添加关键词 transient

synchronized(线程,同步):

一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块

volatile(易变的) 美[ˈvɑ:lətl]

  • volatile 关键字用于表示可以被多个线程异步修改的成员变量。
  • 在访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比sychronized关键字更轻量级的同步机制。
  • 声明变量是 volatile 的,JVM 保证了每次读变量都从内存中读,跳过 CPU cache 这一步,保证读到的都是内存中的值。
  • 使用场景:1.状态标记量 2,单例中的double check

8、错误处理(5个)

try 尝试执行,可能有异常

{ //执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容 }

catch 捕捉异常

{ //除非try里面执行代码发生了异常,否则这里的代码不会执行 }

finally 不管是否有异常都会执行

{ //不管什么情况都会执行,包括try catch 里面用了return ,可以理解为只要执行了try或者catch,就一定会执行 finally }

throw 语句 抛出一个异常

语法:throw (异常对象);

throw e;

throws是声明方法可能抛出的异常。

(用在声明方法时,表示该方法可能要抛出异常)

如下例子:

public void doA(int a) throws Exception1,Exception3{......}

9、其它(2个)

enum(枚举,列举)

assert(断言)


标识符

标识符就是用于给 Java 程序中变量、类、方法等命名的符号。

按照【阿里巴巴Java开发手册】执行比较好。下面摘抄几个:

1. 【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。

反例:name / name / $name / name / name$ / name

2. 【强制】代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。

说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,即使纯拼音命名方式也要避免采用。

正例:alibaba / taobao / youku / hangzhou 等国际通用的名称,可视同英文。

反例:DaZhePromotion [打折] / getPingfenByName() [评分] / int 某变量 = 3

3. 【强制】类名使用 UpperCamelCase 风格,但以下情形例外:DO / BO / DTO / VO / AO / PO / UID 等。

4. 【强制】方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格,必须遵从驼峰形式。

正例: localValue / getHttpMessage() / inputUserId

5. 【强制】常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。

6. 【强制】抽象类命名使用 Abstract 或 Base 开头,如AbstractCollection;

异常类命名使用 Exception 结尾,如IOException;

测试类命名以它要测试的类的名称开始,以 Test 结尾,如HomeControllerTest。

7. 【强制】类型与中括号紧挨相连来表示数组。

正例:定义整形数组 int[] arrayDemo;

反例:在 main 参数中,使用 String args[]来定义。

8. 【强制】POJO 类中布尔类型的变量,都不要加 is 前缀,否则部分框架解析会引起序列化错误。

反例:定义为基本数据类型 Boolean isDeleted 的属性,它的方法也是 isDeleted(),RPC框架在反向解析的时候,“误以为”对应的属性名称是 deleted,导致属性获取不到,进而抛出异常。

9. 【强制】包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式。

正例:应用工具类包名为 com.alibaba.ai.util、类名为 MessageUtils(此规则参考 spring的框架结构)

10. 【强制】杜绝完全不规范的缩写,避免望文不知义。

反例:AbstractClass“缩写”命名成 AbsClass;condition“缩写”命名成 condi,此类随意缩写严重降低了代码的可阅读性。


运算符

算术运算符

操作符	描述
+ 加法
- 减法
* 乘法
/ 除法
% 取余
++ 自增
-- 自减

关系运算符

运算符	描述
== 检查如果两个操作数的值是否相等,如果相等则条件为真。
!= 检查如果两个操作数的值是否相等,如果值不相等则条件为真。
> 检查左操作数的值是否大于右操作数的值,如果是那么条件为真。
< 检查左操作数的值是否小于右操作数的值,如果是那么条件为真。
>= 检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。
<= 检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。

位运算符

操作符	描述
& 如果相对应位都是1,则结果为1,否则为0
| 如果相对应位都是0,则结果为0,否则为1
^ 如果相对应位值相同,则结果为0,否则为1
~ 按位取反运算符翻转操作数的每一位,即0变成1,1变成0。
<< 按位左移运算符。左操作数按位左移右操作数指定的位数。
>> 按位右移运算符。左操作数按位右移右操作数指定的位数。
>>> 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。

逻辑运算符

操作符	描述
&& 称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。
|| 称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。
! 称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。

赋值运算符

操作符	描述
= 简单的赋值运算符,将右操作数的值赋给左侧操作数
+= 加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数
-= 减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数
*= 乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数
/= 除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数
(%)= 取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数
<<= 左移位赋值运算符
>>= 右移位赋值运算符
&= 按位与赋值运算符
^= 按位异或赋值操作符
|= 按位或赋值操作符

其他运算符

条件运算符(?:)

条件运算符也被称为三元运算符。该运算符有3个操作数,并且需要判断布尔表达式的值。该运算符的主要是决定哪个值应该赋值给变量。
variable x = (expression) ? value if true : value if false
比如 b = (a == 1) ? 20 : 30;

instanceof 运算符

该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)。
instanceof运算符使用格式如下: ( Object reference variable ) instanceof (class/interface type)
比如: boolean result = name instanceof String; // 由于 name 是 String 类型,所以返回真

字面量

字面量是指由字母,数字等构成的字符串或者数值,它只能作为右值出现,所谓右值是指等号右边的值,

如:int a=123这里的a为左值,123为右值。

参考

上一篇:webpack 命令 Module build failed (from ./node_modules/babel-loader/lib/index.js) 错误问题解决方案


下一篇:洛谷P3953 逛公园(NOIP2017)(最短/长路,拓扑排序,动态规划)