6-1.Java 面向对象 - 初级(对象与属性、对象与方法、递归、重载、可变参数、作用域、构造器、对象创建流程详解、this 关键字)

news/2024/11/8 14:33:29 标签: java, 开发语言, 后端, java-ee, jvm, intellij-idea, intellij idea

一、对象与属性

1、基本介绍
  • 属性是类的一个组成部分,一般是基本数据类型,也可以是引用数据类型
  1. 属性的定义语法类似变量
【访问修饰符】 【属性类型】 【属性名】;
  1. 属性的定义类型可以为任何类型(基本数据类型、引用数据类型)

  2. 属性如果不赋值,有默认值

2、对象创建与属性访问
  1. 创建对象
java">// 先声明再创建
Cat cat;
cat = new Cat();
java">// 直接创建
Cat cat = new Cat();
  1. 访问属性
java">cat.name;
cat.age;
3、Java 内存结构
  1. 栈:一般存放基本数据类型

  2. 堆:存放对象

  3. 方法区:包括常量池(如字符串)和类加载信息(属性和方法信息)

4、Java 对象创建流程
java">Person p = new Person();
p.name = "jack";
p.age = 10;
  1. 加载 Person 类信息

  2. 在堆中分配空间,进行默认初始化

  3. 把地址赋给 p,p 指向对象

  4. 进行指定初始化


二、对象与方法

1、基本介绍
java">public 【返回数据类型】 【方法名】(【参数列表】) {
    【方法体】;
    return 【返回值】;
}
-说明
public访问修饰符
返回数据类型表示成员方法输出的数据类型,void 表示没有返回值
参数列表表示成员方法的输入
方法体表示为实现某一功能的代码块
return表示成员方法的输出(不是必须的)
2、注意事项
(1)返回数据类型
  1. 一个方法最多有一个返回值

  2. 返回类型可以为任何类型(基本数据类型、引用数据类型)

  3. 如果方法有返回数据类型,则方法中最后的执行必须为 return 语句,且 return 的值类型必须和要求返回的数据类型一致

  4. 如果方法有 void,则方法体中可以没有 return 语句

(2)参数列表
  1. 一个方法可以没有参数,也可以有多个参数,中间用逗号隔开

  2. 参数类型可以为任何类型(基本数据类型、引用数据类型)

  3. 调用带参方法时,一定要对应参数列表传入相应类型或兼容类型的参数

  4. 方法定义时的参数成为形式参数,简称形参,方法调用时的参数成为实际参数,简称实参,实参和形参的类型要一致或兼容,个数、顺序必须一致

(3)方法体
  • 里面编写完成功能的具体语句,但里面不能再定义方法
(4)方法调用
  1. 同一个类中的方法可直接调用

  2. 跨类方法调用需要通过对象名调用,受访问修饰符影响

java">【对象名】.【方法名】(【参数】);
(5)方法名
  • 建议遵循小驼峰式命名法

三、递归

1、基本介绍
  • 递归就是方法自己调用自己,每次调用时传入不同的变量
  1. 执行一个方法就是创建一个新的受保护的独立空间(栈空间)

  2. 方法的局部变量是独立的,不会互相影响

  3. 如果方法中使用的是引用类型变量,会共享该引用类型的数据

  4. 递归必须向退出条件逼近,否则会无限递归

  5. 当一个方法执行完毕或遇到 return 时返回,遵循谁调用,就将结果返回给谁

2、实例实操
java">package com.my.primary;

public class RecursionTest {
    public static void main(String[] args) {
        System.out.println(factorial(10));
        printNum(5);
    }

    // 递归阶乘
    public static int factorial(int num) {
        if (num == 1) {
            return 1;
        } else {
            return factorial(num - 1) * num;
        }
    }

    // 递归打印
    public static void printNum(int num) {
        if (num > 2) {
            printNum(num - 1);
        }
        System.out.println(num);
    }
}

四、重载

  • Java 中允许同一个类中有多个同名方法的存在,但需要满足以下需求
  1. 方法名相同

  2. 参数列表(参数类型,个数)必须不同,参数名无要求

  3. 返回类型无要求


五、可变参数

  • 可变参数可将一个类中多个同名同功能,但参数个数不同的方法,封装成一个方法
java">【访问修饰符】 【返回数据类型】 【方法名】(【数据类型】... 【形参名】) {
    【方法体】;
    return 【返回值】;
}
  1. 可变参数的实参可以为 0 个或多个

  2. 可变参数的实参可以是数组

  3. 可变参数的本质就是数组

  4. 可变参数可以和普通类型的参数一起放在形参列表,但是必须保证可变参数放在最后

  5. 一个形参列表中只能出现一个可变参数


六、作用域

1、属性和局部变量命名
  1. 属性和局部变量可以重名,访问时遵循就近原则

  2. 在同一个作用域中,两个局部变量,不能重名

2、属性和局部变量生命周期
  1. 属性生命周期较长,伴随着对象的创建而创建,伴随着对象的销毁而销毁

  2. 局部变量生命周期较短,伴随的代码的创建而创建,伴随着代码块的销毁而销毁

3、属性和局部变量作用范围
  1. 属性可以被本类或其他类使用

  2. 局部变量只能在本类对应的方法中使用

4、属性和局部变量修饰符使用
  1. 属性可以加修饰符

  2. 局部变量不可以加修饰符


七、构造器

1、基本介绍
java">【访问修饰符】 【方法名】(【形参列表】) {
    【方法体】;
}
  1. 构造器的访问修饰符可以是默认

  2. 一个类可以定义多个不同的构造器,即构造器重载

  3. 构造器名和类名必须一致

  4. 构造器没有返回值

  5. 构造器是完成对象的初始化,不是创建对象

  6. 在创建对象时,系统自动的调用该类的构造器

  7. 如果没有定义构造器,系统会自动给类生产一个默认的无参构造器

  8. 一旦定义了构造器,默认的无参构造器就会被覆盖,无法使用,但可以显式定义

2、基本使用
  • ConstructorTest.java
java">package com.my.primary;

public class ConstructorTest {
    public static void main(String[] args) {
        Dog dog = new Dog("阿黄", 2);
        System.out.println(dog.name);
        System.out.println(dog.age);
    }
}

class Dog {
    String name;
    int age;

    public Dog(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

八、对象创建流程详解

1、示例代码
java">class Dog {
    String name;
    int age;

    public Dog(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
java">// 创建对象
Dog dog = new Dog("阿黄", 2);
2、流程详解
  1. 加载 Dog 类信息(Dog.class),只会加载一次

  2. 在堆中分配空间(地址)

  3. 默认初始化

java">age = 0; 
name = null;
  1. 显式初始化
java">age = 1;
name = null;
  1. 构造器初始化
java">age = 2;
name = "阿黄";
  1. 把对象在堆中的地址赋给 dog

九、this 关键字

  • this 关键字代表当前对象
  1. this 关键字可以用来访问本类的属性、方法、构造器

  2. this 关键字可用于区分当前类的属性和局部属性

  3. 访问成员

java">this.【方法名】(【参数列表】);
  1. 访问构造器,只能在构造器中使用,即只能在构造器中访问另外一个构造器,且必须作为第一条语句
java">this(参数列表);
  1. this 关键字不能在类的外部使用,只能在定义类的方法中使用

http://www.niftyadmin.cn/n/5744028.html

相关文章

生产环境中添加多项式特征实现:将逻辑回归应用于非线性关系

要将逻辑回归应用于非线性关系,并实现到生产环境中,我们可以通过以下步骤来完成。这里主要使用 Python 和 Scikit-Learn 库,因为它们为机器学习任务提供了强大的工具和易于使用的接口。我们将通过添加多项式特征来扩展逻辑回归模型&#xff0…

免费数据集网站

1、DataSearch https://datasetsearch.research.google.comhttp://DataSearch 2、FindData findata-科学数据搜索引擎https://www.findata.cn/ 3、Kaggle Kaggle: Your Machine Learning and Data Science CommunityKaggle is the world’s largest data science community …

16通道AD采集方案,基于复旦微ARM + FPGA国产SoC处理器平台

测试数据汇总 表 1 本文带来的是基于复旦微FMQL20S400M四核ARM Cortex-A7(PS端) + FPGA可编程逻辑资源(PL端)异构多核SoC处理器设计的全国产工业评估板的AD采集案例。本次案例演示的开发环境如下: Windows开发环境:Windows 7 64bit、Windows 10 64bit PL端开发环境:P…

react搭建router,redux教程

react项目搭建create-router-dom,redux详细解说 1.搭建react脚手架 首先选择脚手架,dav-cli,create-react-app,Ant-Design-Pro-cli。脚手架即为代码层次。这里我们选用create-react-app脚手架 打开我们的cmd,windowR输…

第一章 Linux安装 -- 安装Debian 12操作系统(四)

文章目录 2.3.4 安装Debian 12操作系统 2.3.4 安装Debian 12操作系统 虚拟机的创建参照前面2.3.1.3节里的步骤创建,这里不再详述。 下面就开始安装Debian 12系统了,单击“开启此虚拟机”,如图1-161虚拟机主界面。 图1-161 虚拟机主界面 弹…

传输协议设计与牧村摆动(Makimoto‘s Wave)

有一条活鱼和一条死鱼,你准备怎么做,你会将活鱼红烧或将死鱼清蒸吗?好的食材只需要最简单的烹饪,不好的食材才需要花活儿。 我此前的文字几乎都在阐述一个观点,广域网就是那条死鱼,数据中心则是那条活鱼。…

应用插件化及其进程关系梳理

插件应用的AndroidManifest.xml <manifest xmlns:android"http://schemas.android.com/apk/res/android"coreApp"true"package"com.demo.phone"android:sharedUserId"android.uid.phone"><uses-sdk android:minSdkVersion&q…

玲珑艾橘 - 不喜欢但不行

玲珑艾橘&#xff0c;是指的八面玲珑&#xff0c;始终戴着面具&#xff0c;不喜欢戴着&#xff0c;但为了生存不得不迎合&#xff0c;有点大众心理&#xff0c;且不得不这么做。 每个人都戴着面具&#xff0c;面对不同的人戴不同的面具&#xff0c;相比这面具不错。 那个不戴面…