11_7-11_11周学习总结

11_7

1.什么是构造方法?

1)方法名和类名一致

2)没有具体返回值类型

3)连void也没有

使用构造方法的注意事项:

1)一个类中如果没有提供任何构造方法,系统会默认提供一个无参构造方法

2)如果一个类中提供了有参构造方法,系统不会无参构造方法

给成员变量赋值就两种方式:

1)setXXX(xx)赋值!

2)有参构造方法赋值!

2.什么时候将变量定义为成员变量?

如果这个需求能够描述现实事物的属性,这个时候才能将变量定义为成员变量.

其余全部是局部变量,因为局部变量它的生命周期:随着方法调用存在,随着方法调用结束而消失

3.static关键字

static关键字的特点

1)随着类的加载而加载,

类在加载的时候,静态相关的成员(类成员:静态的变量或者静态的方法),随着类的加载而先进内存(静态区)

2)优先于对象存在,不能和this共存

3)static能体现"共享,共用"的意思

        如果需求中有"共用"含义,这个变量直接使用static修饰

4)被static修饰的成员(变量/方法),推荐的访问方式是使用类名.静态变量

                        类名.静态方法名()        

                        不推荐使用 对象名.静态变量/方法

使用静态相关变量/方法的注意事项

1)非静态的方法既可以访问静态的,也可以访问非静态的

2)静态只能访问静态的东西(静态变量/调用静态方法)

4.代码块(重点掌握:代码块的优先级,静态代码块,构造代码块,构造方法)

一个类中如果有静态代码块,有构造代码块,有构造方法

静态代码块>构造代码块>构造方法

5.继承(extends)

将多个事物(类)的共性内容抽取到一个独立的事物(类)中,这个事物(类)和其他事物(其他类)之间产生一种关系,称为"继承",关键字"extends"

格式:

        class 父类名{

                共性内容:属性私有化

                对外提供公共的访问方法

                //其他成员方法

}

class 子类名 extends 父类名{

}

从下面代码看,继承的特点:

1)提高了代码的复用性

2)提高了代码的维护性(方便后期维护)

3)类与类产生的继承关系,是多态的前提条件

弊端:

继承的关系:是存在局限性,不要为了使用部分功能而去使用继承.

继承的好处:

1)类和类之间的关系,只支持"单继承"

2)不支持多继承,但是可以"多层继承"

11-8

1.继承的注意事项

1)子类继承父类,继承父类的私有的成员,私有的成员,可以间接访问!

2)子类继承父类,构造方法是不能继承的,通过一个关键字类访问

super()

2.继承的成员变量访问问题

1)子类继承父类,如果子类和父类的成员变量名称不一致,(分别访问即可)

2)子类继承父类,子类和父类的成员变量名称一致,访问(采用"就近原则")

如果如果一致,而且一模一样,方法重写Override (方法覆盖/方法复写),重写的时候必须要保证它的访问权限足够大!

class Fu{
     public void show(){}
}
class Zi extends Fu{
    
    void show(){  //不行,访问权限问题:要么跟父类的一模一样,要么永远带上public
        
    }
}

3.继承的构造方法访问问题:super来访问

3.子类继承父类,子类的所有构造方法的默认第一句话都是super();(可以省略的不写)

访问父类的无参构造方法

4.如果父类中没有给出无参构造方法(存在有参构造方法),子类会出现什么情况?如何解决呢?

    1)解决方案1:永远给出类的无参构造方法

    2)如果现在不给出父类无参构造方法,如何解决呢?

        让子类的所有构造方法显示的访问父类的有参构造方法!

    3)子类的所有构造方法中的某一个只要能够让父类初始化即可!

5.多态的概念

        从现实世界事物中考虑:"多态"    一个事物多种形态!

6.多态的前提条件

        1)必须有继承关系(如果没有继承,不谈多态)

        2)必须存在方法重写

                        猫和狗都需要吃饭,吃的东西不一样(具体的动物类中应该给出具体体现)

        3)必须存在父类引用子类对象

                        格式:

                                父类名        对象名 = new 子类名();(向上转型)

7.多态的成员访问特点:

        1)成员变量:编译看左,运行看左!

        2)成员方法:编译看左,运行看右!

                        静态的方法:算不上方法重写,这种跟类相关,类一加载就可以直接使用(类名.方法名())

        3)构造方法:由于存在继承,构造方法在执行的时候,分层初始化,先让父类初试化,然后再是子类进行构造初始化!

8.多态的好处:

        1)可以提高代码的扩展性(父类引用指向子类对象 Fu fu = new Zi())   多态保证的(重点)

        2)可以提高代码的复用性以及维护性(由继承保证的)

9.多态的弊端:

父类引用指向子类对象,父类名 对象名 = new 子类名();

这种格式无法访问子类的特有功能

解决方案:

1)直接创建子类对象        子类名   对象名  =   new  子类名();

2)推荐:向下转型

        父类名 对象名 = new 子类名();向上转型

        子类名 对象名 = (子类名)父类的引用;向下转型  --前提是必须有向上转型

11-9

1.多态的一个弊端

用于向下转型时候,如果向下转型(将父类引用强转为子类引用),使用不当(),会导致程序出现异常 "ClassCastException" 类转换异常

比如说狗不能转成猫

2.abstract关键字(抽象)

什么是抽象类?

一个事物的某个行为应该具体的事物的具体体现,将这个事物顶层次(父类)可以定义"抽象"

抽象类的定义:

        abstract        class        类名{}

有抽象方法的类一定是抽象类,抽象类不一定都是抽象方法(重点)

抽象方法的格式:

                        权限修饰符  abstract  返回值类型  方法名(空参/无参)

抽象类的特点:

                1)抽象类不能进行实例化!(不能创建对象)

                2)抽象类的子类如果也是抽象类,不能实例化,一定会提供最具体的子类,完成实例化(创建对象)

                        抽象的父类名  对象名  = new 具体的子类名();

3.抽象类的成员特点

        成员变量:既可以是变量,也可以是常量(加入final修饰)

        成员方法:既可以存在抽象方法(不能省略abstract关键字,必须强转子类重写),也可以定义非抽象方法

        构造方法:无参构造/有参构造都可以存在,构造方法都需要让父类先初始化,然后再是子类进行初始化

4.如果一个类没有任何抽象方法,把这个类定义为抽象类的意义?

        意义就是:不让外界直接创建对象(抽象类不能创建对象)---需要提供具体的子类进行实例化

5.abstra和哪些关键字冲突?

不能和private一起用:被private修饰的成员需要在当前类进行访问,而如果加入abstract,强制子类完成 

不能和final一块用:被final修饰的成员方法,不能被重写!而abstract抽象方法,必须强制子类重写

不能和static一块用:被static修饰的成员方法,算不上重写

abstract关键字应用范围:

1)定义类--抽象类

2)定义方法--抽象方法

6.接口

什么是接口?

接口,体现的是这个事物本身不具备的功能,额外的功能

接口定义--java代码定义

interface 接口名{}

接口的特点:

1)接口的方法不能有方法体,只能是抽象方法,而且隐藏public  abstract(可以省略不写)

2)接口不能实例化(不能创建对象)

3)如果接口的实现类它是一个抽象类(不能实例化),肯定有一个具体的接口的实现类来进行new对象

接口名 对象名 = new 具体的子实现类();接口多态

开发中定义接口的实现类(子类)名

class 接口名+Impl  implements(实现)  接口名{

}

接口的成员方法:

成员变量:只能是常量--存在默认修饰符public static final(可以省略)

成员方法:只能是抽象方法--存在默认修饰符public abstract(可以省略)

构造方法:接口没有构造方法!

7.权限修饰符的范围

private-->默认修饰符-->protected-->public

11-10

1.关于类于类,类与接口,接口与接口的关系.

类与类:只支持单继承,不支持多继承,但是可以多层继承

类与接口:是实现关系,一个类继承另一个类的同时,可以实现多个接口!

接口与接口:(继承关系),不但可以单继承,也可以多继承

2.方法形式参数如果是引用类型

数组---->需要传递数组对象

具体类----->实际参数,需要传递当前类对象

抽象类---->抽象类不能实例化,实际参数传递该抽象类的子类对象 (抽象类多态)

接口 ----->接口不能实例化,实际参数需要传递该接口的子实现类对象(接口多态)

3.方法的返回值问题:

 1)返回基本类型: 需要什么基本数据类型,使用对应性的类型接收

2)研究引用类型:

 类

具体类: 需要返回的是当前具体类的对象 !

抽象类: 需要返回的是当前抽象类的子类对象(抽象类多态)

接口 :需要返回的是接口的子实现类对象(接口多态)

4.package包---本质就是文件夹(目录)

程序员在编写代码存储的地址

包---->开发中 (公司域名反写,多个包中间.隔开)

公司域名  

        com.qf

                        本质

                                com文件夹

                                                        qf文件夹

                                                                         xx.java

包----为了维护代码结构的(代码分层)

com.qf.pojo/domain/entity: 存放Java实体类(满足JavaBean规范:)

1)这个类是具体类

2)属性私有化 (属性必须全部字母小写)

3)对外提供公共的setXXX(xx)/getXXX()

5.内部类(了解)

一个类A中,有一个类B,将类B就称为类A的内部类,类A就是类B的外部类!

内部类有两种格式

1)成员内部类---->在一个外部类的成员位置(类中,方法外)定义的类

2)局部内部类---->在外部类的局部位置(方法定义中)定义的类

成员内部类:

成员内部类可以访问外部类的成员,包括私有相关的!

如何直接通过外部类去访问内部类的成员呢?(格式 重点)

外部类.内部类名 对象名 = new 外部类名().new 内部类名();

成员内部类---还可以static修饰符(记忆)

1)静态的成员内部类只能外部类的静态成员!

2)静态的成员内部类中无论是静态方法还是非静态方法:访问外部类的成员必须静态

3)想直接通过外部类来访问静态成员内部类的成员信息,访问格式

外部类名.内部类名 对象名 = new 外部类名.内部类名() ;

11-11

1.局部内部类
特点和成员内部类一样,局部内部类也可以直接外部类的包括私有!

1)也可以访问外部类的成员包括私有

2)面试题:局部内部类访 访问它的成员方法里面的局部变量,局部变量有什么特点?(重点)

jdk7以前(包括jdk7):局部内部类访问局部变量的时候,局部变量必须使用final进行修饰!,为什么? 

局部变量它随着方法调用而存在,随着方法调用结束而消失,但是现在是通过局部对象调用它的成员方法还在使用这个局部变量

局部变量必须为常量(加入final)---局部内部类对象不会立即消失,等待gc回收!

jdk8以及jdk8以后 jvm已经对这个局部变量优化 ,将final已经省略了!

2.匿名内部类: 没有名字的类

应用范围: 在局部位置中的(方法定义中或者声明上)

匿名内部类的格式:

new 类名或者一个接口名(){

                 重写方法(){

                         ... 

                        }

                 }  

匿名内部类的本质:就是继承该类(抽象类)或者是实现类了该接口的子类对象!

3.匿名内部类在开发中应用:

形式参数问题

如果方法的形式参数是一个抽象类,调用方法的时候实际参数需要这个抽象类的子类对象!

4.

方法的返回值是一个抽象类,需要返回该抽象类的子类对象

方法的返回值是一个接口,需要返回该接口的子实现类对象!

5.选择排序:

使用数组0角标对应的元素依次和后面的元素比较,小的往前放,第一次比较完毕,最小出现在最小索引处!

6

java常用类之 java.lang.Object类

表示所有的类的根类(超类或者父类),所有的类默认继承自Object,拥有这个类的所有非私有方法

public final Class getClass() :("反射"后面讲的)获取任意Java类型的字节码文件对象 (返回值表示正在运行的那个类或者接口)

面试题:

在Java中获取一个类的字节码文件对象的方式有几种?

三种方式

public final Class getClass() 任意java对象调用getClass()

任意Java类型的class属性

Class类有一个静态方法 forName("包名.类名") ---反射中讲

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值