JavaSE 基础(七) 类和对象

目录

前言

一.谈谈面向对象

1.什么是面向对象

2.面向对象与面向过程 

二.类的定义和使用

1.概述

2.类的定义格式 

3.定义一个学生类

 三.类的实例化

1.什么是类的实例化

 2. 注意事项

四. this引用

1.什么是this引用

2. this引用的特性

五. 对象的构造及初始化

1.构造方法

1.1 概念  

1.2 特性

 2. 默认初始化

 3.就地初始化

六. 封装 

1.封装的概念

 2. 访问限定符

3. 包 

3.1 包的概念

 3.2 导入包中的类

3.3 自定义包

七. static成员

1.static修饰成员变量

 静态成员变量特性:

2. static修饰成员方法 

 静态方法特性

 3.static成员变量初始化

静态成员变量的初始化分为两种:就地初始化和静态代码块初始化。

 八. 代码块

1 代码块概念以及分类

2 普通代码块 

3 构造代码块 

4 静态代码块

后记


前言

Hi~ 你好! 

欢迎点击我的博客 : )       

这是我的学习总结,希望也能帮助到你

我的博客地址:hi~,我在这里~,欢迎关注哦,

三连不迷路,优质内容持续更新!

一.谈谈面向对象

1.什么是面向对象

Java 是一门纯面向对象的语言 (Object Oriented Program ,简称 OOP) ,在面向对象的世界里,一切皆为对象。 向对象是解决问题的一种思想,主要依靠对象之间的交互来完成任务.

 

有对象嘛?

没有就new一个!

2.面向对象与面向过程 

就拿做饭来说  :有一天,你兴致勃勃想为家里做一顿午饭,

面向过程 就是你自己做饭,因为你很生疏,必须照着菜谱做饭,买菜,切菜,炒菜的顺序,量的大小,都必须按着菜谱一个接一个的来,一旦你想中途调整,也有心无力.面向过程就相当于你自己从零开始按流程来炒菜做饭. 这,就是面向过程炒菜!

面相对象 就是你想做饭,但不会,只要喊一声:"妈~~~!",这时,就成了你,妈妈,做饭三者的事了,

伟大的妈妈会将炒菜的一系列流程全权包揽,甚至随意调整顺序和添加流程.此时的你,通过妈妈来帮助你炒菜. 这,就是面对对象炒菜!

二.类的定义和使用

1.概述

类是用来对一个对象(实体)进行描述的,描述了对象的属性和功能,是计算机可以识别

2.类的定义格式 

// 创建类
class ClassName{
field; // 字段(属性) 或者 成员变量
method; // 行为 或者 成员方法
}

class是定义类的关键字      类名采用大驼峰定义ClassName     括号{}内是类的主体

类中的属性是类的成员变量,类中的方法是类的成员方法

3.定义一个学生类

public class Student{
    public String name;
    public String gender;
    public short age;
    public double score;
    public void DoClass(){}
    public void DoHomework(){}
    public void Exam(){}
}
1.一般一个文件当中只定义一个类
2.public 修饰的类必须要和文件名相同
3.main 方法所在的类一般要使用 public 修饰

 三.类的实例化

1.什么是类的实例化

定义了一个类,就相当于在计算机中定义了一种新的类型
用类类型创建对象的过程,称为类的实例化,在Java中采用new关键字,配合类名来实例化对象。
    public static void main(String[] args) {
        Student student1 = new Student();
        Student student2 = new Student();
        student1.name="小明";
        student2.name="小红";
        student1.DoHomework();
        student2.Exam();

    }
            小明写作业
            小红考试

 2. 注意事项

1.new 关键字用于创建一个对象的实例.
2.使用 . 来访问对象中的属性和方法.
3.同一个类可以创建对个实例
4.实例化出的对象 占用实际的物理空间,存储类成员变量
5.类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图 

四. this引用

1.什么是this引用

this 引用指向当前对象 ,在成员方法中所有成员变量的操作,都是通过this 引用去访问 。只不过所有的操作对用户是透明的,用户不需要来传递,编译器自动完成
public class Date {
    public int year;
    public int month;
    public int day;
    public void setDay(int year, int month, int day){
        this.year = year;
        this.month = month;
        this.day = day;
    }
    public void printDate(){
        System.out.println(this.year + "/" + this.month + "/" + this.day);
    }
    public static void main(String[] args) {
        Date d = new Date();
        d.setDay(2023,9,20);
        d.printDate();
    }
}

                                        this引用的是调用成员方法的对象 

2. this引用的特性

1.this的类型:哪个对象调用就是哪个对象的引用类型

2. this只能在"成员方法"中使用

3. " 成员方法 " 中, this 只能引用当前对象,不能再引用其他对象
4. this 成员方法 第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this 负责来接收

五. 对象的构造及初始化

1.构造方法

1.1 概念  
构造方法 ( 也称为构造器 ) 是一个特殊的成员方法, 名字必须与类名相同,在创建对象时,由编译器自动调用,并且 在整个对象的生命周期内只调用一次
     public Student(String name, String gender, int age, double score) {
        this.name = name;
        this.gender = gender;
        this.age = age;
        this.score = score;
    }

 构造方法的作用就是对对象中的成员进行初始化,并不负责给对象开辟空间

1.2 特性

1. 名字必须与类名相同

2. 没有返回值类型,不能设置为void

3. 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次
4. 构造方法可以重载
5.如果用户没有定义,编译器会生成无参的默认构造方法,一旦用户定义,编译器则不再生成。
6.构造方法中,可以通过 this 调用其他构造方法来简化代码(this必须在第一行)

 2. 默认初始化

局部变量在使用时必须要初始化,而成员变量可以不用,这是因为: new关键字
 Student student1 = new Student("小明","男",12,62.5);
完成这行代码,在JVM层面,要做以下几个步骤:
1. 检测对象对应的类是否加载了,如果没有加载则加载
2. 为对象分配内存空间
3. 处理并发安全问题
4. 初始化所分配的空间(对象的成员设置初始值)
5. 设置对象头信息
6. 调用构造方法,给对象中各个成员赋值

 3.就地初始化

public class Date {
        public int year = 1900;
        public int month = 1;
        public int day = 1;
        public void printDate(){
            System.out.println(this.year + "/" + this.month + "/" + this.day);
        }
        public Date(){
        }

    public Date(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }
    public static void main(String[] args) {
            Date d1 = new Date(2021,6,9);
            Date d2 = new Date();
            d1.printDate();
            d2.printDate();
        }
}

2021/6/9
1900/1/1
在声明成员变量时,就直接给出了初始值,
代码编译完成后,编译器会将所有给成员初始化的这些语句添加到各个构造函数中

六. 封装 

1.封装的概念

面向对象程序三大特性:封装、继承、多态
而类和对象阶段,主要研究的就是封装特性。封装就是套壳屏蔽细节
将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,
仅对外公开接口来和对象进行交互

 2. 访问限定符

  通过类和访问权限来实现封装

1.类可以将数据以及封装数据的方法结合在一起,更符合人类对事物的认知
2.访问权限用来控制方法或者字段能否直接在类外使用
public class Phone {
    private String brand;
    private int prince;
    public String screen;
    String memory;//default属性

    public Phone(String brand, int prince, String screen, String memory) {
        this.brand = brand;
        this.prince = prince;
        this.screen = screen;
        this.memory = memory;
    }
    public void Boot(){
        System.out.println("开机");
    }
    public void PowerOff(){
        System.out.println("关机");
    }
    public void Call(){
        System.out.println("打电话");
    }
}
public class TestPhone {
    public static void main(String[] args) {
        Phone p1 = new Phone("iphone",8000,"oled","512");
        System.out.println(p1.memory);
        System.out.println(p1.screen);
        //System.out.println(p1.prince);
    }
}

public:可以理解为一个人的外貌特征,谁都可以看得到,可以任何其他类访问
default: 对于自己家族中(同一个包中)不是什么秘密,对于其他人来说就是隐私了
private:只有自己知道,其他人都不知道
访问权限除了可以限定类中成员的可见性,也可以控制类的可见性

default权限指:什么都不写时的默认权限,只能被本包中类访问

一般情况下成员变量设置为private,成员方法设置为public

3. 包 

3.1 包的概念
1.为了更好的管理类,把多个类收集在一起成为一组,称为软件包。有点类似于目录 

2.包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式 

3.在同一个工程中允许存在相同名称的类,只要处在不同的包中即可。 

 3.2 导入包中的类

import java.util.Date;
import java.util.*;
public class Test {
    public static void main(String[] args) {
        Date date = new Date();//得到一个毫秒级别的时间戳
        System.out.println(date.getTime());
    }
}
使用 import语句导入包.使用import java.util.*可以调用java.util的其他类
3.3 自定义包
1.在文件的最上方加上一个 package 语句指定该代码在哪个包中 .
2.包名需要尽量指定成唯一的名字 , 通常会用公司的域名的颠倒形式
3.如果一个类没有 package 语句 , 则该类被放到一个默认包中 .

七. static成员

1.static修饰成员变量

static 修饰的成员变量,称为静态成员变量
静态成员变量最大的特性: 不属于某个具体的对象,是所有对象所共 享的
 public static String classRoom = "D305";

 public static void main(String[] args) {
        System.out.println(Student.classRoom);
        静态成员变量可以直接通过类名访问
        System.out.println(student1.classRoom);
        也可以通过对象访问,但不推荐
}

 静态成员变量特性:
1. 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中
2. 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问
3. 类变量存储在方法区当中
4. 生命周期伴随类的一生 ( 即:随类的加载而创建,随类的卸载而销毁 )

2. static修饰成员方法 

static 修饰的成员方法称为静态成员方法,是类的方法,不是某个对象所特有的
静态成员一般是通过静态方法来访问的。
    public static String classRoom = "D305";
    public static String getClassRoom(){
        return classRoom;静态成员一般是通过静态方法来访问的。
    }
  
      System.out.println(Student.getClassRoom());
 静态方法特性
1. 不属于某个具体的对象,是类方法
2. 可以通过对象调用,也可以通过类名 . 静态方法名 (...) 方式调用,更推荐使用后者
3. 不能在静态方法中访问任何非静态成员变量
4. 静态方法中不能调用任何非静态方法,因为非静态方法有 this 参数,在静态方法中调用时候无法传递 this 引用

 3.static成员变量初始化

静态成员变量一般不会放在构造方法中来初始化,
构造方法中初始化的是与对象相关的实例属性
静态成员变量的初始化分为两种:就地初始化和静态代码块初始化

  就地初始化指的是:在定义时直接给出初始值             

 八. 代码块

1 代码块概念以及分类

{ }定义的一段代码称为代码块,分为四种
普通代码块
构造块
静态块
同步代码块

2 普通代码块 

普通代码块:定义在方法中的代码块 .
    public static void main(String[] args) {
        {
            int money = 100;
            System.out.println(money+1);
        }

3 构造代码块 

         定义在类中的代码块(不加修饰符)。也叫:实例代码块构造代码块一般用于初始化实例成员变量

public class Student {
    public String name;
    public String gender;
    public int age;
    public double score;
    {
        this.name = "小兰";
        this.age = 15;
        System.out.println("构造代码块");
    }

4 静态代码块

使用 static 定义的代码块称为静态代码块。 一般用于初始化静态成员变量
static {
        classRoom = "306";
        System.out.println("静态代码块");
    }

1. 静态代码块不管生成多少个对象,其只会执行一次,构造代码块几个对象几次

2. 静态成员变量是类的属性,因此是在 JVM 加载类时开辟空间并初始化的
3. 如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行 ( 合并)
4. 实例代码块只有在创建对象时才会执行

后记

看到这里,希望能帮到你~

您的点赞 ,收藏 ,关注 是我创作的最大动力!

同时也欢迎在评论区进行交流,共同进步~       

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值