Day08
一、java中内存的管理
1、堆
-存储的是创建的对象
-成员变量
-成员变量的生命周期
-生 对象的创建
-死 对象的销毁
2、栈(先进后出)
-栈里面存的是方法调用(局部变量的调用)
-局部变量
生命周期
-生 方法的调用(又名压栈)
-死 方法的调用结束(又名弹栈)
3、方法区
-方法区存储的数据只保存一份
二、垃圾回收器(GC)
-gc认为是垃圾的对象,是这个对象没有引用去指向。
-java中为了避免内存泄漏,需要在使用对象之后,将该对象的引用置null,再确认不用的情况下才置null,如果还需要就不要置null,否则就会出现空指针异常。
-如果一个对象没有引用指向他,那么gc会认为这个对象为垃圾对象,才会被回收。gc的调用会占用大量系统资源,尽量不要让gc频繁启动,gc的调用不需要程序猿调用,系统会自己调用,我们只能告诉系统尽快调用,如(system.gc();)
三、总结一下,重载和重写的区别
1、重载(overloading):
-就是让类以统一的方式处理不同类型的数据的一种手段。多个同名函数存在,具有不同的参数个数和类型。重载是一个类中多态性的一种表现。
-java方法的重载就是在类中可以创建多个方法,他们具有相同的名字,但具有不同的参数类型和不同的定义。调用方法时通过传递给他们的不同参数个数和参数类型来决定具体使用那种方法,这就是多态性。
-重载的时候,方法名要一样,但是参数个数和类型不一样,返回值类型可以相同也可以不相同。
实例:
package com.auto.system;
public class Text01 {
public Text01() {
this.bark();
}
void bark() {
System.out.println("狗杂再叫");
}
void bark(String m,double a) {
System.out.println(m+a+"在犬吠");
}
void bark(int a,String m) {
System.out.println(a+m+"在比比比");
}
public static void main(String[] args) {
Text01 dog=new Text01();
dog.bark();
dog.bark(3, "哈士奇");
dog.bark("土狗阿黄",3.5);
}
}
2、重写(override):
-父类与子类的多态性,对父类的函数进行重新定义。如果子类中定义某方法与父类有相同的名称和参数,我们说该方法被重写。在java中,子类可以继承父类的方法,而不需要重新编写相同的方法。但有时候子类并不想原封不动的继承父类的方法,而是想做一定的修改,这就需要采用重写。
-若子类中的方法与父类中的某一方法具有相同的方法名,返回类型和参数表,则新方法将覆盖原来的方法,如需要父类中原来的方法,可使用super关键字来引用父类的方法。
-子类函数的访问权限修饰不能少于父类的。
实例:
package com.auto.system;
public class Text01 {
public Text01() {
this.bark();
}
void bark() {
System.out.println("狗杂再叫");
}
void bark(String m, double a) {
System.out.println(m + a + "在犬吠");
}
void bark(int a, String m) {
System.out.println(a + m + "在比比比");
}
}
public class bigDog extends Text01 {
void bark(int a, String m) {
System.out.println(a + m + "在哔哩哔哩");
}
public static void main(String[] args) {
bigDog dog = new bigDog();
dog.bark();
dog.bark(3, "哈士奇");
dog.bark("土狗阿黄", 3.5);
}
}
3、总结
-方法的重写和重载是java多态性的不同表现,重写是父类与子类之间的多态性的表现,重载是一个类中多态性的表现, 如果在子类中定义某方法与其父类有相同的参数和名称,我们就说该方法是重载。
四、接口(修饰符是interface)
1、接口是一个特殊的类
-接口中的方法全都是抽象的(但是可以不用写抽象的修饰符,可以简写)
-接口没有构造器
-接口中没有变量,所有的属相都是常量(都是static final 修饰)(常量的名称都是大写要注意)
-接口中访问的修饰符都是public
-接口可以多实现,一个类可以实现多个接口。
-接口与接口之间可以多继承。
2、接口的关键字
-如何定义一个接口(使用interface定义即可)
-如何实现一个接口(使用implements 来实现)
-接口不能new
-接口的作用
-接口的作用主要用来设计
-用来解耦
五、java中的定时器
1、什么是定时器?定时去执行的,不需要我们去操作,定时器功能类也是系统写好的(TimerTask)
这个类本身就是一个抽象类,里面定义了一个抽象方法public abstract void run();我们需要重写run方法,在run里面定义我们自己所需要的定时执行的内容。
实例:
package javaSEDay13;
import java.util.Timer;
import java.util.TimerTask;
public class Time {
public static void main(String[] args) {
Timer timer=new Timer();
timer.schedule(new TimerTask() {
public void run() {
System.out.println("i am king");
}
}, 5000, 1000);
}
}
六、引用数据的气球理论
几个引用指向一个对象,任何引用操作了对象,都会导致其他引用发生改变
七、java中值传递和引用对象传递
1、值传递
-基本数据类型,string
2.引用对象传递
-引用数据类型
数组是引用数据类型。数组的扩容和缩容可以理解为值传递。