JAVA08——垃圾回收机制_构造器_重载_static关键字

目录

垃圾回收机制

对象空间的分配

对象空间的释放

要点

构造器

例题

重载(overload)

static关键字


垃圾回收机制

对象空间的分配

        使用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

内存分析:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值