【JavaSE基础笔记 · 震】Java基础语法

由 MisakaStone 发布

1 注释

书写注释是一个非常好的习惯

java中的注释有三种:

  • 单行注释
  • 多行注释
  • 文档注释 ( JavaDoc )

语法如下。

//Single-line comments

/*
Multiline comments
Multiline comments
*/

/**
* @Description
* @Author
* ...
*/

有很多整活的有趣注释。

/***
 * ┌───┐   ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
 * │Esc│   │ F1│ F2│ F3│ F4│ │ F5│ F6│ F7│ F8│ │ F9│F10│F11│F12│ │P/S│S L│P/B│  ┌┐    ┌┐    ┌┐
 * └───┘   └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘  └┘    └┘    └┘
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐ ┌───┬───┬───┬───┐
 * │~ `│! 1│@ 2│# 3│$ 4│% 5│^ 6│& 7│* 8│( 9│) 0│_ -│+ =│ BacSp │ │Ins│Hom│PUp│ │N L│ / │ * │ - │
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤ ├───┼───┼───┼───┤
 * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │{ [│} ]│ | \ │ │Del│End│PDn│ │ 7 │ 8 │ 9 │   │
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘ ├───┼───┼───┤ + │
 * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │: ;│" '│ Enter  │               │ 4 │ 5 │ 6 │   │
 * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤     ┌───┐     ├───┼───┼───┼───┤
 * │ Shift  │ Z │ X │ C │ V │ B │ N │ M │< ,│> .│? /│  Shift   │     │ ↑ │     │ 1 │ 2 │ 3 │   │
 * ├─────┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ ┌───┼───┼───┐ ├───┴───┼───┤ E││
 * │ Ctrl│    │Alt │         Space         │ Alt│    │    │Ctrl│ │ ← │ ↓ │ → │ │   0   │ . │←─┘│
 * └─────┴────┴────┴───────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ └───────┴───┴───┘
 */
/***
 *
 *   █████▒█    ██  ▄████▄   ██ ▄█▀       ██████╗ ██╗   ██╗ ██████╗
 * ▓██   ▒ ██  ▓██▒▒██▀ ▀█   ██▄█▒        ██╔══██╗██║   ██║██╔════╝
 * ▒████ ░▓██  ▒██░▒▓█    ▄ ▓███▄░        ██████╔╝██║   ██║██║  ███╗
 * ░▓█▒  ░▓▓█  ░██░▒▓▓▄ ▄██▒▓██ █▄        ██╔══██╗██║   ██║██║   ██║
 * ░▒█░   ▒▒█████▓ ▒ ▓███▀ ░▒██▒ █▄       ██████╔╝╚██████╔╝╚██████╔╝
 *  ▒ ░   ░▒▓▒ ▒ ▒ ░ ░▒ ▒  ░▒ ▒▒ ▓▒       ╚═════╝  ╚═════╝  ╚═════╝
 *  ░     ░░▒░ ░ ░   ░  ▒   ░ ░▒ ▒░
 *  ░ ░    ░░░ ░ ░ ░        ░ ░░ ░
 *           ░     ░ ░      ░  ░
 */
/***
 *_______________#########_______________________
 *______________############_____________________
 *______________#############____________________
 *_____________##__###########___________________
 *____________###__######_#####__________________
 *____________###_#######___####_________________
 *___________###__##########_####________________
 *__________####__###########_####_______________
 *________#####___###########__#####_____________
 *_______######___###_########___#####___________
 *_______#####___###___########___######_________
 *______######___###__###########___######_______
 *_____######___####_##############__######______
 *____#######__#####################_#######_____
 *____#######__##############################____
 *___#######__######_#################_#######___
 *___#######__######_######_#########___######___
 *___#######____##__######___######_____######___
 *___#######________######____#####_____#####____
 *____######________#####_____#####_____####_____
 *_____#####________####______#####_____###______
 *______#####______;###________###______#________
 *________##_______####________####______________
 */

2 标识符和关键字

标识符

Java语言中所有的组成部分都需要名字。

对于变量,常量,函数等,我们们统统称之为Java标识符。

关键字

Java中有特别意义的 标识符 即为关键字。

Java的关键字对Java的编译器具有特殊意义, 因此关键字不能用作变量名、方法名、类名、包名和参数。

Java语言中共定义了如下关键字。

abstractassertbooleanbreakbyte
casecatchcharclassconst
continuedefaultdodoubleelse
enumextendsfinalfinallyfloat
forgotoifimplementsimport
instanceofintinterfacelongnative
newpackageprivateprotectedpublic
returnstrictfpshortstaticsuper
switchsynchronizedthisthrowthrows
transienttryvoidvolatilewhile

Tips

  • 所有的标识符都应以字母(A-Z 或 a-z)、美元符($)或者下划线(_)开始。
  • 首字母之后可以是字母(A-Z 或 a-z)、美元符($)、下划线(_)或者数字的任意字符组合。
  • 不能使用关键字作为变量名或方法名。
  • 标识符是大小写敏感的。
  • 建议使用英文命名。

3 数据类型讲解

强类型语言:要求变量的使用严格符合规定,所有变量都必须先定义后才能使用。

弱类型语言:无此要求,如VB、JS等。

分类

  • 基本数据类型(Primitive Type)

    • 数值类型

      • 整数类型

        • byte(1字节)
        • short(2字节)
        • int(4字节)
        • long(8字节)
      • 浮点类型

        • float(4字节)
        • double(8字节)
      • 字符类型

        • char(2字节)
    • boolean类型

      • true
      • false
  • 引用数据类型(Reference Type)

    • 接口
    • 数组

Tips

  • 在定义long和float时在数字之后加一个大写字母。
int num1 = 10;

long num2 = 20L;

float num3 = 30.1F;
  • String不是关键字,是一个类。
  • 在IDEA中可以通过 Ctrl + Click 来查看某一数据类型的大小。

字节

位(bit)计算机内部数据储存的最小单位,11001100是一个八位二进制数。
字节(byte)计算机中数据处理的基本单位,习惯上用大写 B 来表示。

1 B = 8 bit

1 KB = 1024 B

1 M = 1024 KB

1 G = 1024 M

1 T = 1024 G


3.5 数据类型拓展

整数拓展

  • 进制后缀

    • 二进制 0b
    • 十进制
    • 八进制 0
    • 十六进制 0x
int num1 = 10;
int num2 = 0b10;
int num3 = 010;
int num4 = 0x10;

System.out.println("num1 = " + num1);
System.out.println("num2 = " + num2);
System.out.println("num3 = " + num3);
System.out.println("num4 = " + num4);

运行结果为

num1 = 10
num2 = 2
num3 = 8
num4 = 16

浮点数拓展

float f = 0.1F;
double d = 0.1;

System.out.println(f == d);

float d1 = 23333333333F;
float d2 = d1 + 1;

System.out.println(d1 == d2);

运行结果为

false
true

浮点数是有限且离散的,具有舍入误差,因此 df 接近但不相等。

最好完全避免使用浮点数进行比较。
最好完全避免使用浮点数进行比较。
最好完全避免使用浮点数进行比较。

那么在处理银行业务时使用什么进行比较?

使用 BigDecimal ,它属于数学工具类,不是数据类型。

字符拓展

char c1 = 'a';
char c2 = '萌';
char c3 = '\u0061';

System.out.println("c1 = " + c1);
System.out.println("c1 = " + (int)c1);

System.out.println("c2 = " + c2);
System.out.println("c2 = " + (int)c2);

System.out.println("c3 = " + c3);

运行结果为

c1 = a
c1 = 97
c2 = 萌
c2 = 33804
c3 = a

(int) 表示强制转换
所有字符的本质还是数字。

char类型涉及Unicode编码
\u 为转义字符。

转义字符意义ASCII码值(十进制)
a响铃(BEL)007
b退格(BS) ,将当前位置移到前一列008
f换页(FF),将当前位置移到下页开头012
n换行(LF) ,将当前位置移到下一行开头010
r回车(CR) ,将当前位置移到本行开头013
t水平制表(HT) (跳到下一个TAB位置)009
v垂直制表(VT)011
\代表一个反斜线字符'''092
'代表一个单引号(撇号)字符039
"代表一个双引号字符034
?代表一个问号063
0空字符(NUL)000
ddd1到3位八进制数所代表的任意字符三位八进制
xhh十六进制所代表的任意字符十六进制

字符串拓展

String Str1 = new String("Hello World");
String Str2 = new String("Hello World");
System.out.println(Str1 == Str2);

String Str3 = "Hello World";
String Str4 = "Hello World";
System.out.println(Str3 == Str4);

运行结果为

false
true

 布尔值拓展

boolean flag = true;

if (flag == true) {};
if (flag) {};

//Less is more!

4 类型转换

由于Java是强类型语言,所以在进行某些运算时,需要用到类型转换。

运算优先级

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

byte,short,char —> int —> long —>float —> double

内存溢出

int i = 128;
int a = (byte)i;

System.out.println("i = " + i);
System.out.println("a = " + a);

运行结果为

i = 128
a = -128

在转换时要避免内存溢出。

Tips

1、不能对布尔值进行转换。

2、不能把对象类型转换为不相干的类型。

3、在把高容量转换到低容量的时候,强制转换。

4、转换的时候可能存在内存溢出或者精度问题


5 变量,常量,作用域

变量

变量就是可以变的量。

Java变量是程序中最基本的存储单元,其要素包括变量名变量类型作用域

变量名必须是合法的标识符。

Java是一种强类型语言,每个变量都必须声明其类型。
变量类型可以是基本类型,也可以是引用类型。

Tips

为保证程序的可读性,不建议在一行内定义多个变量。

默认值

实例变量(instance variable):从属于对象,如果过不初始化,会有一个默认值 0 或 0.0

布尔值:默认值为false

除了基本类型,其他的默认值都是null

常量

常量就是初始化后不能再改变的量。

可以将常量理解为一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变。

//final ConstantType ConstantName = Value;
final double PI = 3.14;

修饰符(final、static、public等)不存在先后顺序

命名规范

  • 所有变量、方法、类名:见名知意
  • 类成员变量:首字母小写和驼峰原则(monthSalary、lastName)
  • 局部变量:首字母小写和驼峰原则
  • 常量:大写字母和下划线(MAX_VALUE)
  • 类名:首字母大写和驼峰原则
  • 方法名:首字母小写和驼峰原则

作用域

  • 类变量(class variable)
  • 实例变量(instance variable)
  • 局部变量(local variable)
public class Variable {

    static int allClicks = 0;     //class variable
    
    String str = "Hello World";     //instance variable

    public static void main(String[] args) {

        int i = 0;     //local variable

    }

}

6 基本运算符

Java语言支持如下运算符(operator):

  • 算术运算符:+ ,- ,* ,/ ,% ,++ ,--
  • 赋值运算符:=
  • 关系运算符:> ,< ,>= ,<= ,== ,!= ,instanceof
  • 逻辑运算符:&& ,|| ,!
  • 位运算符:& ,| ,^ ,~ ,>> ,<< ,>>>
  • 条件运算符:? :
  • 扩展赋值运算符:+= ,-= ,*= ,/=

IDEA快捷键:Ctrl + D 复制当前行到下一行

long a = 23333333L;
int b = 100;
short c = 10;
byte d = 1;

System.out.println("a+b+c+d = " + (a + b + c + d) );   // long
System.out.println("b+c+d = " + (b + c + d) );   // int
System.out.println("c+d = " + (c + d) );   // int (short + byte = int)

6.5 运算符拓展

自增自减运算

自增自减运算符为 ++ 和 -- ,均为一元运算符。

a ++ 为后自增,先取值后执行;

++ a 为前自增,先执行后取值;

自减同理。

逻辑运算

逻辑运算符:&&(与),||(或),!(非)

boolean t = true;
boolean f = false;

System.out.println("t && f = " + (t && f) );
System.out.println( "t || f = " + (t || f) );
System.out.println("! t = " + ! t);
System.out.println("! f = " + ! f);

运行结果为

t && f = false
t || f = true
! t = false
! f = true

短路运算

  • 逻辑与运算中第一个条件不满足即短路,后面不执行
  • 逻辑或运算中第一个条件满足即短路,后面不执行
int a = 0;

System.out.println( a == 0 && a++ == 0);
System.out.println("a = " + a);

System.out.println( a == 0 && a++ == 0);   //short circuit calculation
System.out.println("a = " + a);

System.out.println( a == 0 || a++ == 0);
System.out.println("a = " + a);

System.out.println( a == 2 || a++ == 0);   //short circuit calculation
System.out.println("a = " + a);

运行结果为

true
a = 1
false
a = 1
false
a = 2
true
a = 2

位运算

符号描述运算规则
&两位均为1时,结果为1,否则为0
\两位均为0时,结果为0,否则为1
^异或两位相同为0,相异为1
~取反0变1,1变0
<<左移各二进位全部左移若干位,高位丢弃,低位补0
>>右移各二进位全部右移若干位,无符号数高位补0

intToBinary() 函数及位运算举例:

/** convert the integer to the binary and append zero in front */
public static String intToBinary(int num) {

    //1.append zero
    String binaryStr = Integer.toBinaryString(num);

    int bitNum = 8;
    if(bitNum < binaryStr.length()) {
        bitNum += bitNum;
    }

    while(binaryStr.length() < bitNum){
        binaryStr = "0"+binaryStr;
    }

    //2.format
    String str = "";

    for (int i = 0; i < binaryStr.length();) {
        str += binaryStr.substring(i, i=i+4)+",";
    }

    //3.return
    return str.substring(0, str.length()-1);

}

public static void main(String[] args) {

    int A = 0B0011_1100;
    int B = 0B0000_1101;

    System.out.println("A = " + intToBinary(A) );
    System.out.println("B = " + intToBinary(B) );

    System.out.println("--------------------");

    System.out.println("A&B = " + intToBinary(A&B) );
    System.out.println("A|B = " + intToBinary(A|B) );
    System.out.println("A^B = " + intToBinary(A^B) );
    System.out.println("~A = " + intToBinary(~A) );
    System.out.println("~B = " + intToBinary(~B) );

}

输出结果为

A = 0011,1100
B = 0000,1101
--------------------
A&B = 0000,1100
A|B = 0011,1101
A^B = 0011,0001
~A = 1111,1111,1111,1111,1111,1111,1100,0011
~B = 1111,1111,1111,1111,1111,1111,1111,0010

面试题:2*8 怎么运算最快?

答案:2*2*2*2

解释:位运算效率极高,此处采用左移运算 <<

条件运算

条件运算符 ? : 为三元运算符。

int a = 1;

System.out.println(a == 0 ? "true" : "false");
System.out.println(a == 1 ? "true" : "false");

运行结果为

false
true

扩展赋值运算

int a = 1;
int b = 2;

a += b;   //a = a + b
System.out.println("a = " + a);
a -= b;   //a = a - b
System.out.println("a = " + a);
a *= b;   //a = a * b
System.out.println("a = " + a);
a /= b;   //a = a / b
System.out.println("a = " + a);

运行结果为

a = 3
a = 1
a = 2
a = 1

Math类拓展

Math类中的 pow() 函数可以实现幂运算,如:

$$ 2^{10}=1024 $$

double pow = Math.pow(2,10);
System.out.println("pow = " + pow);

运行结果为

pow = 1024.0

7 包机制

为了更好的组织类,Java提供了包机制,用于区别类名的命名空间。
包的本质就是文件夹。

包语句一定要放在第一行

package package1[.package2[.package3…]];

一般利用公司域名倒置作为包名,如 com.baidu.www

为了能够使用某一个包的成员,我们需要在Java程序中明确导入该包。
使用 import 语句可以完成此功能:

import package1[.package2…].(classname|*);

* 为通配符,可以导入包下的所有类。


8 JavaDoc文档注释

可以通过javadoc命令来生成自己的API文档。

javadoc -help

// javadoc -encoding UTF-8 -charset UTF-8 解决中文问题。

参数信息:

  • @author 作者名
  • @version 版本号
  • @param 参数名
  • @return 返回值详情
  • @throws 异常抛出详情
  • ...

感谢 狂神说 提供的java学习资源。


暂无评论

发表评论