第1章 类和对象
1-1 什么是类和对象 (07:36)
1.对象的概念:
万物皆对象,客观存在的事物,具体的
2.什么是面向对象:
人 关注 事物,联系生活
3.类:
类是模子,确定对象将会拥有的特征(属性)和行为(方法) 类是抽象的;
特点:类是对象的类型,具有相同属性和方法的一组对象的集合
4.什么是对象的属性:
对象具有的各种特征
5.什么是对象的方法:
对象的执行操作,能干什么
6.类与对象的关系/区别:
抽象与具体
1-2 如何定义 Java 中的类 (07:18)
如何定义一个类:
1.类的重要性:所有java程序都是以类class为组织单元的,是基本元素。
2类是模子,确定对象将会拥有什么样的特征(属性)和行为(方法)。先有类才能够描述具体对象。
3类的组成:属性和方法
4定义一个类的顺序:
a.定义类名:publi class 类名{内容},class是定义类的关键字。
b.编写类的属性:在{}内定义不同的属性类型,可以是一种可以是N种。
c.编写类的方法:可以多种行为,可以一种。
1-3 如何使用 Java 中的对象 (04:45)
⑴使用对象的步骤:
①创建对象:
类名 对象名= new 类名();//对一个类实例化
Telphone phone = new Telphone();
②使用对象:
引用对象的属性:对象名.属性
phone.screen = 5;//给screen属性赋值5
引用对象的方法:对象名.方法
phone.sendMessage();//调用sendMessage()方法
例:
package com.imooc;
public class InitailTelphone {
public static void main(String[] args) {
// TODO Auto-generated method stub
Telphone phone=new Telphone();
phone.sendMessage();
//给实例变量赋值
phone.screen=5.0f;
phone.cpu=1.4f;
phone.mem=2.0f;
//调用对象的方法
phone.sendMessage();
}
}
1-4 练习题
1.创建对象,
new 类名()【实例化】
类名 对象名=new 类名()
Telphone phone = new Telphone();[创建类的对象]
2.使用对象
引用对象的属性:对象名.属性
phone.screen =5; //给screen属性赋值5
引用对象的方法:对象名.方法名()
phone.sendMessage(); 调用sendMessage()方法
1-5 Java 中的成员变量和局部变量 (07:13)
成员变量:在类中定义,用来描述对象将要有什么(属性)。可被本类方法和其他跟当前类有关系的方法使用。
局部变量:在类的方法中定义,在方法中临时保存数据。(只能在当前的方法中使用)
区别:
1.作用域不同:局部变量的作用域仅限于定义它的方法,成员变量的作用域在整个类内部都是可见的。
2.初始值不同:java会给成员变量一个初始值,java不会给局部变脸赋予初始值。
3.在同一个方法中,不允许有同名局部变量;在不同的方法中,可以有同名局部变量。
4.两类变量同名时,局部变量具有更高的优先级。
1-6 Java 中的构造方法 (11:01)
构造方法:
1.使用new+构造方法创建一个新的对象
2.构造方法是定义在Java类中的一个用来初始化对象的方法,构造方法与类同名且没有返回值
构造方法的语法格式:
public 构造方法名(){
//初始化代码
}
public后面没有返回值类型,构造方法名与类名相同,括号内可以指定参数
3.无参构造方法的使用
main():
Telphone phone=new Telphone();
class TelPhone:
public Telphone(){
System.out.println("Telphone构造方法执行了");
}
如果我们没有指定一个无参的构造方法,那系统会帮我们自动生成一个无参的构造方法,如果我们对系统生成的无参构造方法不满意,可以自定义一个无参的构造方法
也就是说当我们创建对象的时候,其实我们执行的是构造方法
4.有参构造方法的使用
main():
Telphone phone2=new Telphone(4.0f, 2.0f, 2.0f);
class Telphone:
public Telphone(float newScreen,float newCpu,float newMem){
screen=newScreen;
cpu=newCpu;
mem=newMem;
}
有参构造方法的目的就是初始化对象中成员变量的值
通过无参或者有参的构造方法都可以创建对象,但是后者不但可以创建对象而且可以给对象中的实例变量赋初值
5.当没有指定构造方法时,系统会自动添加无参的构造方法
6.当有指定构造方法时,无论是有参无参的构造方法,都不会自动添加无参的构造方法
7.构造方法的重载:方法名相同,但参数不同的多个方法,调用时会自动根据不同的参数选择相应的方法
8.构造方法不但可以给对象的属性赋值,还可以保证给对象的属性赋一个合理的值
1-7 Java 中的 static 使用之静态变量
public class HelloWorld {
// 定义静态变量,保存班级名称
static String className = "JAVA开发一班";
public static void main(String[] args) {
// 访问静态变量,输出班级名称
System.out.println(HelloWorld.className);
}
}
1-8 练习题
1-9 Java 中的 static 使用之静态方法
成员函数的本质就是静态方法,
静态函数和普通函数主要就是进入内存的时机不同,并且普通函数在可能在不使用时被释放,而静态函数在程序运行之初已经进入内存,直到程序结束。
1、 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。如:
如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量。如:
2、 在普通成员方法中,则可以直接访问同类的非静态变量和静态变量,如下所示:
3、 静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法。如:
1-10 Java 中的 static 使用之静态初始化块
public class HelloWorld {
String name; // 声明变量name
String sex; // 声明变量sex
static int age;// 声明静态变量age
// 构造方法
public HelloWorld() {
System.out.println("通过构造方法初始化name");
name = "tom";
}
// 初始化块
{
System.out.println("通过初始化块初始化sex");
sex = "男";
}
// 静态初始化块
static {
System.out.println("通过静态初始化块初始化age");
age = 20;
}
public void show() {
System.out.println("姓名:" + name + ",性别:" + sex + ",年龄:" + age);
}
public static void main(String[] args) {
// 创建对象
HelloWorld hello = new HelloWorld();
// 调用对象的show方法
hello.show();
}
}
第2章 封装
面向对象三大特性:封装、继承、多态
2-1 什么是 Java 中的封装 (05:53)
防止随意访问属性值,保证安全性。
2-2 使用包管理 Java 中的类 (06:45)
1.可以通过import关键字 在某个文件使用其他文件中的类
2.java中 包的命名规范是全小写字母拼写
3.使用的时候不但可以加载某个包下的所有文件 也可以加载具体子包下的所有文件
2-3 Java 中的访问修饰符 (04:48)
2-4 Java 中的 this 关键字 (02:50)
this关键字代表当前对象
this.属性 操作当前对象的属性
this.方法 调用当前对象的方法
自动生成Setter/Getter方法:菜单栏Source下
2-5 什么是 Java 中的内部类
内部类( Inner Class )就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类。
内部类的主要作用如下:
- 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类
- 内部类的方法可以直接访问外部类的所有数据,包括私有的数据
- 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便
//外部类HelloWorld
public class HelloWorld {
// 内部类Inner,类Inner在类HelloWorld的内部
public class Inner {
// 内部类的方法
public void show() {
System.out.println("welcome to imooc!");
}
}
public static void main(String[] args) {
// 创建外部类对象
HelloWorld hello = new HelloWorld();
// 创建内部类对象
Inner i = hello.new Inner();
// 调用内部类对象的方法
i.show();
}
}
内部类可分为以下几种:
成员内部类
静态内部类
方法内部类
匿名内部类
2-6 Java 中的成员内部类
//外部类HelloWorld
public class HelloWorld{
//外部类的私有属性name
private String name = "imooc";
//外部类的成员属性
int age = 20;
//成员内部类Inner
public class Inner {
String name = "爱慕课";
//内部类中的方法
public void show() {
System.out.println("外部类中的name:" + HelloWorld.this.name);
System.out.println("内部类中的name:" + name);
System.out.println("外部类中的age:" + age);
}
}
//测试成员内部类
public static void main(String[] args) {
//创建外部类的对象
HelloWorld o = new HelloWorld ();
//创建内部类的对象
Inner inn = o.new Inner();
//调用内部类对象的show方法
inn.show();
}
}
成员内部类的使用方法:
1、 Inner 类定义在 Outer 类的内部,相当于 Outer 类的一个成员变量的位置,Inner 类可以使用任意访问控制符,如 public 、 protected 、 private 等
2、 Inner 类中定义的 test() 方法可以直接访问 Outer 类中的数据,而不受访问控制符的影响,如直接访问 Outer 类中的私有属性a
3、 定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去 new 一个内部类对象,即:内部类 对象名 = 外部类对象.new 内部类( );
4、 编译上面的程序后,会发现产生了两个 .class 文件
其中,第二个是外部类的 .class 文件,第一个是内部类的 .class 文件,即成员内部类的 .class 文件总是这样:外部类名$内部类名.class
另外,友情提示哦:
1、 外部类是不能直接使用内部类的成员和方法滴
可先创建内部类的对象,然后通过内部类的对象来访问其成员变量和方法。
2、 如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用 this 关键字。如:
运行结果:
2-7 Java 中的静态内部类
//外部类
public class HelloWorld {
// 外部类中的静态变量score
private static int score = 84;
// 创建静态内部类
public static class SInner {
// 内部类中的变量score
int score = 91;
public void show() {
System.out.println("访问外部类中的score:" + HelloWorld.score);
System.out.println("访问内部类中的score:" + score);
}
}
// 测试静态内部类
public static void main(String[] args) {
// 直接创建内部类的对象
SInner si = new SInner();
// 调用show方法
si.show();
}
}
静态内部类是 static 修饰的内部类 特点是:
1、 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问
2、 如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员
3、 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类();
运行结果 :
2-8 Java 中的方法内部类
方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。
一定要注意哦:由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和 static 修饰符。
//外部类
public class HelloWorld {
private String name = "爱慕课";
// 外部类中的show方法
public void show() {
// 定义方法内部类
class MInner {
int score = 83;
public int getScore() {
return score + 10;
}
}
// 创建方法内部类的对象
MInner mi = new MInner();
// 调用内部类的方法
int newScore = mi.getScore();
System.out.println("姓名:" + name + "\n加分后的成绩:" + newScore);
}
// 测试方法内部类
public static void main(String[] args) {
// 创建外部类的对象
HelloWorld mo = new HelloWorld();
// 调用外部类的方法
mo.show();
}
}
2-9 练习题
第3章 继承
3-1 Java 中的继承 (06:28)
1.继承是类的一种关系,是一种“is a”的关系(Java中中只存在单继承)
2.继承的好处:子类拥有父类的属性和方法、代码的复用
3.语法:class 子类 extends 父类 {}
eclipse中创建子类时选择下方 superclass来继承父类!
3-2 Java 中的方法重写 (02:25)
方法的重写:
1.什么是方法的重写:
如果子类对继承父类的方法不满意,是可以重写父类继承的方法的,当调用方法时会优先调用子类的方法。
2.语法规则:a.返回值类型 b.方法名 c.参数类型及个数 都要与父类继承的方法相同,才叫方法的重写。
3-3 练习题
3-4 Java 中的继承初始化顺序 (04:45)
继承的初始化顺序:
1.初始化父类再初始化子类。
2.先执行初始化对象中的属性,再执行构造方法中的初始化。
父类对象-->属性初始化--->构造方法
子类对象-->属性初始化--->构造方法
3-5 Java 中的 final 的使用 (05:11)
final关键字: 表示“最终的”,即不可修改。
final可以修饰类、方法、属性和变量
1、修饰类:不允许被继承
2、修饰方法:不允许被重写
3、修饰属性:则该属性不会进行隐式初始化(不会自动初始化),需要手动初始化或者在构造方法中初始化 (但二者只能选一,即只能初始化一次后便不能更改)
4、修饰变量,只能在声明的时候赋一次值,成为常量。 (static final 会使其成为全局常量)
3-6 练习题
3-7 Java 中的 super 的使用 (07:18)
super关键字指的是父类
子类的构造的过程当中必须调用其父类的构造方法 相当于super();默认是调用无参的
如果子类的构造方法中没有显示调用父类的构造方法,系统会默认调用父类无参的构造方法.
如果要显示的调用父类的构造方法,必须在子类的构造方法第一行中添加super();
如果子类构造方法中既没有显示调用父类的构造方法,而父类又没有无参的构造方法,则编译出错,
如果父类是定义了有参的构造方法,那么子类必须super.(父类的参数),或者父类中添加一个无参的构造方法,否则出错 因为默认调用的是super();是无参的。
一个类中没有定义构造方法,则系统会默认为此类定义一个无参的构造方法.如果自定义了一个带参的构造方法,则系统不会为其添加无参的构造方法.
3-8 Java 中的 Object 类 Ⅰ (04:02)
Object类是所有类的父类,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认继承Object类,且Object类中的方法适合所有子类
toString()方法
在Object类里面定义toString()方法的时候返回的对象的哈希code码(对象地址字符串)
hashcode 唯一标识一个对象
如果我们在代码里面直接输出一个对象,会输出这个对象在内存中的地址,我们把它称为哈希码,哈希码是通过哈希算法生成的一个字符串用来唯一区分对象的
可以通过重写toString()方法表示出对象的属性
(我们经常在输出对象的时候希望得到子类的属性值,那么我们就要重写从父类继承来的toString()方法,eclipse中右键菜单栏-源码source-生成generate toString(),他就会根据我们对象的属性帮我们生成一个toString()方法来输出属性值)
getClass()可以得到一个类对象,当我们new的时候得到的是一个类的对象如果对象调用getClass()方法我们得到的是类对象,类对象描述的是类的代码信息(类的代码信息:这个类有哪些属性\它是什么类型\变量名是什么\它有哪些方法\方法名是什么\方法里面的代码是什么;而类的对象关注的是对象的属性值的信息或者说这个对象的数据信息)
3-9 Java 中的 Object 类 Ⅱ (10:46)
equals()----返回值是布尔类型
比较的是对象的引用是否指向同一块内存地址-------对象实例化时,即给对象分配内存空间
使用方法如:dog.equals(dog2);
如果是两个对象,但想判断两个对象的属性是否相同,则重写equals()方法
1.地址是否相同----if (this == obj)
2.对象是否为空----if (obj == null)
3.getClass()可以得到类对象,判断类型是否一样-----if (getClass() != obj.getClass())
new出来的是类的对象,关注的是类的属性的具体的数据;
类对象是类的代码信息,关注的是类有什么属性和方法
4.属性值是否一样----if (age != other.age)
3-10 练习题
第4章 多态
4-1 Java 中的多态 (09:27)
继承是多态的实现基础
1.引用多态
父类的引用指向父类的对象;
Animal obj1=new Animal();
父类的引用指向子类的对象;
Animal obj2=new Dog(); 重写eat()方法
Animal obj3=new Cat(); 并没有重写eat()
2.方法多态
父类创建本类对象时,调用的方法为本类方法
obj1.eat();//Animal的方法
父类创建子类对象时候,调用的方法为子类重写的方法或者父类的方法
obj2.eat();//Dog的方法
obj3.eat();//Animal的方法
obj2.watchDoor();//不能父类引用调用子类自己的方法
1、引用多态:父类的引用可以指向本类和子类的对象,在使用多态的时候,两个类需要有继承关系。子类的引用不可以指向父类的对象。
2、方法多态:创建本类对象时,调用的方法为本类方法;创建子类对象时,调用的方法为子类重写的方法或者继承的方法。如果子类的方法是自己定义的一个新的方法,则不允许多态。
4-2 多态中的引用类型转换 (08:20)
instanceof运算符,来解决引用对象的类型,避免类型转换的安全性问题。
1.例子:
Dog dog=new Dog();
Animal animal=dog; //自动类型提升,向上类型转换
Dog dog2=(Dog)animal;//向下类型转换,强制类型转换
Cat cat = (Cat)animal;//存在危险,编译无问题,但是运行时就报错。原因1.编译时Cat类型 2.运行时Dog类型
进行改写:
=》if(animal instanceof Cat){
Cat cat = (Cat)animal;
}else{
System.out.println("无法进行类型转换");
}
4-3 Java 中的抽象类 (07:03)
抽象类定义
1、语法定义:
抽象类钱使用abstract关键字修饰,则该类为抽象类。
2、应用场景:
a、在某些情况下,某个父类只是知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法
b、从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为子类的模板,从而避免了子类设计的随意性。
3、作用:
限制规定子类必须实现某些方法,但不关注实现细节。
4、使用规则:
4-4 练习题
4-5 Java 中的接口 (13:04)
-----接口-----接口取名字一般前面加一个IPlayGame
1.接口概念
类是一种具体实现体,而接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部数据,也不关心这些类里方法的实现细节,它只规定这些类里必须提供某些方法。
2.接口的定义
和类定义不同,定义接口不再使用class关键字,而是使用interface关键字。
3.接口定义的基本语法:
[修饰符] [abstract] interface 接口名 [extends 父接口1,父接口2...]
{
零个到多个常量定义...
零个到多个抽象方法的定义...(抽象方法的abstract会自动加)
}
接口就是用来被继承、被实现的,修饰符一般建议用public
注意:不能使用private和protected修饰接口
4.使用接口
一个类可以实现一个或多个接口,实现接口使用implements关键字。Java中一个类只能继承一个父类,是不够灵活的,通过实现多个接口可以做补充。
[修饰符] class 类名 extends 父类 implement 接口1,接口2...
{
类体部分//如果继承了抽象类,需要实现继承的抽象方法;要实现接口中的抽象方法。
}
接口的引用:
IPlayGame ip1=new SmartPhone();
ip1.playGame();
IPlayGame ip2=new Psp();
ip2.playGame();
1)接口不能有构造方法,抽象类可以有。
2)接口不能有方法体,抽象类可以有。
3)接口不能有静态方法,抽象类可以有。
4)在接口中凡是变量必须是public static final,而在抽象类中没有要求。
4-6 练习题
4-7 UML 简介 (15:48)
UML:
1、概念:Unified Modeling Language(UML)统一建模语言或标准建模语言
2、三种常用的UML图:
·用例图(The Use Case Diagram):关注功能,描述系统中出现的角色,以及它所需要的功能。
·序列图(The Sequence Diagram):关注顺序,描述用户和系统中对象的交互环节:步骤和顺序
·类图(The Class Diagram):关注关系:描述类和类之间的关系(继承等),表现类的属性和方法;
3.UML建模工具:如Visio、Rational Rose、PowerDesiner
第5章 阶段练习
5-1 阶段练习 (02:17)
面向对象知识点:
类
创建对象
继承关系(子类可以继承父类的属性和方法)
方法重写(子类有独特的方法)
多态(父类引用指向对象)
5-2 代码实现 (08:20)
子类Chinese和American继承父类Person;
1、Chinese p1 = new Chinese();
American p2 = new American();
利用的是继承的知识,即子类指向子类。
2、
Person p1 = new Chinese();
Person p2 = new American();
利用的是多态的知识,即父类指向子类。
APerson p1 = new Chinese();
APerson p2 = new American();
第6章 项目实战
6-1 综合练习 (09:07)
项目分析:
1、数据模型分析 2、业务模型分析 3、显示和流程分析
一、数据模型分析
1、通过对显示世界的事与物主要特征的分析、抽象,为信息系统的实施提供数据存取的数据结构预计相应的约束。
2、数据结构组成:操作(方法)、属性
在答答租车系统当中,我们关注的是车。车有货车(轻型、重型),客车(小客车、大客车),皮卡(即可载人载货),即不同的类。与此货车有载货量,客车有载客量,皮卡有载货载客量,即类的不同属性。皮卡是既可以载客、又可以载货,所以要用接口。
二、业务模型分析(方法)
1、在设计应用程序之前,应该明确该应用程序必须执行那些人物。
分析业务需求是应用程序开发中最重要的步骤之一。
确认业务需求的摸底在于创建一个能同时满足零售商和消费者需要的解决方案。
2、在答答租车系统当中,我们只考虑消费者
选车,注册天数,统计金额,载客、货量
遍历方法,判断、输入、输入出
三、显示和流程分析
1、显示:用户可以看到的信息提示界面。
2、流程:显示信息的执行过程、步骤。
3、答答租车系统中,要以命令行的方式显示提示信息和粗俗结果信息,要考虑其样式,用户输入的数据不同,信息该如何提示、如何处理并显示出结果,这部分只是囊括了显示与流程的内容。
例子:请选择车辆->请输入序号->输出总金额...
6-2 项目问题解析 1 (03:01)
共同学习,写下你的评论
评论加载中...
作者其他优质文章