接上文《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 - 在同一包下可以访问,不同包下的子类可以访问;