java学习(2)方法/类+成员/局部变量+private/this关键字+构造方法+标准类

………………………………………2021.4.23更…………………………………………

1、方法+类

勒种包括:成员属性(变量)+成员方法(函数)
成员方法中不写static关键字,直接写public void 函数名(String[] args) {}

(1)创建类

包括三部:导包+创建+使用
当定义的类和调用该类的类在同一包内并不需要导入

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        class Cubic {
            int length, height, width;
            Scanner scanner = new Scanner(System.in);

            public void setDemo() {
                this.length = scanner.nextInt();
                this.width = scanner.nextInt();
                this.height = scanner.nextInt();
            }

            public int getV() {
                return length * width * height;
            }
        }
        Scanner scanner = new Scanner(System.in);
        Cubic cubic1 = new Cubic();
        cubic1.setDemo();
        System.out.print("体积=");
        System.out.println(cubic1.getV());
    }

}

(2)对象的在调用时的内存

参考:https://www.bilibili.com/video/BV1uJ411k7wy?p=104

  • 堆:存储新建的对象的属性和方法的地址。
  • 栈:以存储主函数为入口以及当前被调用的方法等。
  • 方法区:存储.class文件(类)

main方法先压在栈内存中,然后在方法区产生了“Phone”方法,同时产生的对象在堆内存中被分配了地址,其中的成员变量有了初值如下。

当主函数中对对象的各个属性进行赋值后,依据栈中的地址使得堆中储存的信息跟着改变。

在调用对象的成员方法时首先将当前方法压入栈内,运行结束后再将其弹出,运行到到下一行时下一个方法进入栈内,使用过后弹出。
在这里插入图片描述
直接将一个对象赋给另一个对象时,二者指向同一块内存,对其中一个的修改另一个也会跟着进行改变。

(3)方法的参数、返回值可以是一个对象

这里的method调用的时候传入的是one这个对象的地址(由Phone这个类产生的)
在这里插入图片描述
在这里插入图片描述

2、成员变量和局部变量

局部变量服务于方法,成员变量
局部变量:

  • 在方法的内部
  • 只有在方法才能使用,出了方法就不能使用
  • 没有默认值
  • 位于栈内存
  • 随着方法被调用而诞生,随着方法出栈而消失

成员变量:

  • 在方法的外部、直接写在类当中。
  • 整个类都可以使用
  • 有默认值
  • 位于堆内存
  • 随着对象被创建而诞生,随着被垃圾回收而消失

在这里插入图片描述

3、private关键字

方法、private就是一种封装
方法:将过程隐藏起来,调用的时候传入参数即可,而不需要知道是如何实现的。
private:私有化,需要一对get+set

在Person.java中有下面的一个类:
在这里插入图片描述
在主函数的调用无法阻止这种属于int,但是不符合常识的年龄出现,所以出现了private关键字,用private关键字修饰需要保护的成员变量

在这里插入图片描述
private修饰的变量只能在当前的类中进行使用,也就是这里的Person类,在其他的位置不能直接访问但是可以进行间接访问
在这里插入图片描述
这里的规则是:

  • 命名格式必须是setxx、getxx且要同时出现
  • getxx方法不能有参数,返回值与成员变量相对应;setxx方法不能有返回值,参数类型与成员变量相对应
  • set赋值,get取值

此外还可以在setAge中对获取的变量进行条件控制: 在这里插入图片描述
在主函数中的调用部分如下:
加粗样式
————————————————————————————————————————
值得注意的是基本类型中的boolean与其他类型的get方法不一样应该写成isxx:
在这里插入图片描述

4、this关键字

用于解决局部变量和成员变量重名分不开的情况。

正常情况下我们会给person类的sayHello方法参数赋一个值使得其能打印输出下面的效果:
在这里插入图片描述
但当方法的局部变量和类的成员变量重名的时候,会根据就近原则优先使用局部变量,也就是下面的情况:
在这里插入图片描述
输出的结果中类的成员变量赋值消失了,也就是Person的name属性的优先级没有局部变量的name高,根据就近原则导致最后输出的name都是xiaohong。

解决办法就是使用this关键字,标注类的成员变量。this在当前的类中表示当前的成员变量
在这里插入图片描述

5、构造方法

专门用来创建对象的方法,当我们通过关键字new来创建对象的时候实际上就是在调用构造方法。格式:

public 类名称(参数类型 参数名){
方法体
}

当你新建一个对象的时候就会调用构造方法,利用这个特性我们可以只直接给属性赋初值:
在这里插入图片描述

注 意 事 项 \color{red}注意事项

  • 构造方法的名称必须和当前类的名称完全一样,大小写也要一样
  • 构造方法不要写返回值,连void都不要写,不能返回一个具体的值
  • 没有编写任何构造方法的时候,程序会自动赠送一个构造方法,里面什么都没有;当写了一个构造方法的时候程序不会赠送。
  • 构造方法可以进行方法重载,当为有参的构造方法时需要使用getter、setter来对属性进行取出和使用。
    在这里插入图片描述

构造方法的使用使得我们无需先new再通过getter、setter进行赋初值,直接在new的括号里面就可以进行赋初值。

其次还可以在构造方法里面调用其他的构造方法:
在这里插入图片描述

6、定义一个标准类:Java Bean

标准类的四个组成部分:

  • 所有成员变量都要用private关键字来修饰
  • 每个成员都有一对getter、setter方法
  • 编写一个无参的构造方法
  • 编写一个全参的构造方法

(1)getter、etter快捷生成
摁住Alt+F12,选择getter+setter,Shift+向上的箭头全选,回车。即可生成下面的效果。
(2)全参+无参的构造方法的快捷生成
摁住Alt+F12,选择constructor,Shift+向上的箭头全选,回车即可生成全参的构造方法;摁住Alt+F12,选择constructor,选择Select None,回车即可生成无参的构造方法;
在这里插入图片描述
在这里插入图片描述
getter、setter为private服务,赋值用setter、用值getter。默认的构造方法使得一开始不用给定义的对象传入参数,后面用方法重载的形式即可添加参数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值