Java SE知识点总结(4:Java类设计)

目录

四:Java类设计

1.类

类的基本特点

局部变量与成员变量

成员变量的基本特点

成员方法的基本特点

方法的重载

方法的重写

构造方法深入理解

main方法深入理解

Object类深入理解

equals方法与“==”深入理解

toString方法深入理解

2.对象(*)

对象基本特点

对象的声明

对象的创建

this引用与super引用

参数传递

static关键字深入理解

3.访问控制修饰符

关键字

修饰类

修饰成员属性

修饰成员方法(构造方法)

4.内部类(*)

内部类的分类

5.Java的包

包简介

improt关键字详解


四:Java类设计

1.类

类的基本特点

  1. 类是对某一事物抽象的描述,对象是某一类中的一个具体的实例或者多个具体的示例;并且类是创建对象的模板

  2. 类中有封装和隐藏的作用

  3. 类中封装有成员属性:成员属性是对类的静态描述

  4. 类中封装有成员方法:成员方法是对类的动态描述

    类声明{
        成员变量的声明;
        成员方法的声明;
    }
    ​
    类声明的完整格式:
        修饰符 class<泛型> 类名 extends 父类 implements 接口列表
    /**
     *修饰符:
     *(1)访问控制修饰符(public,private,default,protected)
     *(2)abstract(抽象类)
     *(3)final(最终的)
     *(4)static(静态的)
     *
     *继承(extends):
     *(1)属性的继承
     *(2)方法的继承
     *
     *接口(interface)(后面在详细介绍)
     *(1)接口的特点?
     *(2)接口中成员属性的特点?
     *(3)接口中成员方法的特点?
     */

局部变量与成员变量

  1. 局部变量:方法中的变量,不可以使用修饰符(访问控制修饰符,abstract,static都不可以)

  2. 成员变量:在类中,可以使用

  3. 注意:都可以使用final修饰(定义为常量,不可以被修改)

成员变量的基本特点

  1. 父类的所有成员变量都会被继承(private也会被继承)

  2. 成员变量可以被“覆盖”(创建子类的时候会同时创建所有成员变量)

  3. 使用this关键字可以访问本类的成员变量

  4. 使用super()关键字可以访问父类的构造方法给父类成员变量赋值

  5. 即使父类成员变量为private,但是创建子类的时候仍然创建了该变量,只是无法被直接访问

成员方法的基本特点

  1. 成员方法中有一类特殊的方法叫构造方法(后面详细介绍构造方法)

  2. 方法有方法名字,方法体(取名字最好满足阿里巴巴开发手册)

  3. 如果为abstract修饰的方法,就可以不用写方法体,但是需要子类实现(抽象方法其实就是一个接口)

  4. static关键字可以让方法直接使用类名字访问(静态的)

  5. java方法传递都是形参(只传递值,引用(地址))

方法的重载

  1. 在原有方法上在写一个与原方法名相同的方法

  2. 但是要求参数必须不同(类型不同,或者个数不同);顺序不同也可以(在类型不同的基础上)

  3. 单纯的访问控制修饰符不同,不算方法的重载

  4. 简单的说,就是两个方法满足(1)名字相同;(2)参数列表的类型依次匹配不相同(Integer与int也满足)

  5. 考试的时候很容易考察

方法的重写

  1. @override注解:检查方法重写是否正确(告诉程序这个是重写的方法,帮我检查一下;同时也可以告诉阅读者)

  2. 方法的重写发生在子类与父类中(子类重写父类方法)

  3. 方法签名必须相同(方法名和参数)

  4. 其实成员方法没有“覆盖”的概念(但是可以近似的实现)

  5. 方法的“重写”就是方法的“覆盖”;其实就是叫法不同而已

构造方法深入理解

  1. 构造方法是实例化类的方法,即创建对象时使用

  2. 构造方法的作用通常是初始化对象

  3. 如果程序员不写构造方法,编译器则会自带一个无参构造方法;如果写了,则不带

  4. 留一个问题:所有类(接口)都有构造方法吗?

  5. 抽象类有构造方法(使用子类构造方法的时候,都会先调用父类的构造方法(super关键字))

  6. 但是接口不可以有构造方法,接口不可以被实例化(抽象类和接口相似,但是有区别)

  7. 实例化子类的时候如果不指定父类构造方法,会默认调用父类的无参构造方法

  8. 同一个类中,一个构造方法中可以访问其他构造方法

main方法深入理解

  1. main方法是程序的入口,程序可以有多个main方法(即多个入口)

  2. 在我们打包jar包或者war包的时候,会指明将哪个main方法作为入口

  3. 举个例子,就像是exe文件一样,它作为程序的入口只能有一个;但一个程序可以有多个exe文件

  4. String[] args:args为一个字符串变量,便于在程序启动的时候注入参数

  5. main方法处于一个类中,并且main方法是public和static的

  6. public(公开的)和static(静态的)是为了便于jvm能够找到main方法,并且启动程序

  7. ......(关于main方法的更多可以自己慢慢去发现,探索)

Object类深入理解

  1. Object类是一切类的父类(间接父类)

  2. 不写extend其实就是默认继承了Object类;写了就是间接继承了Object类(因此创建的所有类都有Object类中方法)

  3. Object类中含有这些方法(下面简单介绍一下)

  4. getClass()方法:返回对象执行时候的Class实例

  5. hashCode()方法:hashcode就是在hash表中有对应的位置

  6. equals()方法:使用的是“==”;比较的是地址(String类重写了该方法,使得可以比较String字符串的内容)

  7. clone()方法:在Java语言中, clone方法被对象调用,所以会复制对象

  8. toString()方法:重写很简单,其实就是返回该类中所有成员属性的值

  9. notify()方法:能够唤醒一个正在等待这个对象的monitor的线程

  10. notifyAll()方法:能够唤醒所有正在等待这个对象的monitor的线程

  11. wait(long)方法:能让当前线程阻塞

  12. wait(long,int)方法:能让当前线程阻塞

    (5与集合框架有关,9—12都与多线程有关)

equals方法与“==”深入理解

  1. equals方法在Object类中;使用的是“==”,比较的是地址

  2. String类中重写了该方法,使起可以比较,String字符串是否相等

  3. 如果我们也像比较类对象是否相等;就需要重写该方法(具体的重写可以看String类的,仿照着写几遍就会了)

  4. 后面会详细深入介绍String字符串类

toString方法深入理解

  1. 返回本类中的所有成员属性

  2. 自己定义的类需要使用的话,需要重写该方法(很easy)

2.对象(*)

对象基本特点

  1. 对象的定义:对象是类的实例化

  2. 对象通过new创造,并且用引用去指向

对象的声明

  1. 创造一个实例化对象分两步

  2. 第一步:创建引用去指向(接受)对象;有继承关系的话还可以,利用多态的性质接受不同的对象

  3. 第二步:通过new(调用构造方法)实例化对象

  4. 注意:如果没有第二步的话,会报错(空指针异常)

对象的创建

  1. 使用new创建对象

  2. 使用反射原理创造对象(反射的时候再介绍)

  3. 等等......

Java垃圾回收机制(GC)

  1. Java垃圾回收机制先了解一下概念,以后会在深入理解Jvm的时候谈到

  2. GC的垃圾回收算法

  3. JDK 8以后几乎每一代的版本都会去优化GC

instanceof运算符

  1. instanceof是java里面特有的运算符

  2. 用于判断一个对象是否是属于某个类

  3. 继承关系,也是可以判断

对象的引用深入理解

  1. 对象的引用就是指针

  2. 多态的性质,可以使父类引用指向子类对象

this引用与super引用

  1. this使指向本类中某一个对象的一个变量,this相当于“我”,可以指向成员属性或者方法

  2. 如果存在同名的成员变量与局部变量时,在方法内部默认是访问局部变量的数据,可以通过this关键字指定访问成员变量的数据(this.成员属性,this( ),this.成员方法( ))

  3. 在一个构造函数中可以调用另外一个构造函数初始化对象

  4. super关键字可以指向父类的成员属性或者成员变量

  5. this.成员属性,this( ),this.成员方法( )

参数传递

  1. 参数传递都是传递的值,并不是参数本身

  2. 引用类型的(即类)传递的是指针(如:数组,包装类)

static关键字深入理解

  1. 只能修饰内部类;无法修饰顶层类(外部类)

  2. 修饰成员属性:成员属性变成公有的,所有实例对象访问的是同一个(学生类中,学生的总身高)

  3. 修饰成员方法:使方法变成静态的

  4. 通过类名就可以直接访问,不需要new出对象;但是通过对象也可以访问,只是不推荐

3.访问控制修饰符

关键字

  1. public:公开的

  2. protected:使不同包的子类可以访问

  3. default(默认的)

  4. private:私有的,只有本类中可以访问

修饰类

  1. 同一个文件中,只能有一个类是公开的(public)

  2. 那个公开的类只能是public或者default的;都是默认的也可以

  3. 对于顶层类(外部类)来说,只有两种修饰符:public和默认(default)

  4. 内部类的上一级是外部类,那么对应的有四种访问控制修饰符:本类(private),同包(default),父子类(protected),任何位置(public);其实就是将内部内看成一个成员方法

修饰成员属性

  1. public:所有类都可以访问

  2. protected:同一个包和不同包的子类可以访问

  3. default:同一个包中可以访问

  4. private:同一个类才可以访问

修饰成员方法(构造方法)

  1. public:所有类都可以访问

  2. protected:同一个包和不同包的子类可以访问

  3. default:同一个包中可以访问

  4. private:同一个类才可以访问

4.内部类(*)

内部类的分类

  1. 成员内部类:与成员属性或者成员方法并列

  2. 局部内部类:

  3. 匿名内部类:

  4. 静态内部类:

5.Java的包

包简介

  1. 包定义:包其实就是一个文件夹

  2. 作用:方便管理类,可以将作用相似的类放在同一个包中(关键字package)

  3. 类的完整名称为:包名 + 类名;所以说不同包中类名可以相同,其实完整名字并不相同

  4. 在不同的包下,类(.class文件)的名称可以重复

  5. 在相同的包下,类(.class文件)的名称不可以重复

improt关键字详解

  1. 在使用其他包中的类的时候,需要写类的完整名字

  2. 因为类的完整名字为:包名称+类名称;因此显得代码非常冗余,非常麻烦

  3. 因此sun公司引入了导包的机制

  4. 先将要使用的类所在的包improt导入该类,然后再使用类的时候就不需要写包名了

  5. 因为我已经引入了包了,不会再出现只用类名表示意思含糊的情况了(同一个包中类名必须相同)

  6. 注意:导入包与否与访问控制修饰符无关;如果包中类的成员属性或者成员方法为private的,依旧无法访问

  7. 简单的说:improt导包就是为了简化代码的

    import java.util.Scanner;
    //导入包具体到类
    import java.util.*;
    //不具体到类,导入该包中所有的类

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值