4.类和对象,方法,作用域

本文详细介绍了Java编程中的类定义、类的性质,包括访问修饰符、类的五大成员(属性、方法、构造器、代码块、内部类)、this指针以及类的内存分布。此外,还讲解了对象的创建、访问成员以及对象和方法的内存分配机制。重点阐述了方法的传参机制、递归、方法重载和可变参数。最后提到了作用域的概念。
摘要由CSDN通过智能技术生成

目录

1.类的定义

 2.类的性质

2.1 访问修饰符

2.2 类的五大成员(基础)

2.2.1 普通属性

2.2.2 普通方法

2.2.3 构造器

2.2.4 代码块

2.2.5 内部类

 2.3 this指针

2.4 类的内存分布

3.对象

3.1 创建对象

3.2 直接访问对象成员

3.2.1 访问对象的成员属性

3.2.2 调用对象的成员方法

3.3 类和对象的内存分配机制

4.方法

4.1 方法传参机制

4.2 递归方法

4.3 方法重载

4.4 可变参数(不定参数)

5.作用域


1.类的定义

声明类的语法:访问修饰符(public或无) class classname{int;char;...(成员)}

  0.以xxx.java为文件名的文件中,只能有一个以public修饰的java类,并且文件名为该文件,否则会报错

class animal{
    //1.成员属性
    String name;
    int age;
    float weight;
    float height;
    //内部类
    class Type{
        int X;
    }
    //4.代码块
    {
        System.out.println("animal类或其子类对象被创建");
    }
    //2.构造器
    public animal(){

    }
    public animal(String name,int age, float weight, float height) {
        this.name = name;
        this.age = age;
        this.weight = weight;
        this.height = height;
    }
    //3.成员方法
    void InformationOutput(animal ani){
        System.out.println("animal Name is " + ani.name);
        System.out.println("animal Age is " + ani.age);
        System.out.println("animal Weight is " + ani.weight);
        System.out.println("animal height is " + ani.height);

    }
}

 2.类的性质

2.1 访问修饰符

2.2 类的五大成员(基础)

  1. 属性

  2. 方法

  3. 构造器

  4. 代码块

  5. 内部类

2.2.1 普通属性

  1. 一个类的组成部分,一般是基本数据类型,或引用数据类型(对象,数组)
  2. 属性的语法同变量,属性的定义类型为任意

2.2.2 普通方法

  1. 在类里声明或定义方法。
  2. 语法:访问修饰符 数据类型(返回) 方法名( 形参列表 ); 这是声明(声明需要添加关键字abstract,并且类声明为抽象类,且不能实例化,不加分号加括号(方法体)是定义
    抽象方法声明

2.2.3 构造器

  1. 用于初始化所用
  2. 语法:访问修饰符 类名 (形参列表){指令 }

1.默认存在无参构造器

2.自定义构造器将会覆盖无参构造器,建议之前将无参构造器显化

2.2.4 代码块

  1. 功能:用于初始化
  2. 语法: 只有方法体  {  指令 }

2.2.5 内部类

  1. 功能: 用于设计某种数据类型,便于类的某些成员使用,束缚类的作用域或者使代码更加简洁
  2. 语法:局部内部类,成员内部类(见后文)

 2.3 this指针

(指向对象),用于区分当前类的属性和局部变量

  1. this只能在 类方法定义(类体) 中使用
  2. this可以访问 本类的属性(this.属性),方法(this.方法),构造器 this(形参列表) :  只能在构造器中调用,调用另外一个构造器(且必须在第一句)

2.4 类的内存分布

  1. 栈为对象引用,声明的数据在这里→堆存的是方法区常量池(字符串)的地址,和基本数据类型的数据
  2. 方法区,常量池存的(字符串)的内容
  3. 加载类的信息:属性,方法(函数)

3.对象

类的实例化叫做对象(new )

3.1 创建对象

一般在类外 或类内(一般使用方法嵌套)

1. 直接创建     

        classname 变量 = new classname();

2.先声明变量 在创建

        classname 变量;

        变量 = new classname();

//解释:表示 变量 指向创建的对象实例

public class Main {
    public static void main(String[] args) {
        //直接创建
        animal animal0 = new animal();
        //先声明在创建
        animal animal1;
        animal1 = new animal();
        

    }
}

3.2 直接访问对象成员

注:入门暂时不考虑访问修饰符,static,final等关键字

3.2.1 访问对象的成员属性

访问属性为 对象名.属性名

        System.out.print(animal0.name);

在创建对象时如果没有给属性没有赋值,会有初始值 

        System.out.println("animal Name is " + animal0.name); //null
        System.out.println("animal Age is " + animal0.age); //0
        System.out.println("animal Weight is " + animal0.weight);//0.0
        System.out.println("animal height is " + animal0.height);

3.2.2 调用对象的成员方法

调用方法为 对象名.方法名

 细节:

1.在类内调用本类的方法,可以直接调用在这同一个类的方法(不用创建对象)

2.调用静态方法则不需要创建对象(后面再讲)

类体内定义静态方法
在类外可以直接调用

3.内存:

  • 栈里创建空间main栈
  • 执行创建对象指令是,在堆里产生对象
  • 执行方法调用指令时,再开一个独立的栈空间,将形参付给函数(值传递或引用传递),同时调到函数部分执行指令,直到产生返回值,return将返回到原来的栈中,指令将回到原语句,独立栈将被释放,执行之后的代码
  • 全部执行完毕后main栈将被摧毁

3.3 类和对象的内存分配机制

  • 类:在方法池加载类信息
  • 对象(new ) :在堆区里开空间(默认值)

4.方法

4.1 方法传参机制

  1. 基本数据类型是值传递,是被传到新栈里的,与原来的不冲突,不会影响实参
  2. 引用数据类型传参,为引用传递(因为数据在堆里,地址被传进去了,指向原来的数组)(对象赋值是引用传递)
    //animal类中定义的方法(形参为animal类)
    static void Clear(animal ani){
        ani.name = null;
        ani.age = 0;
        ani.height = 0.0f;
        ani.weight = 0.0f;

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

        animal animal1 = new animal("tom",3,5.4f,0.53f);
        //引用传递
        animal animal2 = animal1;
        animal2.InformationOutput();
/*        animal Name is tom
        animal Age is 3
        animal Weight is 5.4
        animal height is 0.53*/
        
        animal1.InformationOutput();
/*        animal Name is tom
        animal Age is 3
        animal Weight is 5.4
        animal height is 0.53*/
        animal.Clear(animal1);
        animal1.InformationOutput();
/*        animal Name is null
        animal Age is 0
        animal Weight is 0.0
        animal height is 0.0*/


    }

}

4.2 递归方法

  1. 自己调用自己
  2. 内存:不断开栈,直到终止,销毁上个栈,然后逆方向返回每个栈不断执行之后的语句。(十分浪费资源)
    public static void method(int n){
        if(n > 0){
            n--;
            System.out.println(n);
            method(n);
        }
    }

//调用 
//method(10); //9 8 7 6 5 4 3 2 1 0

4.3 方法重载

允许一个类中多种同名方法的存在,但要求形参列表不一致,(数据类型,形参数量),返回值数据类型无要求

构造器重载

 两个形参为可变参数的方法重载

    public static int sum(int ...num){
        int sum = 0;
        for(int i = 0;i < num.length ;i++){
            sum += num[i];
        }
        return sum;
    }

    public static float sum(float ...num){
        float sum = 0;
        for(int i = 0;i < num.length ;i++){
            sum += num[i];
        }
        return sum;
    }

4.4 可变参数(不定参数)

  1. 语法:访问修饰符 返回类型 方法名(数据类型...形参名)
  2. 多个同名,同功能,参数个数不同的方法封装成一个方法
  3. 省略号表示接受的是可以是多个参数,使用时可以当做数组来使用。(本质就是数组)
  4. 可以和普通参数放在形参列表,但是可变参数必须放在最后,最多一个可变参数
    public static int sum(int ...num){
        int sum = 0;
        for(int i = 0;i < num.length ;i++){
            sum += num[i];
        }
        return sum;
    }

 在本类的main方法中运行下列语句:

        System.out.println(sum(1,2,2,2,2,2,22,120)); //153

5.作用域

  1. 除了属性之外的其他变量为局部变量,作用域为定义在它的代码块中,没有默认值,必须在赋值后才能使用
  2. 类里的属性是全局变量,有默认值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值