第一章 类和对象
1-1 什么是类和对象
1、对象的概念?
万物皆对象,客观存在的事物皆为对象
2、什么是面向对象
人关注对象(事物信息)
3、类
类是模子,确定对象将会拥有的特征(属性)和行为(方法)
类的特点:类是对象的类型;具有相同属性和方法的一组对象的集合。
4、什么是对象的属性
每个对象的每个属性都有特定值
5、 什么是对象的方法
方法-对象执行的操作
6、 类和对象的关系/区别
类是抽象的概念,仅仅是模板;对象是具体的实体。
1-2 如何定义类
所有Java程序都以类class为组织单元
定义一个类的步骤:a.定义类名;b编写类的属性;c.编写类的方法。
1-3 如何使用对象
使用对象的步骤:
1、创建对象:类名 对象名=new 类名();
2、使用对象
引用对象的属性:对象名.属性 phone.screen=5.0//给screen属性赋值5
引用对象的方法:对象名.方法名(); phone.sendMessage();//调用sendMessage()方法
1-5 成员变量和局部变量
成员变量:在类中定义,用来描述对象将要有什么。
局部变量:在类的方法中定义,在方法中临时保存数据。
成员变量和局部变量的区别
1、作用域不同
局部变量的作用域仅限于定义它的方法,成员变量的作用域在整个类内部都是可见的。
2、初始值不同
成员变量有一个初始值,局部变量没有初始值。
3、在同一个方法中,不允许有同名局部变量;在不同的方法中,可以有同名局部变量。
4、两类变量同名时 ,局部变量有更高的优先级
1-6 Java中的构造方法
1、使用new+构造方法创建一个新的对象
2、构造方法是定义在Java类中一个用来初始化对象的方法
语法: public 构造方法名(){
//初始化代码}
3、无参构造方法的使用
4、带参构造方法的使用
5、当没有指定构造方法时,系统会自动添加无参的构造方法
6、当有指定构造方法,无论是有参、无参的构造方法,都不会自动添加无参的构造方法
7、构造方法的重载:方法名相同,但参数不同的多个方法,调节时会自动根据不同的参数选择相应的方法
8、构造方法不但可以给对象的属性赋值,还可以保证给对象的属性赋一个合理的值
1-7 Java中的static使用之静态变量
Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问。当然,鉴于他作用的特殊性更推荐用类名访问~~
1-9 Java中的static使用之静态方法
需要注意:
1、静态方法可以直接调用同类中的静态变量,但不可以访问非静态变量;
如果想在静态方法中访问非静态变量,需要先创建类的对象,然后通过对象来访问非静态变量。
2、普通成员方法可以直接访问同类中的静态变量和非静态变量
3、静态方法不可以直接调用非静态方法,需要通过对象来访问非静态方法
1-10 Java中的static使用之静态初始化块
Java中可以通过初始化块进行赋值。
在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块。使用static修饰的初始化块称为静态初始化块。
特别注意:静态初始化块只在类加载时执行,且只执行一次,同时静态初始化块只给静态变量赋值,不给普通成员变量赋值。
看一段代码:
运行结果
第一次创建类的实例时,依次执行初始化块,先执行静态初始化块,接着执行普通初始化块,最后执行构造初始化块;继续执行代码;第二次创建类的实例时,依次执行初始化块,但静态初始化块只执行一次。
第二章 封装
2-1 什么是封装
1、概念
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是要通过该类提供的方法来实现对隐藏信息进行操作和访问
2、好处:a.只能通过规定的方法访问数据
b.隐藏类的实例细节,方便修改和实现
3、封装的实现步骤
修改属性的可见性(设为private)-》创建getter/setter方法(用于属性的读写)-》在getter/setter方法中假如属性控制语句(对属性值得合法性进行判断)
private float screen;
public float getScreen() {
return screen;
}
public void setScreen(float newScreen) {
screen=newScreen;
}
main函数中调用:
phone2.setScreen(6.0f);
System.out.println("screen:"+phone2.getScreen());
2-2 使用包管理Java中的类
1、包的作用:管理Java文件 解决同名文件冲突
2、定义包:package 包名
注:必须放在Java源程序的第一行 包名间可以使用"."号隔开
eg:com.imooc.MyClass
3、系统中的包
java.(功能).(类)
java.lang.(类) 包含java语言基础的类
java.util.(类) 包含java语言中各种工具类
java.io.(类) 包含输入、输出相关功能的类
4、包的使用
(1)可以通过import关键字,在某个问价使用其他文件中的类。
(2)Java中,包的命名规范是全小写字母拼写
(3)使用的时候不但可以加载某个包下的所有文件 eg:com.imooc.*
也可以加载某个具体子包下的所有文件 eg:com.imooc.music.*
2-3 Java中的访问修饰符
访问修饰符--可以修饰属性和方法的访问范围
访问修饰符 本类 同包 子类 其他
private /
默认 / /
protected / / /
public / / / /
2-4 Java中的this关键字
1.this关键字代表当前对象
this.属性 操作当前独享的属性
this.方法 调用当前对象的方法
2.封装对象的属性的时候,经常会使用this关键字
2-5 什么是Java中的内部类
内部类就是定义在另一个类里面的类。
1、内部类提供了更好的封装,隐藏在外部类之内,不允许容一个包中的其他类访问该类
2、内部类可以调用外部类的所有数据,包括私有数据
3、内部类所能实现的所有功能使用外部类都可以实现,只是有时更方便
内部类可以分为以下几种:成员内部类,静态内部类,方法内部类,匿名内部类
2-6 成员内部类
也称普通内部类。
上面的代码可以看出成员内部类的使用方法:
1、Inner类定义在Outer类的内部,相当于一个成员变量的位置,而且可以使用任意的访问修饰符private、protected、public
2、Inner类的test方法可以访问Outer类的任意数据,而不受访问修饰符的影响
3、定义成员内部类后,必须使用外部类对象来创建一个内部类对象,而不能直接new一个内部类对象。语法:内部类 对象名()=new 外部类对象.内部类();
4、编译了上面的程序后,会产生两个.class文件
内部类是Outer$Inner.class文件
友情提示:
1、外部类不能访问内部类的成员和方法。
要想调用,需要先创建内部类对象。
2、如果内部类和外部类有相同的成员变量和方法,内部类默认访问自己的成员变量,如果想访问外部类的成员变量可以使用关键字this。
2-7 静态内部类
静态内部类是static修饰的内部类。这种内部类的特点是:
1、静态内部类不能直接访问外部类的非静态成员,需要使用 new 外部类().成员 的方式访问。
2、如果外部类的静态成员和静态内部类的成员名称相同,则可使用 外部类.静态成员名 来访问外部类的静态成员;如果外部类的静态成员和静态内部类的成员名称不同,则可直接使用 静态成员名 访问
3、创建内部类对象时,不需要外部类对象,可以直接创建内部类对象 内部类 对象名=new 内部类;
2-8 方法内部类
方法内部类就是定义在外部类的方法中的内部类,只在该方法的内部可见,及只可以在该方法中使用。
由于方法内部类不能再外部类的方法以外的地方使用,所以方法内部类不能使用访问修饰符和static修饰符。
第三章 继承
3-1 Java中的继承
1、继承是类与类的一种关系,是一种“is a”的关系。Java中的继承是单继承。
2、继承的好处:子类拥有父类的所有属性和方法,但属性和方法的修饰符不能是private;
实现代码复用
3、语法规则:
class 子类 extends 父类
3-2 Java中的方法重写
1、什么是方法的重写:
如果子类对继承父类的方法不满意,是可以重写父类继承的方法的,当调用方法时会优先调用子类的方法。
2、语法规则:
a.返回值类型
b.方法名
c.参数类型及个数
都要与父类继承的方法相同,才叫方法的重写。
3-4 Java中的继承初始化顺序
继承时程序是如何执行的?
继承的初始化顺序:
1、初始化父类再初始化子类
2、先执行初始化对象中属性,再执行构造方法中的初始化
总结初始化顺序是先父类的属性初始化->父类的构造方法->子类属性初始化->子类的构造方法
3-5 Java中的final的使用
final关键字
使用final关键字做标识有“最终的”含义
final可以修饰类、方法、属性和变量
final修饰类,则该类不允许被继承
final修饰方法,则该方法不允许被覆盖(重写)
final修饰属性,则该类的属性不会进行隐式的初始化(类的初始化属性必须有值)或在构造方法中赋值(但只能选其一)
final修饰变量,则该变量的值只能赋一次值,即变为常量
3-7 Java中的super的使用
super关键字:在对象的内部使用,可以代表父类对象。
1、访问父类的属性:super.age
2、访问父类的方法:super.eat()
super的应用
子类的构造的过程中必须使用其父类的构造方法;
如果子类的构造方法中没有显式调用父类的构造方法,则系统默认调用父类无参的构造方法;如果显式的调用构造方法,必须在子类的构造方法的第一行。
如果子类构造方法中既没有显式调用父类的构造方法,而父类又没有无参的构造方法,则编译出错。
3-8 Java中的Object类
Object类是所有类的父类,如果一个类没有使用extends关键字明确标识继承另一个类,那么这个类默认继承Object类。Object类中的方法,适合所有子类。
有几个比较重要的方法:
1、toString()方法
在Object类里面定义toString()方法的时候返回的对象的哈希code码(独享地址字符串)
可以通过重写toString()方法表示出对象的属性
2、equal()方法
比较的是对象的引用是否指向同一块内存地址。Dog dog=new Dog()
一般情况下比较两个对象时比较它的值是否一致,所以要进行重写
源码->生成hashCode()和equals()
第四章 多态
4-1 Java中的多种形态
多态:对象的多种形态。分为引用多态和方法多态。
解释一下对象和对象的引用
Animal obj1=new Animal();
new Animal()是穿件一个对象,Animal animal是创建一个对象引用,=是对象引用指向对象
1、引用多态
父类的引用可以指向本类的对象 Animal obj1=new Animal();
父类的引用可以指向子类的对象 Animal obj2=new Dog();
2、方法多态
创建本类对象时,调用的方法为本类方法
创建子类对象时,调用的方法为子类重写的方法或者继承的方法
4-2 多态中的引用类型转换
1、向上类型转换(隐式/自动类型转换),是小类型到大类型的转换
2、向下类型转换(强制类型转换),是大类型到小类型
3、instanceof运算符,来解决引用对象的类型,避免类型转换的安全性问题
4-3 Java中的抽象类
1、语法定义:抽象类前使用abstract关键字修饰,则称该类为抽象类。
2、应用场景:
a.在某些场景下,某个父类只是知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法。
b.从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为子类的模板,从而避免了子类设计的随意性。
3、作用:限制规定子类必须实现某些方法,但不关注实现细节
4、使用规则
a.abstract定义抽象类
b.abstract定义抽象方法,只有声明,不需要实现
c.包含抽象方法的类是抽象类
d.抽象类可以包含普通的方法,也可以没有抽象方法
e.抽象类不能直接创建,可以定义引用变量
4-5 Java中的接口
1、接口概念
接口可以理解为一种特殊的类,由全局常量和公共的抽象方法所组成。接口其实是规范,是用来约束类的。
2、使用interface关键字
接口定义的基本语法:
[修饰符]interface 接口名[extends 父接口1,父接口2...]{
零个到多个常量定义...
零个到多个抽象方法的定义...}
修饰符使用public
3、接口定义
常量:接口中的属性是常量,即使定义时不添加public static final修饰符,系统也会自动加上。
方法:接口中的方法只能是抽象方法,总是使用,即使定义时不添加public abstract修饰符,系统也会自动加上。
4、使用接口
一个类可以实现一个或多个接口,实现接口使用implements关键字。Java中一个类只能继承一个父类,是不够灵活的,通过实现多个接口可以做补充。
继承父类实现接口的语法:
[修饰符]class 类名 extends 父类 implements 接口1,接口2...{
类体部分//如果继承了抽象类,需要实现继承的抽象方法;要实现接口中的抽象方法。}
如果要竭诚父类,继承的父类必须在实现接口之前
接口在使用过程中,还经常与匿名内部类配合使用。匿名内部类就是没有名字的内部类,多用于关注实现而不关注类的名称。
语法格式:
Interface i=new Interface(){
pblic void method(){
System.out.println("匿名内部类实现接口的方式");
}};
4-7 UML简介
1、UML概念
unified Modeling Language(UML) 统一建模语言或标准建模语言
是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持
2、UML图示
UML 2.2中一共定义了14中图示
3、常用UML图
用例图(The Use Case Diagram)
序列图(The Sequence Diagram)
类图(The Class Diagram)
4、UML建模工具
Visio、Rational Rose、PowerDesign