【笔记】Java语法

Java语法

兜兜转转,又绕回到Java了。
最近在学习Java,其实以前也学过,但是技术发展太快了,Java都出到14了。。是时候该更新一下知识体系了。
然后看的是网上好评如潮的《Java核心技术 卷Ⅰ》和《Java编程思想》。
不过,我感觉这两本书都有点长篇大论,比较适合初学者看,不适合复习。。
这两本书看过几页后,如果不做笔记,基本等于看了个寂寞。
然后也因为现在的Java,知识点还挺多的,所以把一些知识点记录下来。
总共分两篇,这篇记录Java的语法,下一篇记录Java常用的类库
不打算写得过于详细,详细内容还是直接看书吧,这两篇文章当作纲要来用。


注释

点击查看详情
// 行注释
// 这是一行注释

// 块注释
/*
    这是一块注释
    这是一块注释
    这是一块注释
*/

// 文档注释
/**
* 这是一个文档注释
* 这是一个文档注释
* 这是一个文档注释
*/

修饰符

点击查看详情
  • 访问控制
    • public
    • protected (子类或包内)
    • private
    • default (包内)
  • static
    • 静态初始化代码块
    • 静态字段
    • 静态方法
    • 嵌套类
  • final
    • 常量
    • 常字段
    • 最终方法
    • 最终类
  • abstract
    • 抽象方法
    • 抽象类
  • default
    • 默认方法
  • synchronized
    • 同步代码块
    • 同步方法
  • volatile
    • 共享字段
  • transient
    • 非序列化字段
  • strictfp
    • 严格浮点方法
    • 严格浮点类
  • native
    • 原生方法

基本数据类型

点击查看详情
// 布尔
boolean x = false;

boolean[] a = {true};

// 整数
byte x = 0;
short x = 0;
int x = 0;
long x = 0L;

int[] a = {1_2345_6789, 0B0_1111_1111, 0X0_FFFF_FFFF};

// 浮点数
float x = 0.0F;
double x = 0.0;

double[] a = {3.14, 1.0E5, 0X1.0P-5};

// 字符
char x = '\0';

char[] a = {'A', '"', '\s', '\n', '\uFFFF'};

// 字符串
String x = null;

String[] a = {"", "Hello!", """
    <html>
        <header></header>
        <body>
            <div>"lalala"</div>
        </body>
    </html>
"""};

// 引用
Object x = null;

数组

点击查看详情
var a = new int[5];
var a = new int[]{1, 3, 5, 7, 9};
int[] a = {1, 3, 5, 7, 9};

枚举

点击查看详情
enum A{
    A0,
    A1,
    A2,
}

类型转换

点击查看详情
char -> int
byte -> short -> int -> long
float -> double

int ~> float
int -> double
long ~> float
long ~> double

any -> Object

运算符

点击查看详情
// 类型转换
(type)x

// 符号
+x
-x

// 自加、自减
++x
--x
x++
x--

// 算术
x+y
x-y
x*y
x/y
x%y

// 移位
x<<y
x>>y
x>>>y

// 按位
~x
x|y
x&y
x^y

// 比较
x==y
x!=y
x<y
x>y
x<=y
x>=y

// 逻辑
!x
x||y
x&&y

// 条件
c?vt:vf

// 赋值
x = y

// 算术赋值
x += y
x -= y
x *= y
x /= y
x %= y

// 移位赋值
x <<= y
x >>= y
x >>>= y

// 按位赋值
x |= y
x &= y
x ^= y

// 实例
obj instanceof type x

// switch
var r = switch(x){
    case k00, k01 -> v0;
    case k1 -> v1;
    case k2 -> {
        s2;
        yield v2;
    }
    default -> v;
};

控制流程

点击查看详情
// if-else
if(c0){
    s0;
}else if(c1){
    s1;
}else{
    s2;
}

// switch
switch(x){
    case k00, k01 -> s0;
    case k1 -> s1;
    case k2 -> {
        s2;
    };
    default -> s;
}

// while
while(c){
    s;
}

// do-while
do{
    s;
}while(c);

// for
for(sb; c; sa){
    s;
}

// foreach
for(x: it){
    s;
}

// other
continue;
break;
break label;
return;
return obj;

面向对象

点击查看详情
  • 继承 (is-a)
  • 聚合 (has-a)
  • 依赖 (uses-a)
// 类
class A extends B implements C, D{
}

// 抽象类
abstract class A{
    public abstract void m();
}

// 接口
interface A{
    void m0();
    default void m1(){
        s;
    }
}

// 嵌套类
class A{
    public static class B{
    }
}

// 内部类
class A{
    public class B{
    }
}

// 局部类
class A{
    public void m(){
        class B{
        }
    }
}

// 匿名类
interface A{
}
class B{
    public void m(){
        var x = new A(){
        };
    }
}

泛型

点击查看详情
// 泛型方法
class A{
    public <T> void m(){
        s;
    }
}

// 泛型类
class A<T>{
}

// 泛型上界
<T extends A>

// 泛型下界
<T super A>

// 泛型通配符
<?>
<? extends A>
<? super A>

函数式

点击查看详情
// 函数式接口
interface A{
    void m();
}

// lambda表达式
() -> {
    s;
};

// 方法引用
A::m

// 构造器引用
A::new

注解

点击查看详情
  • 内置元注解
    • @Retention
    • @Target
    • @Inherited
    • @Repeatable
    • @Documented
    • @Native
  • 内置注解
    • @Override
    • @Deprecated
    • @SuppressWarnings
    • @SafeVarargs
    • @FunctionalInterface
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD})
@interface A{
    public int id() default 0;
    public String desc() default "";
}

异常处理

点击查看详情
  • Throwable
    • Error (非检查型)
    • Exception
      • RuntimeException (非检查型)
      • IOException (检查型)
      • … (检查型)
// 抛出异常
class A{
    public void m() throws Exception{
        throw new Exception();
    }
}

// 捕获异常
// try-catch-finally
try{
    s0;
}catch(x){
    s1;
}finally{
    s2;
}

// try-with-resources
try(rsc){
    s0;
}catch(x){
    s1;
}finally{
    s2;
}

断言

点击查看详情
assert c;
assert c: x;

Tags: