目录
垃圾回收机制
对象空间的分配
使用new关键字创建对象即可
对象空间的释放
将对象赋值null即可。垃圾回收器将负责回收所有”不可达”对象的内存空间。
要点
- 程序员无权调用垃圾回收器。
- 程序员可以通过 System.gc()通知GC运行,但是JAVA规范并不能保证立刻运行。(发一条建议)
- finalize方法,是JAVA提供给程序员用来释放对象或资源的方法。(尽量少用)
构造器
构造器又称为构造方法, constructor
构造器用于构造该类的实例
格式如下:
[修饰符] 类名(形参列表){
//n条语句
}
是一种特殊的方法:
1.通过new关键字调用
2.构造器虽然有返回值,但是不能定义返回类型(返回值的类型肯定是本类),不能在构造器里调用 return。
3.如果我们没有定义构造器,则系统会自动定义一个无参的构造函数。
如果已定义则编译器不会添加
4.构造器的方法名必须和类名一致
5.作用:构造该类的对象,经常也用来初始化对象的属性
eg:
Car.java
public class Car {
int speed;
public Car(){
System.out.println("构造一辆车");
}
}
TestConstructor.java
public class TestConstructor {
public static void main(String[] args) {
Car c = new Car();
}
}
生成对象时会执行构造器的语句
运行结果:
构造一辆车
例题
定义一个“点”(Point)类用来表示三维空间中的点(有三个坐标)。要求如下:
可以生成具有特定坐标的点对象
提供可以设置三个坐标的方法
提供可以计算该“点”距另外点距离的方法
public class Point {
double x,y,z;
public Point(double _x,double _y,double _z){
x = _x;
y = _y;
z = _z;
}
public void setX(double _x){
x = _x;
}
public void setY(double _y){
y = _y;
}
public void setZ(double _z){
z = _z;
}
public double distance(Point p){
double result = Math.sqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y)+(z-p.z)*(z-p.z));
return result;
}
public static void main(String[] args) {
Point p = new Point(3,4,8);
Point p1 = new Point(0,0,0);
System.out.println(p.distance(p1));
p.setX(10);
System.out.println(p.x);
}
}
运行结果:
9.433981132056603
10.0
重载(overload)
方法的重载是指一个类中可以定义有相同的名字,但参数不同的多个方法。调用时,会根据不同的参数表选择对应的方法。
- 两同三不同
同一个类,同一个方法名
不同:参数列表不同(类型,个数,顺序不同) - 只有返回值不同,不构成方法的重载
只有形参的名称不同,不构成方法的重载 - 与普通方法一样,构造方法也可以重载
eg:
public class TestOverload {
public static void main(String[] args) {
MyMath m = new MyMath();
int result = m.add(4,5);
int result1 = m.add(4,5,8);
int result2 = m.add(4.5,5);
int result3 = m.add(4,5.7);
System.out.println(result);
System.out.println(result1);
System.out.println(result2);
System.out.println(result3);
}
}
class MyMath{
public int add(int a,int b){
return a+b;
}
public int add(int a,int b,int c){
return a+b+c;
}
public int add(double a,int b){
return (int)(a+b);
}
public int add(int b,double a){
return (int)(a+b);
}
}
static关键字
在类中,用 static声明的成员变量为静态成员变量,或者叫做:类属性,类变量。
- 它为该类的公用变量,属于类,被该类的所有实例共享,在类被载入时被显式初始化
- 对于该类的所有对象来说, static成员变量只有—份。被该类的所有对象共享
- 可以使用”对象.类属性”来调用。不过,一般都是用“类名.类属性”
- static变量置于方法区中
用 static声明的方法为静态方法
- 不需要对象,就可以调用(类名方法名)
- 在调用该方法时,不会将对象的引用传递给它,所以在 static方法中不可访问非 static的成员。
eg:
Student.java
public class Student {
String name;
int id;
static int ss;
public static void printSS(){
System.out.println(ss);
}
public void study(){
System.out.println(name+"在学习");
}
public void sayHello(String sname){
System.out.println(name+"向"+sname+"说:你好!");
}
}
Test.java
public class Test {
public static void main(String[] args) {
Student.ss = 323;
Student.printSS();
Student s1 = new Student();
}
}
运行结果:输出323
内存分析: