JavaSE第三章 面向对象 POP 和 java类

本文详细讲解了Java中的面向对象编程,包括POP和OOP的区别、类的结构、对象的创建与使用、类中变量的类型、方法、对象引用、static关键字的应用以及初始化执行顺序等核心概念。通过学习,读者将对Java类有更深入的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3 第三章面向对象

3.1 POP和OOP

  1. 面向过程:procedure oriented programming 缩写 POP, 分析问题, 找出解决问题的步骤, 然后按步骤一步一步实现.

    • POP适合处理简单的问题, 直接关注流程.
  2. 面向对象:object oriented programming 缩写 OOP, 以分类的方式思考和解决问题.

    • OOP适合处理复杂的事情,先使用面向对象的方式对整体关系作出分类,然后,根据不同的类深入细节的处理。
  3. 两者之间的关系

    ​ 面向对象无法取代面向过程,他们是相辅相成的。面向对象关注于从宏观上把握事物之间的关系,在具体到如何实现某个细节时,仍然采用面向过程的思维方式。面向对象如果离开了面向过程,就无法实现真正的落地,成为无源之水。

3.2 Java类

3.2.1 what

类是一个模板, 它描述了某个事物的属性和行为.

类是客观世界中某事物的一些基本特征的抽象.

3.2.2 类的结构

变量成员(属性)
构造方法
成员方法
内部类

3.2.3 类的实例—对象

创建对象
//对象
Student tom = new Student();

Student misa = new Student();
对象的使用
// 同一类的每个对象有不同的成员变量存储空间。
// 调用对象属性
tom.name;

misa.name;

// 调用类方法
// 同一类的每个对象共享该类的方法。
tom.getUp();

misa.getUp();
总结

类是某一事物的抽象概念, 是一个模型.

对象是类的一个具体存在, 是一个实例.

3.2.4 类中变量

成员变量
  • 定义在类中,并在方法体之外的变量;
  • 成员变量会在类创建对象时复制一份到对象中去
  • 在类中都可以使用, 其作用范围为整个类体。
局部变量
  • 在方法, 块或构造方法中声明定义的变量叫做局部变量.
  • 变量的声明和初始化都在方法中, 方法结束后, 变量就会自动销毁.
静态变量

用static修饰的变量叫做静态变量(类变量), 它也声明在类中方法体之外

静态变量与非静态变量的区别
  1. 出现时间不同:
    • 静态变量只有一个, 在类加载时就已经存在 ;
    • 非静态变量在创建对象时才会出现 ;
  2. 存储地点(出现地点)不同:
    • jvm虚拟机在加载类的过程中为静态变量分配内存 , 静态变量存储在方法区中的静态区
    • 每创建一次对象,就会为变量分配一次内存,非静态变量存储在堆空间中
  3. 访问方式不同:
    • 静态变量被所有实例对象共享
    • 非静态变量只能在单个对象中访问, 不能共享
  4. 生命周期不同:
    • 静态变量会在jvm虚拟机关闭(程序执行完成之后)之后消失, 取决于类的生命周期,
    • 非静态变量会随着对象的回收, 而消失. 取决于实例对象的生命周期.

3.2.5 方法

构造方法

用来创建对象的方法

会在创建对象(对象实例化)时调用

  • 构造方法与类名同名, 无返回值 .也无需void修饰.
  • 一个类可以有多个构造方法,但方法参数不同;
  • 每个类都有构造方法。如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法,但是只要在一个Java类中定义了一个构造方法后,默认的无参构造方法即失效。
   /*
         构造方法  无参
     */
    public Student(){

    }
//  有参 构造方法
    public Student(String name, String sex, int age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

成员方法

定义在类中。这种方法在创建对象的时候创建.

静态方法

用static修饰的方法. 只能用类名来调用.

方法的重载

方法的重载是指一个类中可以定义有相同的名字,但参数不同的多个方法。调用时会根据参数的不同,选择不同的重载方法

/**
     * 吃早餐
     */
	//和返回值无关
	//参数数量不同
    public void haveBreakfast() {
        System.out.println("吃早餐");
    }
	//参数类型不同	
    public void haveBreakfast(String type1 ,String type2) {
        System.out.println(this.name + " 吃 "+type1+" 和 " +type2);
    }

	//参数顺序不同
    public void haveBreakfast(String type ,int count) { 
        System.out.println(this.name + " 吃 "+count+" 个 " +type);
    }
	//参数顺序不同
    public void haveBreakfast(int count,String type) { 
        System.out.println(this.name + " 吃 "+count+" 个 " +type);
    }

3.2.6 对象的引用

对象
Car car= new Car();//创建对象
Car car1;
car1 = new Car();

  1. new Car(); 调用car的构造方法, 在堆空间中创建一个对象.
  2. Car car 是创建了一个Car类型的引用变量, 它存储在栈空间.
  3. = 赋值运算符把右边的对象赋给car引用变量.

new Car(); 在堆空间中创建了一个对象实体, 但没有名字, 就无法访问它.

所以就要使用对象引用变量来访问对象实体.

基本类型与引用类型的区别
基本数据类型变量在栈空间存值
引用数据类型对象在栈空间存引用变量. 在堆空间存储对象属性
值传递与引用传递

值传递: 只传递变量中的值, 不传递变量.

引用传递: 它传递的其实不是值, 而是在栈空间存储的引用变量的地址

基本类型传递的是该数据值本身。引用类型传递的是对对象的引用,而不是对象本身 。

3.2.7 static关键字

概念:

static 静态 , 可以用来修饰类的属性, 方法 , 代码块 , 内部类.

特点:
  1. 类加载的时候加载, 类加载完成之后, static 就已经存在.

  2. 优先于对象被加载声明

  3. 修饰的成员,属于类本身, 被所用对象共享

  4. 可以不用创建对象, 可以直接用类名调用

使用:

可以用对象调用,也可以使用类名调用;

static修饰的成员只能访问静态成员, 不能访问非静态成员

3.2.8 代码块

实例块

每次创建对象时调用, 和构造方法差不多

{

}
静态块

只在加载类的时候调用一次.

static{

}

3.2.9 初始化执行顺序

  1. 加载类, 到方法区中 (加载类)
  2. 静态变量初始化 , 存储到静态区中(静态变量)
  3. 静态块开始执行, 存储到静态区中(静态块)
  4. 创建对象时, 初始化成员变量; (成员变量)
  5. 创建对象时, 执行实例块. (实例块)
  6. 再执行构造方法,(构造方法)
  7. 成员方法 , (方法代码块)

3.2.10 包 package

概念: 实质就是文件夹

作用: 分类, 管理类.

体现:

  1. 导入外部包或类 , import
  2. 避免类重名 重名时可使用全类名
  3. 按照不同的功能管理类
  4. 访问控制权限
包的命名规范
/**
*第一级项目类型: com , org, edu等等
*第二级公司或组织名: baidu, sun, oracle, misakora等等
*第三级项目名: misakora
*第四级功能模块的名称: controller, servlet, dao, mapper等等
*第五级系统用户: .......
*第六级用户和角色: ......
*.......
*/

3.2.11 访问权限修饰符

修饰符含义使用范围
public公共的类, 属性, 方法
protected受保护的属性, 方法
(default)默认类, 属性, 方法
private私有的属性, 方法
同类同包中不同包子类不同包中类
publictruetruetruetrue
protecttruetruetruefalse
defaulttruetruefalsefalse
privatetruefalsefalsefalse
package com.misakora.project.javaoop.day9;
public class Demo1 {
    /**
     * public    可用于 类 属性 方法
     * protected 可用于 属性  方法
     * default  可用于 类 属性 方法
     * private 可用于 属性  方法
     */
    public int publicNum;
    protected int proNum;
    int num;
    private int privateNum;

    public void test(){
        Demo1 demo1 = new Demo1();
        System.out.println(demo1.publicNum);
        System.out.println(demo1.proNum);
        System.out.println(demo1.num);
        System.out.println(demo1.privateNum);
    }

}

// 同包不同类
package com.misakora.project.javaoop.day9;
public class Demo3 {

    public void test(){
        Demo1 demo1 = new Demo1();
        System.out.println(demo1.publicNum);
        System.out.println(demo1.proNum); 
        System.out.println(demo1.num);
        System.out.println(demo1.privateNum);//报错 //私有  只能同类访问
    }
}
//另一个包中的类
package com.misakora.project.javaoop.test;

import com.misakora.project.javaoop.day9.Demo1;

public class Demo2 {

    public void test(){
        Demo1 demo1 = new Demo1();
        System.out.println(demo1.publicNum);
        System.out.println(demo1.proNum);//报错 //受保护的  ,只能同包访问,和子类访问
        System.out.println(demo1.num);//报错 // 默认   只能同包访问
        System.out.println(demo1.privateNum);//报错 //私有  只能同类访问
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值