JavaSE 基础学习之二 —— Java 的部分基本语法

接上文《JavaSE 基础学习之一 —— Java 的简介》


二. Java 的部分基本语法

注:本篇文章部分记录时,老师默认我们有较佳的编程功底,故该部分讲的不深入,所以本篇笔记整理的比较简单随意。

1. 类

  • 类的成员变量:把数据(属性)进行抽象,用变量表示;
  • 类的成员函数:把行为进行抽象,用函数(方法)表示;

类中只能有成员变量和成员函数。

2. 对象

对象就是类的具体实例。

3. 构造函数

  • 函数名和类名相同;
  • 无任何返回值类型,连 void 都没有;
  • 构造函数的主要作用是给成员变量初始化;
  • 创建对象时,构造函数会自动调用,创建一次对象,就会调用一次构造函数。
    • 如果一个类没有写构造函数,则 jvm 会给一个无参数的默认构造函数,即 public 类名 (){}
    • 一旦自己声明了构造函数,则这个无参数的默认构造函数就不存在了;

注:Java 数据变量的默认值都为 0

4. this 引用

  • this 引用是指当前对象的引用,即调用该函数的那个对象的引用;
  • 什么时候可以省略 this ?
    • 一个普通的成员函数访问一个普通的成员变量,前面都可以省略 this
  • this(args) 的函数调用:在一个构造函数中的第一句,可以去调用另一个构造函数;

5. 函数重载

  • 函数重载,即同一个类中的一组函数,函数名称相同,形参不同,与返回值类型无关。
  • 调用时,回根据参数的个数和类型自动匹配。
    • 注:匹配过程中,系统会找最精确的函数,如果找不到的话,就会寻找能够匹配上的函数;

6. 构造函数的重载

略。

7. 可变参数

  • Java 中的数组,略
  • 如果有多个参数,可变参数必须是最后一个,jvm 会将其当做数组处理;

例:

int add(int ...a) {
    int sum = 0;
    for(int i : a) sum += i;
    return sum;
}

练习:
写一个点类:

  • 行为:
    • 求一个点到圆心的距离
    • 求一个点到另外一个点的距离
  • 注:用到 Math.sqrt()

作业:

package MyPoint;

public class MyPoint {
    MyPoint(double x, double y) {
        this.x = x;
        this.y = y;
    }
    double x, y;

    double calcuRawDistance() {
        return Math.sqrt(x*x + y*y);
    }
    double calcuDistance2pt(MyPoint pt) {
        return Math.sqrt(Math.pow((this.x - pt.x), 2) + Math.pow((this.y - pt.y), 2));
    }
    
    public static void main(String[] args) {
        MyPoint pt1 = new MyPoint(1,2);
        MyPoint pt2 = new MyPoint(5,7);
        System.out.println("Raw Distance: " + pt2.calcuRawDistance());
        System.out.println("Distance to Point1: " + pt2.calcuDistance2pt(pt1));
    }
}


8. 定义初始化

  • 在构造函数之前执行定义初始化。每次创建对象,都会调用一次定义初始化与构造函数。

注:Java 在类中的成员定义时,无顺序关系,都是并列的。

9. 静态成员

静态成员变量

  • 静态成员变量属于类,不属于某个实例对象,所有实例对象共享同一个静态成员变量。
  • 用到类,静态成员变量就会加载,且只加载一次。
  • 静态成员变量的调用在定义初始化与构造函数之前。
  • 静态成员直接用类名访问,也可以通过对象进行访问,不过不建议。
  • 静态定义初始化

静态成员方法
如:

public class Adder {
    // 参数的 ... : jvm 底层将其自动当做数组传入
    static int add(int...a) {
        int sum = 0;
        for(int i : a) {
            sum += i;
        }
        return sum;
    }
}
  • 一般使用类名进行访问,如上例中,调用方法为:Adder.add();
  • 也可以通过对象访问,不过不建议;
  • 静态成员方法只能访问静态成员;

练习:
写一个点类(坐标,构造函数,到圆心的距离,到另外一个点的距离)
再写一个矩形类:

  • 成员:
    左上角坐标,宽度和高度(用于确定一个矩形)
  • 方法:
    判断一个点在不在矩形内,计算矩形的面积和周长;

作业:

package MyPoint;

public class Rect {
    MyPoint location;
    double width, height;
    
    Rect(MyPoint location, double width, double height) {
        this.location = location;
        this.width = width;
        this.height = height;
    }
    
    Rect(double x, double y, double width, double height) {
        this(new MyPoint(x, y), width, height);
    }
    
    double getLength() {
        return 2 * (width + height);
    }
    double getArea() {
        return width * height;
    }
    boolean contains(MyPoint p) {
        return p.x >= location.x && p.y >= location.y 
                && (p.x - location.x) <= width && (p.y - location.y) <= height;
    }
    boolean contains(double x, double y) {
        return contains(new MyPoint(x, y));
    }
}

10. 包,访问权限

  • 包 Package - 包是类名的一部分,如 aa.Person 中,aa 即为包名;
    • import 用于导入包;
    • java.lang 包下的类不用导包,可以直接使用;
  • 访问权限
    • public - 可以修饰类,成员,可以在不同包下访问;
    • private - 用于修饰成员,只能在类的内部访问
    • 默认的 - 只能在同一包下访问;
    • protected - 在同一包下可以访问,不同包下的子类可以访问;

接下篇《JavaSE 基础学习 —— Java 的继承与接口》

你可能感兴趣的:(JavaSE 基础学习之二 —— Java 的部分基本语法)