JAVA复习Day6 this放在构造器的第一条语句构造器

JAVA复习Day6

7.4可变参数

java中允许同一个类中多个同名 同功能参数个数不同的方法,封装成一个方法,就可以通过可变参数实现
访问修饰符 返回类型 方法名(数据类型… 形参名){
}
当要求2个、3个、……n个数的和时,使用重载的方法也不是很方便
这里就用到了可变参数

class H{
    public  int sum(int... nums){
        System.out.println("接收的参数个数="+nums.length);
        int sums = 0;
        for (int i=0;i<nums.length;i++)
        {
            sums+=nums[i];//让nums进行相加,当做数组来使用
        }
        return sums;
    }
}
public class Main {
    public static void main(String[] args) {
            H adds = new H();//创建对对象
            int add = 0;//定义要输出的总和
            add= adds.sum(1,5,100,34);
            System.out.println("这些数字的和为"+add);
    }
}

! 程序结果允许图

7.4.1可变参数的细节

可变参数的实参可以为0或者任意多个
可变参数的实参可以为数组
可变参数的本质就是数组
可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在最后
一个形参列表中只能出现一个可变参数

7.5作用域

1、主要的变量就是属性(成员变量)和局部变量
2、局部变量一般是指在成员方法中定义的变量
3、JAVA中作用域的分类:
全局变量:也就是属性,作用域为整个类体

class H{
    int age=10;
    public  void  sum(){
    System.out.println(age);
    }
}

局部变量:除了属性之外的其他变量,作用域为定义它的代码块中

全局变量不可以赋值,直接使用,因为有默认值
局部变量必须赋值后才能使用,因为没有默认值

7.5.1作用域的注意事项和细节使用

1、属性和局部变量可以重名,访问时遵顼就近原则
2、在同一个作用域中,比如在同一个成员方法中,两个局部变量,不能重名
3、属性的生命周期较长,伴随着对象的创建而创建,伴随着对象的销毁而销毁
局部变量生命周期较短,伴随着它的代码块的执行而创建,伴随着代码块的结束而销毁
4、作用域范围不同:
全局变量:可以被本类使用,或者其他类使用(通过对象调用)

class Person{
    int age=10;
    public  void  say(){
        int age=56;
        System.out.println("say()age"+age);
    }
}
class T{
    public void text(){
        Person p1 = new Person();
        System.out.println(p1.age);
    }
        }
public class Main {
    public static void main(String[] args) {
        Person p1 = new Person();
        p1.say();
        T t = new T();
        t.text();
    }
}

! 程序运行图

局部变量:只能在本类中对应的方法中使用
5、修饰符不同
全局变量/属性可以加修饰符
局部变量不可以加修饰符

7.6构造方法/构造器

7.6.1基本语法

[修饰符] 方法名 (形参列表){
方法体;
}
1、这里的修饰符可以是默认的
2、构造器没有返回值
3、方法名和类的名字必须一样
4、参数列表和成员方法一样的规则
5、构造器的调用系统完成
构造器的主要作用是完成对新对象的初始化

7.6.2快速入门

class Person{
    int age;
    String name;
    public    Person(String pname,int page){
        name = pname;
        age = page;
        System.out.println("构造器被调用");
    }//构造器没有返回类型
    //名字和类名一致
}
public class Main {
    public static void main(String[] args) {
        Person p1 = new Person("小明",67);
        //创建一个对象的时候,直接通过构造器指定名字和年龄
        System.out.println("对象的年龄"+p1.age);
        System.out.println("对象的姓名"+p1.name);
    }
}

! 程序运行图

7.6.3细节和注意事项

1、一个类可以定义多个不同的构造器构成重载(构造方法)
2、构造器名和类名要相同
3、构造器没有返回值
4、构造器是完成对象初始化
5、若不定义构造器,系统会自动给类生成一个默认无参数构造方法(默认构造方法)
6、一旦定义了自己的构造器,默认的将会被覆盖,除非显式的定义一下
javap反编译

7.6.4对象创建的流程

1、先加载类信息,只会加载一次(在方法区)
2、在堆中分配空间
3、完成对象初始化,默认初始化,显式初始化,构造器初始化,引用的化,会在常量池中,常量池中的地址放在堆中
4、堆中的地址返回给p

7.7this

构造方法的输入参数名不是非常好,如果要将以下的代码pname,page
改为name,page时,则就会出现错误

class Person{
    int age;
    String name;
    public    Person(String pname,int page){
        name = pname;
        age = page;
        System.out.println("构造器被调用");
    }//构造器没有返回类型
    //名字和类名一致
}

7.7.1使用和理解

this:java虚拟机会给每个对象分配this,代表当前对象

class Person{
    int age;
    String name
    public    Person(String name,int age){
         this.name=name;//this.name表示当前的对象属性
         this.age=age;//this.age表示当前的对象属性
   }
}

7.7.2this本质

在这里插入图片描述

7.7.3this的注意细节

1、this关键字可以用来访问本类的属性,方法,构造器
2、this用于区分当前类的属性和局部变量
3、访问成员方法的语法:this.方法名(参数列表)
4、构造器语法:this(参数列表);注意只能在构造器中使用(即只能在构造器中)
必须放在第一条语句 如果要调用的话 着重注意
5、this 不能在类定义的外部使用 ,只能在类定义的方法中使用

8面向对象编程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值