005常用的几个关键字+其它杂谈

一.常见的几个关键字

关键字_this:①this在方法内部使用,即这个方法所属对象的引用。②this在构造器内部使用,表示该构造器正在初始化的对象。③this表示当前对象,可以调用类的属性、方法和构造器。④当在方法内需要用到调用该方法的对象时,就用this。

关键字_super:①super可用于访问父类中定义的属性。②super可用于调用父类中定义的成员方法。③super可用于在子类构造器中调用父类的构造器。

注意:①当子类和父类出现同名成员时,需要用super进行区分。②super的追溯不仅限于直接父类。③super和this的用法相像,this代表本类对象的引用,super代表父类的内存空间的标识。

使用:①当子类与父类中有同名的属性时,可以通过“super.属性”显式的调用父类中声明的属性。若想调用子类同名的属               性“this.属性”。②当子类重写父类的方法后,在子类中若想再显式的调用父类被重写的方法,就需要用“super.方法”。③super修饰构造器,通过在子类中使用“super(形参列表)”来显式的调用父类中指定的构造器。在构造器内部,“super(形参列表)”必须要声明在首行。在构造器内部,“this(形参列表)”或“super(形参列表)”只能出现一个。当构造器中不显式的调用this(形参列表)”或“super(形参列表)”其中的任何一个,默认调用的是父类空参的构造器。建议设计一个类时,尽量提供一个空参的构造器。

关键字_super与关键字_this的区别

子类对象实例化过程

关键字_package:声明源文件所在的包,写在程序的第一行,每“.”一次,表示一层文件目录。包名都要小写。

关键字_import:①显示导入指定包下的类或接口。②写在包的声明和源文件之间。③如果需要引入多个类或接口,那么就并列写出。④如果导入的类是java.lang包下的,如:System String Math等,就不需要显示的声明。

关键字_static:①我们通常在编写一个类时,只有通过new关键字才会产生实质上的对象,这时系统才会分配内存空间给对象,方法属性才可以被外部调用。我们有时希望无论是否产生了对象或无论产生多少对象,某些数据在内存空间只有一份,所以我们引入了关键字static的概念。②static静态的,可以用来修饰属性、方法、*代码块(或初始化块)、*内部类。

static修饰属性(类变量):①由类创建的所有对象,都共用这一个属性。②当其中一个对象对此属性进行修改,会导致其他对象对此属性的一个调用。vs实例变量(非static修饰的属性, 各个对象各自拥有一套副本)。③类变量是随着类的加载而加载,而且独一份。④静态的变量可以直接通过“类.类变量”的形式来调用。⑤类变量的加载早于对象。所以当有对象以后,可以通过“对象.类变量”使用,但是“类.实例变量”是不可以的。⑥类变量存在于静态域中。

static修饰方法(类方法):①随着类的加载而加载,在内存中也是独一份。②可以直接通过“类.类方法”的方式调用。③静态方法内部可以通过静态的属性或静态的方法,而不能调用非静态的属性和方法。非静态方法内部是可以调用静态的属性或静态的方法。静态的方法内是不可以有this和super关键字的。

注:静态的结构(static的属性、方法、代码块、内部类)的生命周期要早于非静态的结构,同时被回收也要晚于非静态的结构。

设计模式及单例设计模式的饿汉式实现:①设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。大约有23中设计模式。②单例的设计模式:解决的问题:使得一个类只能够创建一个对象。

饿汉式如何实现?

class Singleton {
	// 1.私有化构造器,在类的外部不能够调用此构造器。
	private Singleton() {
    }

	// 2.自己在类的内部创建一个实例
	private static Singleton instance = new Singleton();
	// 3.私有化此对象,通过公共的方法来调用
	// 4.此公共的方法,只能通过类来调用,因此设置成为static的,同时类的实例也必须为static声明的
	Public

	static Singleton getInstance() {
		return instance;
	}
}

懒汉式如何实现?

class Singleton {
	private Singleton() {
    }

	private static Singleton instance = null;
	Public static Singleton getInstance() {
		if (instance == null) {
			Instance = new Singleton();
        }
		return instance;
	}
}
// 可能存在线程安全问题

关键字_final:在Java中声明类、属性和方法时,可使用关键字final来修饰,表示“最终”。①final标记的类不能被继承。提高安全性,提高程序的可读性。String类、Syetem类、StringButter类。②final标记的方法不能被子类重写。 Object类中的getClass()。③final标记的变量(成员变量或局部变量)即称为常量,一旦被初始化后,不可以再被赋值。名称大写,且只能被赋值一次。final标记的成员变量必须在声明的同时或者在每个构造方法中或者在代码块中显示的赋值,然后才能使用。(此常量不能使用默认初始化、可以显示的赋值)。

class Test {
	final int I = 1;
	final double D;
	final String S;
	{
		D = 2.0;
	}
	public Test() {
		S = “3”;
	}
	public Test(String s){
		this();
		//S = s;
}

二.其它杂谈

内存划分结构

栈stack:存放局部变量,对象的引用名,数组的引用名 

①栈描述的是方法执行的内存模型。每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等)②JVM为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数、局部变量等)③栈属于线程私有,不能实现线程间的共享!④栈的存储特性是“先进后出,后进先出”⑤栈是由系统自动分配,速度快!栈是一个连续的内存空间!    

堆heap:存放new出来的东西(如对象的实体、数组的实体),含成员变量

①堆用于存储创建好的对象和数组(数组也是对象)②JVM只有一个堆,被所有的线程共享③堆是一个不连续的内存空间,分配灵活,速度慢!

方法区:含字符串常量

静态域:声明为static的变量

方法区又叫静态区:①JVM只有一个方法区,被所有线程共享!②方法区实际也是堆,只是用于存储类、常量相关的信息!③用来存放程序中永远是不变或唯一的内容。(类信息[Class对象]、静态变量、字符串常量等)

垃圾回收原理和算法

内存管理

Java的内存管理很大程度上指的就是对象的管理,其中包括对象空间的分配和释放。分配用new就行,释放为对象赋值null就行。垃圾回收器将负责回收所有“不可达”对象的内存空间。

垃圾回收算法一般要做两件事情①发现无用的对象②回收无用对象所占的内存空间,无用对象指的是没有任何变量引用该对象。

垃圾回收机制相关算法①引用计数法,对象有一个引用计数,每次被引用一次,计数加一,被引用变量 值为空,计数减一,计数为0,表示无用对象,缺点是循环引用的无用对象无法识别。②引用可达法

分代垃圾回收机制

对不同周期的对象采用不同的回收算法来提高回收效率,我们将对象分为三种状态,年轻态年老代 持久代。

Minor GC用于清理年轻代区域。Major GC用于清理老年代区域。Full GC用于清理年轻代、年老代区域,成本较高,会对系统性能产生影响。

JDK新特性之可变参数的传递

格式:对于方法的形参。数据类型 … 形参名

可变个数的形参的方法与同名的方法之间构成重载。可变个数的形参在调用时,个数从0开始,到无穷多个都可以。使用多变多个形参的方法与方法的形参使用数组是一致的。若方法中存在多个可变个数的形参,那么一定要声明在方法形参的最后。在一个方法中,最多恒明一个可变个数的形参。

所谓JavaBean是指符合如下标准的Java类

①类是公共的。②有一个无参的公共的构造器。③有属性,且有对应的get、set方法。

权限修饰符可以用来修饰属性和方法

UML类图

关于面向对象的总结

 

发布了23 篇原创文章 · 获赞 7 · 访问量 1795

猜你喜欢

转载自blog.csdn.net/weixin_44145972/article/details/88925141