栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java学习笔记七: 面向对象编程上

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java学习笔记七: 面向对象编程上

Java学习笔记七: 面向对象编程上
  • 面向对象编程:
    • 什么是面向过程:
    • 什么是面向对象:
    • 如何定义类:
    • 如何创建对象:
    • 如何访问对象:
      • 成员的初始化默认值:
    • this 指针:
      • 构造方法(Constructor):
      • 构造方法的细节:
      • this调用构造方法
      • 构造代码块:
    • static 关键字:
      • 静态内部类:
      • 静态方法:
      • 静态属性:
      • 静态代码块:
      • 静态变量与成员变量的区别
        • 成员的加载顺序:
    • 重写函数:
    • Java(权限)访问修饰符:

面向对象编程: 什么是面向过程:

面向过程也是解决问题的一种思想,当我们在解决问题时,会按照预先设定的想法和步骤,一步一步去实现,而具体的每一步都需要我们去实现和操作。这些步骤相互调用和协作,完成我们的需求。

上述描述的每一个具体步骤我们都是参与者,并且需要面对具体的每一个步骤和过程,这就是面向
过程最直接的体现。

通过上面简单的描述发现,面向过程,其实就是面向着具体的每一个步骤和过程,就是面对具体的
每一个功能函数。这些功能函数相互调用,完成需求。

提出问题, 分解问题, 一一解决

实质上是函数的调用

什么是面向对象:

OOP(Oriented Object Programming):

当不再面对具体的每一个方法时,发现操作也变的简单了很多。而封装具体功能的这类,是我们需
要面对的。而基于这个封装了具体功能的类,那怎么使用呢?

当面向封装了具体功能类,若要使用这个类,一般情况下,在Java中需要通过创建这个类的实体来 使用。这个实体称之为对象。在开发中,我们是在不断的找封装不同功能的类。基于这些类,创建其对 象,使用这些对象完成相应的操作。

通过上面的讲解和分析得出:面向对象是基于面向过程,对象是将功能进行了封装。只要找到了具
体的类,创建出对象,就可以调用其中的具体功能。面向对象也是用来解决问题的一种思维模式。

在以后开发中,先找对象,调用对象中的具体功能。如果真的没有能够完成需求的对象,这时就自
己创建对象,并将所需的功能定义到对象中,方便以后使用。

面向对象的思想也就是人认识世界所采用的方式: 分门别类的思想:

世界上的万物人都进行了分类, 按照相似性把数不清的事物分归类到有限的类别中, 比如不管是百灵鸟还是麻雀都是鸟类, 每个人有姓名都是不一样的个体但都叫人类

类(class): 类别

在java中, 使用class关键字定义类

属性:

类的固有特征

行为和动作:

函数 function(方法 method)

对象(object): 一个类别中的具体案例

如何定义类:

类的成员:

  1. 属性
  2. 方法
  3. 构造方法
  4. 静态属性
  5. 静态方法
  6. 构造代码块
  7. 静态代码块

访问修饰符 类型 属性名称 = 属性值;

public class Test {
  public static void main(String[] args) {
    
  }
}

// 定义了一个狗类
class Dog {
  // 固有属性, 类的固有特征
  // 访问修饰符 类型 属性名称 = 属性值;
  public String name;
  public int age = 3;
  
  // 狗会跑
  public void run() {
    
  }
  
  // 狗会吃
  public void eat() {
    
  }
  
  // 构造方法
  public Dog() {
    
  }
  
}

局部变量与成员变量的区别:

定义位置不同:

  • 成员变量定义在类中
  • 局部变量定义在方法中或者语句里面

在内存中的位置不同:

  • 成员变量存储在堆内存的对象中
  • 局部变量存储在栈内存的方法中

声明周期不同:

  • 成员变量随着对象的出现而出现在堆中, 随着对象的消失而从堆中消失
  • 局部变量随着方法的运行而出现在栈中, 随着方法的弹栈而消失

初始化不同:

  • 成员变量因为在堆内存中, 所有都是默认的初始化值
  • 局部变量没有默认的初始值, 必须手动给其赋值才可以使用
如何创建对象:

定义类, 在根据类来创建对象

可以通过类的构造方法创建对象, 使用new关键字

类型 对象名称 = new 构造函数();

Scanner scan = new Scanner(System.in);

Random rand = new Random();

public class Test{
  public static void main(String[] args) {
    Dog dog = new Dog();
    Dog dog_2 = new Dog();
  }
}
如何访问对象:

对象.属性

public static void main(String[] args) {
  Dog dog = new Dog();
  System.out.println(dog.name);
  Dog dog_2 = new Dog();
  dog2.name = "screl";
  System.out.println(dog2.name);
}
成员的初始化默认值:

整形和浮点型默认值是 0

字符默认值是 ‘u0000’ 0

对象的默认值是 null

this 指针:

在java中, 存在this关键字, 这个关键字默认会指向当前对象

每一个对象都带有一个this指针

非静态的属性和方法不能在静态方法中使用, this只能用在非静态方法中

非静态的方法可以使用静态属性和方法

构造方法(Constructor):

与类名相同, 没有返回值, 访问修饰符为public, 非static

如果声明了返回值jvm会将其解释为普通方法

在构造对象的时候自动调用构造方法

调用其他构造函数的语句必须定义在构造函数的第一行, 原因是初始化动作要最先执行

构造函数之间禁止出现相互调用的情况

注意:

  1. 在java类中如果没有自己定义构造函数, jvm会自动生成一个无参的构造函数, 构造出来的成员的值为默认值, 当定义了一个构造函数之后, jvm就不会生成
  2. 定义构造函数时, 一定要定义一个无参构造
  3. 构造方法如果是private不能从类外部实例化
构造方法的细节:
  • 一个类中可以有多个构造函数, 多个构造函数是以重载的形式存在的
  • 构造方法中也是有return语句的, 用于结束初始化动作
  • 构造方法是可以被private修饰的, 作用:其他程序无法创建该类的对象
class Dog {
  public String name;
  public String color;
  
  
  // 自定义构造方法
  public Dog(String name, String color) {
    this.name = name;
    this.color = color;
  }
  
  // 一定要定义一个无参的构造方法
  public Dog() {
    
  }
}
this调用构造方法

在之前学习方法之间调用时, 可以通过方法名进行调用. 可是针对构造方法, 无法通过构造方法名来相互调用.

构造方法之间的调用可以通过this关键字来完成

构造方法调用格式:

this(参数列表);

调用其他构造方法的语句必须定义在构造函数的第一行,原因是初始化动作要最先执行。

构造方法之间禁止出现相互调用的情况。

class Dog {
  String name;
  int age;
  String master;
  
  public Dog() {
    
  }
  
  public Dog(String name, int age, String master) {
    this(master);	// 调用另一个构造方法
    this.name = name;
    this.age = age;
  }
  
  public Dog(String master) {
    this.master = master;
  }
}
构造代码块:

在类中可以用{ } 表示构造代码块

class Dog {
  {
    System.out.ptintln("这是一个构造代码块");
  }
}
static 关键字:

static 关键字可以修饰(属性, 方法, 类, 语法块, 导包)

static 还可以修饰内部类

被static修饰的只能执行一次

static 修饰的代码(方法或者属性), 会提前加载到内存中, 并且只有一份属于该类, 因此:

  1. 静态方法中, 无法直接调用非静态方法(或者属性)
  2. 被static 修饰的属性和方法, 不属于对象, 属于该类, 直接可以使用类名称.属性(或者方法)来调用
  3. 非静态的方法可以使用静态属性和方法
  4. 在静态方法中调用非静态方法和非静态属性, 需要先实例化
静态内部类:
class Test {
  
  // 静态内部类:
  static class Test_2 {
    
  }
  
}
静态方法:
public static void function() {
  
}
静态属性:
class Test {
	static int num;
}
静态代码块:

static { } 表示静态代码块, 只会执行一次

class Dog {
  static {
    System.out.println("这是一个静态代码块");
  }
}
静态变量与成员变量的区别
  1. 变量所属不同:

    • 静态变量所属与类, 也称为类变量
    • 成员变量所属于对象, 也称为实例变量(实例变量)
  2. 内存中的位置

    • 静态变量存储于方法区中的静态区中
    • 成员变量存储于堆内存中
  3. 在内存中出现的时间

    • 静态变量随着类的加载而加载, 随着类的消失而消失
    • 成员变量随着对象的创建而在堆内存中出现, 随着对象的消失而消失
  4. 调用方式

    • 静态变量可以用类直接调用, 也可对象调用
    • 成员变量只能被对象调用
成员的加载顺序:

静态属性最先运行, 然后是普通属性, 然后是静态代码块, 然后是构造代码块, 再然后是构造方法, 再是静态方法, 最后是普通方法

重写函数:

在打印对象的时候自动调用toString()方法

打印一个继承Object的类, 不重写则默认调用的是Object的toString()方法, 打印出来的是地址的哈希值

用@override 标记重写

class Dog {
  public String name;
  public String color;
  
  
  // 构造函数
  public Dog(String name, String color) {
    this.name = name;
    this.color = color;
  }
  
  // 重写
  @override
  public String toString() {
    return this.name + this.color;
  }
}
Java(权限)访问修饰符:

注意: 只有 缺省 和 public修饰符能修饰类

public: 任何地方都可以正常访问

protected: 只能在同包, 同类, 同子类中访问 // 主要用于修饰方法, 为继承设计

缺省(默认): 只能在同包和同类中访问

private: 只允许当前类中访问

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1024779.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号