面向对象三大特征
一.封装
封装概述
是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处:
隐藏实现细节,提供公共的访问方式
提高了代码的复用性
提高安全性。
封装原则:
将不需要对外提供的内容都隐藏起来。
把属性隐藏,提供公共方法对其访问。
private关键字:
是一个权限修饰符。
可以修饰成员(成员变量和成员方法)
被private修饰的成员只在本类中才能访问。
private最常见的应用:
把成员变量用private修饰
提供对应的getXxx()/setXxx()方法
构造方法
构造方法作用概述
给对象的数据进行初始化
构造方法特点:
方法名与类名相同
没有返回值类型,连void都没有
没有具体的返回值
与普通方法一样,构造方法也可以重载,在一个类中可以定义多个构造方法,
只要每个构造方法的参数类型或参数个数不同即可。在创建对象时,
可以通过调用不同的构造方法来为不同的属性进行赋值。
***补充:匿名对象:***
概念:没有名字的对象!
之前的格式:
类名 对象名 = new 类名() ;
匿名对象的创建格式:
new 类名() ;
特点:
1)可以作为形式参数传递!
2)匿名对象不要使用多次,使用一次即可!
匿名对象,应用场景:
移动端:android 大量去使用匿名对象 或者匿名内部类
匿名对象创建完毕,使用完毕就立即被回收(节省内存空间)
this关键字
this:代表所在类的对象引用
为了区分:局部变量隐藏成员变量: this.成员变量;
记住:
方法被哪个对象调用,this就代表那个对象
什么时候使用this呢?
局部变量隐藏成员变量
其他用法后面和super一起讲解
static关键字
static关键字的特点:
1)被static修饰的成员,随着类的加载而加载 (类就加载一次!)
javac xxx.java---->xxx.class (字节码文件)
java xxx ---->运行---->加载类的时候,对象还没开始创建
2)优先于对象存在
对象的创建是在类加载的后面
3)有被共享,共用的意思
这句话:告诉我们什么时候使用static修饰变量,方法
能够描述被共用,共享的时候
举例:
班级号可以被共用
饮水机:可以被共用
水杯中的水(不能共用)
4)最重要的特点:
被static修饰的变量以及方法可以被类名直接访问!(推荐类名直接访问)
这些被static修饰变量/方法,也可以通过对象名来访问(不推荐!)
static关键字注意事项
在静态方法中是没有this关键字的
静态方法只能访问静态的成员变量和静态的成员方法
静态变量与成员变量的区别:
- 所属不同
静态变量属于类,所以也称为为类变量
成员变量属于对象,所以也称为实例变量(对象变量)
- 内存中位置不同
静态变量存储于方法区的静态区
成员变量存储于堆内存
- 生命周期不同
静态变量随着类的加载而加载,随着类的消失而消失
成员变量随着对象的创建而存在,随着对象的消失而消失
- 调用不同
静态变量可以通过类名调用,也可以通过对象调用
成员变量只能通过对象名调用
Java中代码块:
使用{}包起来的内容,就称为代码块!
分类:
1)局部代码块
在局部位置中定义的{},作用:限定变量的声明周期
2)构造代码块
在类的成员位置中定义{},
特点:在当前类中,有限执行构造代码块,然后在执行构造方法...
(每次执行构造方法之前先执行构造代码块)
构造代码块的作用:对当前类的数据进行初始化!(很少用,笔试题!)
3)静态代码块
在{}的前面加上static
static{
....
}
静态代码块随着的类的加载而加载,由于类加载一次,静态代码块执行一次!
优先级:
(1)静态代码块在加载类的时候执行,由于类只在第一次使用时
被加载,且只加载一次,因此静态代码块只执行一次。在实
际开发中,经常有一些代码需要在类加载时就执行,比如加
载数据库驱动,这些代码就应该放在静态代码块中。如果包
含多个静态代码块,先定义的先执行。
(2)构造代码块在创建类的实例对象时执行,也就是说每创建类
的一个实例对象,都会执行一次构造代码块。从运行结果可
以看到,构造代码块先于构造方法执行。因此在实际开发中
可以把重载构造方法中重复的代码抽取到构造代码块中执
行。
(3)局部代码块定义在方法中,它在方法被调用的时候执行。使
用局部代码块是为了限制变量的生命周期,使得变量在使用
完毕后会被尽快回收,从而节省内存空间,前面学习的if语
句、for语句都使用了局部代码块。
静态代码块 > 构造代码块 >构造方法
设计模式
设计模式概述
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
设计模式不是一种方法和技术,而是一种思想
设计模式和具体的语言无关,学习设计模式就是要建立面向对象的思想,尽可能的面向接口编程,
低耦合,高内聚,是设计的程序可复用
学习设计模式能够促进对面向对象思想的理解,反之亦然。它们相辅相成
单例模式:
单例模式是Java中的一种设计模式,它是在设计一个类时,需要保证在整个程序运行期间对该类
只存在一个实例对象。
优点:在系统只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式
可以提高系统的性能。
那么,如何保证类在内存中只有一个对象?
(1)把构造方法私有化;
(2)在成员位置自己创建一个对象;
(3)通过一个公共方法提供访问.
举例:
(1)饿汉式 类加载就创建对象
class Student1{
private Student1(){
}
private static Student1 s=new Student1();
public static Student1 getS(){
return s;
}
}
(2)懒汉式 用时创建对象
class Student1{
private Student1(){
}
private static Student1 s=null;
public synchronized static Student1 getS(){
if(s==null){
s=new Student1();
}
return s;
}
}
main方法详解
public static void main(String[] args) {
...}
(1)public:公共的,访问权限是最大的。由于main方法是被jvm调用,所以权限要够大。
(2)static:静态的,不需要创建对象,通过类名就可以。方便jvm的调用。
(3)void:因为我们曾经说过,方法的返回值是返回给调用者,而main方法是被jvm调用。
你返回内容给jvm没有意义。
(4)main:是一个常见的方法入口。我见过的语言都是以main作为入口。
(5)String[] args:这是一个字符串数组。
二.继承
1.继承的概念
将多个类的共性内容抽取出来放在独立的类中,让着多个类和当前类产生一种关系,extends:继承关系
通过extends关键字可以实现类与类的继承
class 子类名 extends 父类名 {}
Java中的开发原则:
低耦合,高内聚
2.继承的特点以及继承的好处
1)Java中,对于类与类之间的只支持单继承,不支持多继承
2)但是,可以多层继承
好处:
1)提高了代码的复用性
2)提高了代码的维护性
3)类和类之间的继承关系,是多态的前提条件!
3.继承中构造方法的访问问题,子类如何访问父类的构造方法
子类的所有构造方法,默认父类的无参构造方法;
如果父类中没有给出无参构造方法,子类构造方法报错,
1)手动给出父类无参构造方法
2)通过super(xxx):访问父类的有参构造方法
3)通过在子类的有参构造方法中通过this()访问本类的无参构造方法,
然后在通过本类的无参构造方法里面:super(xxx)访问父类的有参构造方法