天天看点

Java基础复习(六)面向对象的三大特征Java基础复习(六)面向对象的三大特征

Java基础复习(六)面向对象的三大特征

一 封装:

1.封装的表现形式:

把对象的属性和方法编写到一个Java类中,这就是一种封装。类中的方法,本身也是一种封装,将完成一定功能的代码封装在方法体中,实现代码的重用,方法的使用者不需要关心方法的具体实现,只需要调用方法即可。

2.封装的途径:

把属性隐藏起来,对外提供访问这些属性的方法

在Java编程中,通常作法是,使用 private 访问修饰符“控制”外部对象,对成员变量的访问权限。然后,给它们(成员变量)提供公开的 (public) 访问的方法。外部“使用者”只能通过 public 的 setter | getter 方法读写属性的值。

引用类型变量作为方法的参数

当方法的参数为基本数据类型的时候,对形参的修改不会改变实参的值;

而当方法的参数为引用数据类型的时候,实参会把引用即内存地址传递给形参,这样相当于,实参与形参,指向了内存中“同一个对象”,所以如果当方法参数为引用数据类型的时候,对方法的形参的修改(实际上修改的是形参指向的堆内存中的对象),会影响到实参的状态。

方法(函数)的重载

在同一个类中,可以有多个同名函数,只要其参数个数或者参数类型不同,即可(和返回类型没有关系)。

口诀:方法名相同,参数列表不同,返回值类型不管。

方法重载的意义就是方法的功能相同,只是参数不同,这样需要使用到方法的重载,即实现同样的功能,但是实现功能的途径(实现的方式)不同。

单例类

保证一个类只有一个实例,并且提供一个访问他的全局访问点。

单例模式分为下面几种:

一.饿汉式:

步骤:

1.私有化构造方法;

2.提供一个公共的方法,这个方法可以返回该类的实例对象;

3.创建一个私有化的静态的类的对象

public class A{
	private static A a = new A();
	private A(){
		System.out.println("创建了一个A的实例对象");
	}
	// 提供一个公有的可以返回类对象的方法
	public static A getSingleton(){
		return a;
	}
}
           

这种方法容易造成内存浪费,也未达到延迟加载的效果。

二.懒汉式(线程安全式):

步骤:

1.私有化构造方法;

2.提供一个公共的方法,这个方法可以返回该类的实例对象;

3.创建一个私有化的静态的类的对象 这里创建类的对象的时候不要直接new出来;

4.在我们的返回对象的公共方法中写一个判空的处理

public class A{
	private static A a = null;
	private A(){
		System.out.println("创建了一个A的实例对象");
	}
	public static synchronized A getSingleton() {
        if(a == null) {
            a = new A();
        }
        return a;
    }
}
           

不足:效率低。大多数情况下这个锁占用的额外资源都浪费了,每个线程在想获得类的实例时候,执行 getSingleton() 方法都要进行同步

三.静态内部类加载:

静态内部类不会在单例加载时加载,当调用 getSingleton() 方法时才会进行加载,达到类似懒汉式效果,并且也是线程安全的。

类的静态属性只会在第一次加载类时进行初始化,所以上面的方法JVM 帮助我们保证了线程的安全性,在类进行初始化时,其他线程无法进入。

加载一个类时,其内部类不会同时被加载。一个类被加载,当且仅当其某个静态成员(静态域、构造器、静态方法等)被调用时发生,也就是说内部类:AInner只有我们调用getSingleton()的时候才会被加载。

public class A{
	private static class AInner{
	private final static A instance = new A();
	}
	public static  A getSingleton(){
		return AInner.instance;
	}
	private A(){
	}
}