类的成员

本文介绍了Java类的成员,包括属性(字段)、方法、构造器和this关键字。属性描述对象的状态,方法描述对象的行为,构造器用于初始化对象,this关键字用于引用当前对象。文章详细阐述了成员变量的权限修饰符、方法的重载、构造器的使用以及块的概念,并解释了this关键字在方法和构造器中的应用。

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

1.Java语言的基本元素

类实际上在现实当中是不存在的,是一个抽象的概念,是一个模板。类的本质上现实世界当中某些事物具有共同特征,将这些共同特征提取出来形成的概念就是一个“类”。在Java的世界中,“万物皆为对象”。

对象是实际存在的个体(真实存在的个体),是类的实例化。

2.类的成员

1. 属性(field)
用来描述具体某个对象的特征。描述的是对象的状态信息,通常以变量的形式进行定义。
语法格式:
  权限修饰符 [特征修饰符] 数据类型 属性名字[ = 值];
例如:

public class Person {
    public String name;//成员变量
    public int age;
    public String sex;
}

变量通常分为成员变量和局部变量。
在类体中,方法体之外定义的变量称为“成员变量”

  • 成员变量定义在类体中,在整个类中都可以被访问。
  • 成员变量分为类变量和实例变量,实例变量存在于对象所在的堆内存中
    成员变量有默认初始化值
  • 成员变量的权限修饰符可根据需要,选择任意一个
  • 创建对象后才能访问的变量称为实例变量

定义在方法内,代码块内的变量称为局部变量

  • 局部变量定义在局部范围内
  • 局部变量存在于栈内存中
  • 作用范围结束,变量空间自动释放
  • 局部变量无默认值,每次必须显示初始化
  • 局部变量声明时一般不指定权限修饰符
    在这里插入图片描述
    在这里插入图片描述

2. 方法(method)
描述的是对象的动作信息,为定义在类中的具特定功能的一段独立的程序。
语法格式:
权限修饰符 [特征修饰符] 返回值类型 方法名字 (参数)[抛出的异常]{
  方法体
}

  • 方法是类或对象行为特征的抽象,用来完成某个功能操作。在某些语言中也称为函数或过程。
  • 将功能封装为方法的目的是,可以实现代码重用,简化代码
  • Java里的方法不能独立存在,所有的方法必须定义在类里。
public class Person {
    //属性和方法--静态描述特点
    //必要的组成部分
    //  修饰符   数据类型   属性姓名[=值]
    //权限修饰符 [特征修饰符] 数据类型 属性名字
    public String name;//全局变量
    public int age;
    public String sex;

    //方法--描述可以做什么事情(动作)
    //权限修饰符 [特征修饰符] 返回值类型 ([参数列表]){方法体}
    //1、无参数无返回值
    //2、无参数有返回值
    //3、有参数无返回值
    //4、有参数有返回值

    //无参数无返回值
    //设计一个方法  用来描述人类可以做吃饭这件事
    public void eat(){
        System.out.println("吃了一碗大米饭");
    }
    //无参数有返回值
    //设计一个方法  用来告诉别人我的名字
    public String tellName(){
        System.out.println("你们问我叫什么名字呀?勉强告诉你们一下");
        return "张三";
    }
    //有参数无返回值
    //设计一个新的吃饭方法
    public void chiFan(int count,String something){
        System.out.println("吃了"+count+"碗"+something);
    }
    //有参数有返回值
    //设计一个方法 买饮料  1.需不需要提供条件   2.需不需要给别人留下什么结果
    //需要提供条件   钱     需要返回值   饮料
    public String buyDrink(int money){
        if(money>5){
            return "红牛";
        }
        else{
            return "矿泉水";
        }
    }
}

方法的重载(overload)
概念:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
重载的特点:
与返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类型)。调用时,根据方法参数列表的不同来区别。

参数列表的不同体现在哪里?

  • 参数的个数
  • 参数的leixing
  • 参数的顺序
public class TestOverload {

    //方法重载
    public void test(){
        System.out.println("执行了test方法中没有带参数");
    }
    public void test(boolean b){
        System.out.println("执行了test方法中带boolean参数"+b);
    }
    public void test(int i){
        System.out.println("执行了test方法中带int参数"+i);
    }
    public void test(char c){
        System.out.println("执行了test方法中带char参数"+c);
    }
    public void test(String s){
        System.out.println("执行了test方法中带String参数"+s);
    }

    public static void main(String[] args){
        //创建对象
        TestOverload to = new TestOverload();
        
        //通过对象.方法名字  调用方法  可以直接通过方法名字定位方法
        //如果方法名字一直  通过方法的参数列表类型来定位
        //通过对象调用方法 方法执行一遍
        to.test('a');//方法参数传递  类型之间的转换问题
        //当没有char类型的方法时,会找一个参数类型可以自动转换的int类型方法

        System.out.println(to);//TestOverload@34e45f-->hashCode码
    }
}

可变个数的参数

public class Test {
    //JDK1.5版本之后 出现的一个新的写法-->动态参数列表
    //不能与数组类型的方法构成重载,因为本质上是一样的
    public void test(int... x){//本质上是数组
        System.out.println("执行了test方法携带的动态列表");
        for(int i=0;i<x.length;i++){
            System.out.println(x[i]);
        }
    }
    public void test(int[]...x){
        System.out.println();
    }


    public static void main(String[] args){
        //创建对象
        Test t = new Test();
        t.test(1,2,3,4,5);
        
    }
}

方法参数返回值问题
Java的实参值如何传入方法呢?
Java里方法的参数传递方式只有一种:值传递。 即将实际参数值的副本(传入方法内,而参数本身不受影响。

  • 形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参
  • 形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参
public class Test {
    public int changeNum(int x){//将void变为int类型的
        System.out.println("方法执行开始:"+x);//1
        x = 10;
        System.out.println("方法执行最终:"+x);//10
        return x;//返回值  将x临时的变量空间内的值(值或引用)返回出来
    }

    public void changeArray(int[] x){
        System.out.println("方法执行开始:"+x[0]);//1
        x[0] = 10;
        System.out.println("方法执行最终:"+x[0]);//10
    }
    //每一个类中不是必须包含主方法的
    //主方法不属于任何一个类,主方法主语虚拟机
    public static void main(String[] args){
        //创建一个对象--前提 有一个类模型
        //加载类模板的过程
        Test t = new Test();//堆内存中开辟空间
        int a = 1;
        a = t.changeNum(1);//需要一个int的条件  int x = a;
        //调用方法  让方法执行一遍
        //1.方法存在哪里? 堆内存的对象空间内
        //2.方法在哪里执行?  栈内存中开辟一块临时的方法执行空间
        System.out.println("方法执行完毕,main方法中a的值:"+a);//1
        // 临时开辟的执行changeNum方法的空间就没了   a的值没有改变只是被用了

        System.out.println("++++++++++++++++++++++++++++++++++++++");
        //加载类模板的过程
        int[] b = new int[]{1,2,3};
        t.changeArray(b);
        //方法存在堆内存的对象空间里 方法执行在栈内存中的临时空间里
        //调用方法值将b的值传递给了x  int[] x = b; 传递过来的就是一个引用
        System.out.println("方法执行完毕,main方法中b数组的第一个值:"+b[0]);//10

        /**形参和实参
         * 形参可以理解为是方法执行时的临时变量空间 x
         * 实参可以理解为是方法调用时传递进去的参数 a
         *方法调用时会将实参的内容传递给形参
         * 如果内容是基本类型  传递的是值           形参改变  实参不变
         * 如果内容是引用类型  传递的是引用(地址)   形参改变  实参跟着改变
         */
    }
}

方法参数及返回值传递(基本类型)
在这里插入图片描述
方法参数及返回值传递(引用类型)
在这里插入图片描述

3. 构造方法(构造器)
构造方法的作用:构建(构造)当前类的对象;给对象进行初始化
语法格式:
权限修饰符 与类名一致的方法名 (参数列表) [抛出异常]{
  语句;
}

public class Animal {
	private int legs;
	// 构造器
	public Animal() {
		legs = 4;
	} 
	public void setLegs(int i) {
		legs = i; 
	}
	public int getLegs() {
		return legs; 
	}
}

创建Animal类的实例:Animal a = new Animal();调用构造方法,将legs初始化为4。
根据参数不同,构造器可以分为如下两类:

  • 隐式无参数的构造方法(系统默认提供)
  • 显式定义一个或多个构造方法(无参、有参)

注意

  • 一旦显式定义了构造方法,则系统不再提供默认构造方法
  • 一个类可以创建多个重载的构造方法

构造方法的重载

public class Person{
public Person(String name, int age, Date d) {this(name,age);}
public Person(String name, int age) {}
public Person(String name, Date d) {}
public Person(){}
}

4. 块
作用:跟普通方法一样 做事情
语法格式:
{
  java语句;
}
可以认为块是一个没有修饰符,没有参数,没有返回值,没有名字的特殊方法。
用法:

  • 块需要调用才能执行,但是不需要我们自己调用
  • 每一次调用构造方法之前,会自动调用块

3.this关键字

this是什么?

  • 在方法内部使用,即这个方法所属对象的引用;
  • 在构造器内部使用,表示该构造器正在初始化的对象。

this 可以调用类的属性、方法和构造器

什么时候使用this关键字呢?

  • 当在方法内需要用到调用该方法的对象时,就用this。
    具体的:我们可以用this来区分属性和局部变量。比如:this.name = name;
public class Person(){
	String name;
	int age;
	
	public Person(){}
	public Person(String name, int age){
		this.name = name;
		this,age = age;
	}
	public void talk(){
		System.out.println("Person类中的说话方法");
		this.study();
	}
	public void study(){
		System.out.println("Person类中的学习方法");
	}
	public void display(){
		System.out.println(this.name + "今年" + this.age + "岁");
	}
}
  1. 在任意方法或构造器内,如果使用当前类的成员变量或成员方法可以在其前面添加this,增强程序的阅读性。不过,通常我们都习惯省略this。
  2. 当形参与成员变量同名时,如果在方法内或构造器内需要使用成员变量,必须添加this来表明该变量是类的成员变量。
  3. 使用this访问属性和方法时,如果在本类中未找到,会从父类中查找。
  4. his可以作为一个类中构造器相互调用的特殊格式。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值