慕课网 Java 入门 第二季 学习笔记

1.1什么是类和对象

类是模子,是不存在的,用来确定将会拥有的特征(属性)和行为(方法)。
类的特点:
     类是对象的类型;
     是具有相同属性和方法的一组对象的组合;
对象的属性: 对象拥有的各种属性,每个对象的每个属性都拥有特定值。
对象的方法: 对象执行的操作。

类是抽象的概念,如手机
对象是具体实体,如小米



1.2 定义类

类的重要性:所有Java程序都以类class为组织单元

定义一个类的步骤:
  1. 定义类名
  2. 编写类的属性
  3. 编写类的方法

1.3如何使用Java中的对象

  1. 创建对象     : 类名 对象名  =  new 类名()
  2. 使用对象     :引用对象的属性和方法: 对象名.属性    对象名.方法

1.4 成员变量和局部变量

    作用域 初始值 其他
成员变量   类中定义,用来描述类有什么 在整个类中都是可见的   Java会给成员变量一个初始值    不同方法中可以有同名的局部变量
局部变量 类的方法中定义,在方法中临时保存数据    仅限于定义它的方法      Java不会给成员变量一个初始值    局部变量的优先级比同名的成员变量高   


1.5 Java 中的构造方法

  1. 使用 new + 构造方法, 创建一个新的对象
  2. 构造的方法是定义在Java类中的一个用来初始化对象的方法
构造方法与类同名且没有返回值
当没有指定构造方法时,系统会自动添加无参的构造方法
当有指定构造方法时,即使只定义了有参的,系统也不会自动添加无参的构造方法
构造方法的重载: 方法名相同,但是参数不同的多个方法,调用时会根据不同的参数选择相应的方法
构造方法不但可以给对象的属性赋值,还可以保证给对象的属性赋一个合理的值。

1.6 Java中static使用之静态变量

Java中被static 修饰的成员称为静态成员或 类成员,它属于整个类所有,而不是某个对象所有,即被所有的对象所共享。
静态成员可以使用类名直接访问,也可以使用对象进行访问。推荐用类名访问

使用static 可以修饰变量,方法和代码块。

注意:静态成员属于整个类,当系统第一次使用该类时,就会为其分配内存空间,直到该类被卸载才会进行资源回收!

1.7 Java 中static 使用之静态方法

与静态变量一样,我们也可以使用static修饰方法,称为静态方法或类方法。
之前我们一直写的main函数方法就是静态方法。
public static void main ( String[] args) {  }
注意:
  1. 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员,可以在静态方法中创建类的对象,通过对象来访问非静态变量;
  2. 在普通成员方法中,则可以直接访问同类的静态变量和非静态变量;
  3. 静态方法中不能直接调用非静态方法,需要通过创建对象来访问非静态方法。

1.8 Java 中static 使用之静态初始化块

Java中可以通过初始化块进行数据赋值:
public class Hello {
      String name;  //定义一个成员变量
      // 通过初始化块为成员变量赋值
     {
           name = "爱慕课";
      }
}
        

在类的声明中,可以包含多个初始化块。
当创建类的实例时,就会依次执行这些代码块。
如果使用 static 修饰初始化块,就称为静态初始化快。
注意: 静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量



运行结果:


通过输出结果,我们可以看到,程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法。由于静态初始化块只在类加载时执行一次,所以当再次创建对象 hello2 时并未执行静态初始化块。

面向对象的三大特性: 封装,继承,多态

封装

2.1 什么是Java中的封装

概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。
好处:
  1. 只能通过规定的方法访问数据
  2. 隐藏类的实例细节,方便修改和实现
封装的实现步骤
  1. 修改属性的可见性,设为private
  2. 创建getter/setter 方法,用于属性的读写
  3. 在 getter/setter方法中加入属性控制语句,对属性值的合法性进行判断


2.2 使用包 管理Java中的类

包的作用:
管理Java文件,解决同名文件冲突

定义包: package 包名
注意:必须放在Java源程序中的第一行,包名之间可以用点号”.“隔开

系统中的包:
Java.(功能).(类)
java.lang.(类)    包含Java语言基础的类
java.util.(类)      包含java语言中各种工具类
java.io.(类)       包含输入输出相关功能的类

包的使用:
使用 import 关键字在某个文件中使用其他文件夹中得类。
java中,包的命名规范是全小写字母。
.* 可以把某个包下的所有文件加载进来。

2.3 Java 中访问修饰符

访问修饰符: 可以修饰属性和方法的访问范围。
访问修饰符 本类 同包 子类 其他
private      
默认    
protected  
public


2.4 Java 中的this关键字

this关键字代表当前的对象
this.属性
this.方法

封装对象的属性时,经常会使用this关键字

2.5 Java中的内部类 Inner Class

内部类就是定义在另一个类里面的类。
同理,包含内部类的类被称为外部类。

内部类的作用:
  1. 内部类提供了更好的封装,可以把内部的类隐藏在外部类之内,不允许同一个包中的其他类访问该类。
  2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据;
  3. 内部类所实现的功能,使用外部类同样可以实现,只是有时使用内部累更方便
内部类有以下几种:
  • 成员内部类
  • 静态内部类
  • 方法内部类
  • 匿名内部类
/外部类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();
	}
}


继承

3.1 Java中的继承

概念: 继承是类与类的一种” is a“ 的关系

父类,基类  -------   子类,派生类

注意:Java中的继承是单继承的,只有一个父类。

继承的好处:
子类拥有父类的所有属性和方法,但 private修饰的除外;
实现代码复用

语法规则:
class 子类 extends 父类 {  }


3.2 Java中的方法重写:

什么事方法的重写:
如果子类对继承父类的方法不满意,是可以重写父类继承方法的,当调用方法时会优先调用子类的方法。
语法规则: 返回类型,方法名,参数 都要和父类继承方法相同才可以。

3.3 Java中的继承初始化顺序

  1. 初始化父类,在初始化子类
  2. 同一个类中,先执行初始化对象中属性,再执行构造方法中的初始化
也就是说: 父类属性初始化 ==> 父类构造方法 ==> 子类对象属性初始化 ==> 子类对象构造方法
 

3.4 Java中的fanal 关键字

final关键字作标识有”最终的“含义,也就是说不可修改,不可变化的。
  • final 修饰类,则该类不允许被继承
  • final 修饰方法,则该方法不允许被覆盖(重写)
  • final 修饰属性,则该类的属性不会进行隐性的初始化(类的初始化必须有值),或是在构造方法中赋值,必须二者选其一。 也就是说要么在属性的声明时赋初始值,要么在构造函数里面赋值。
  • final 修饰变量, 则该变量的值只能赋一次值,在声明的时候初始化赋值,即变为常量。

3.5 Java中的super 关键字

super 关键字在对象的内部使用,可以代表父类的对象。
 
子类的构造过程中,必须调用父类的构造方法。
程序隐式的在子类的构造函数里的第一行添加父类的构造方法,如super();  
如果子类构造方法中既没有显式的调用父类的构造方法,而父类又没有无参的的构造方法,则编译出错。

3.6 Java中的Object类

Object 类是所有类的父类,也就是Java世界中的老总。
如果一个类没有使用 extends 关键字明确标识继承另外一个类,那么这个类默认基本Object类。
Object类中的方法,适合所有的子类。

Object类 常用方法:
  • toString()  方法,返回对象的哈希code码(对象地址字符串);哈希码是用来唯一区分对象的字符串。可以通过重写toString() 方法表示出对象的属性
  • equals() 方法 ,比较的是对象引用的是否指向同一块内存地址,可以通过重写equals() 方法使其比较两个对象的值是否一致。 


new 类 : 得到的是 类的对象
对象调用 getClass() 方法 : 得到的是 类对象



多态

4.1 Java中的多态

多态: 对象的多种形态
注意: 继承是多态实现的基础。

1 引用多态
    父类的引用可以指向本类的对象
    父类的引用可以指向子类的对象 (注意:子类的引用不能指向父类的对象)

2 方法多态
   创建本类的对象时,调用的方法是本类的方法
   创建子类的对象时,调用的方法为子类重写的方法或继承的方法

如果子类具有独有的方法,不是从父类继承来的,那就不能通过父类的引用来调用子类独有的方法。


4.2 多态中的引用类型转型

1 向上类型转换(隐式/自动类型转换),是小类型到大类型的转换: 无风险
2 向下类型转换(强制类型转换),是大类型到小类型的转换 : 有风险,可能溢出

 可以运用运算符 instanceof 来解决引用对象的类型,避免类型转换的安全性问题。







4.3 Java中的抽象类

 语法定义: 抽象类前使用abstract 关键字修饰,则该类为抽象类。
应用场景: 
  • 某些情况下,某个父类只是知道其子类应该包含怎样的方法,但是无法准确知道这些子类如何实现这些方法;(约束子类必须有哪些方法,但不约束其具体实现)
  • 从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为子类的模板,从而避免子类设计的随意性。
作用:  限制规定子类必须实现某些方法,但不关注实现细节。


使用规则:
  1. abstract 定义抽象类
  2. abstract 定义抽象方法,只有声明,不需要实现
  3. 包含抽象方法的类必须是抽象类
  4. 抽象类中可以包含普通的方法,也可以没有抽象方法
  5. 抽象类不能直接创建,可以定义引用变量

抽象方法 没有方法体则以分号结束。

4.4 Java中的接口

概念: 接口可以理解为一种特殊的类,由全局变量和公共的抽象方法所组成。

如果说类是一种具体实现体,而接口定义了某一批类所需要遵循的规范,接口不需要关心这些类的内部数据,也不关心这些类里方法的实现细节,它只规定这些类里必须提供的某些方法。

和定义类不同,定义接口不再使用 class 关键字,而是使用interface 关键字

基本语法:
 [修饰符] interface 接口名 [extends 父接口1, 父接口2 ... ] 
{
零到多个常量定义 。。。
零到多个抽象方法定义。。。
}

注意:
interface 前一定有 abstract,自己没显式地添加时,系统也会自动添加
可以有多个父接口, 而Java类最多只有一个父类。

接口定义
  • 常量: 接口中的属性是常量,即使定义时不添加 public static final 修饰符,系统也会自动加上;
  •  方法: 接口中的方法只能是抽象方法,总是使用;即使定义时没有添加 public abstract修饰符, 系统也会自动加上;

接口中方法不能有方法体,同时方法的访问修饰符不能是 private 和 protected

使用接口:
一个类可以实现一个或多个接口,实现接口使用 implements 关键字。
Java中的一个类只能继承一个父类,是不够灵活的,通过实现多个接口可以做补充。
 
继承父类实现接口的语法:
[修饰符] class 类名 extends 父类 implements 接口1, 接口2 .. 
{
类体部分 ;
// 如果继承了抽象类,需要实现继承的抽象方法;
// 也要实现接口中的抽象方法
//如果要继承父类,继承父类必须在实现接口之前
}


 通过接口可以描述两个不同的类型之间相同的特征。

使用接口:
接口类对象引用指向实现类的对象:

 






另外一种使用接口的方式:
接口在使用的过程当中,还经常与匿名内部类配合使用
匿名内部类就是没有名字的内部类,多用于关注实现而不关注类的名称


 

4.7 UML 简介

Unified Modeing Language 统一建模语言/ 标准建模语言

是一个支持模型化和软件系统开发的图形化语言
















发布了34 篇原创文章 · 获赞 25 · 访问量 4万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章