java Day2(类与对象)

介绍

  • 想要创造对象必须要有类的存在
  • 类使一组相关属性和行为的集合,可以理解为对象的设计图

类和对象的关系

  • 根据类创造对象
  • 一个类可以创造多个对象

类的组成

类的本质:对事物进行描述

在这里插入图片描述

属性(名词描述)

用成员变量表示,在类中方法外

行为(动词描述)

用成员变量表示,和方法定义一样,去掉static

public class Student{
String name = "张三";
int age =18;
public void study() {
    System.out.println("学习");
}    
public void eat() {
    System.out.println("吃吃吃")}

对象 (根据对象创建的实体 )

创建对象

格式 类名 对象名 = new 类名()

使用对象成员变量

格式 对象名.成员变量

使用对象成员方法

格式 对象名.成员方法()

public class StudentTest{
    /*
    创建Student类的对象进行使用
    */
    public static void main(String[] args){
            Student stu1 = new Student();
    }
}

对象的使用细节

  • 打印对象名,可以看到对象的内存地址
  • 创建类时成员变量没有赋值会产生默认值

方法

局部变量

  • 在方法体中申明的变量和方法的参数被称作局部变量
  • 局部变量只在方法内有效
  • 方法被调用后在栈内存(与主方法平行),未被调用时在方法区的字节码中

形参和实参

在这里插入图片描述

方法重载

在这里插入图片描述

例子(println方法)

在这里插入图片描述

方法的参数传递及例题

在这里插入图片描述

参数为基本数据类型时,将重新开辟一份地址进行储存。此时方法中的number和变量number地址不同。

public class ArgsTest1 {
    public static void main(String[] args) {
        int number = 100;
        System.out.println("调用change方法前:" + number);    //100
        change (number); 
        System.out.println("调用change方法后:" + number);    // 100
    }   
    public static void change(int number) {
    number = 200;
    }

}

参数为引用数据类型时,使用同一份地址,改变原arr的值

public static void main(String[] args){
    int[] arr = {11, 22, 33, 44, 55};    
    System.out.println("调用change方法之前:" + arr[0]);    //11
    change(arr);
    System.out.println("调用change方法之后:" + arr[0]);    // 66
}
    public static void change(int[] arr) {
     arr[0] = 66;
}

成员变量和局部变量的区别

在这里插入图片描述

注:

  • 主方法也属于方法;
  • 类构造对象存在于方法中随方法弹栈而消失,属于局部变量

This关键字

问题案例

public class Student {
    String name;
    int age;
    public void sayHello(String name){
        System.out.println(name);    
    }
    /*
    成员变量name与局部变量name出现重名的情况使用就近原则
    此时输出为"小刚"
    */
}
public class StudentTest{
    public static void main(String[] args{
        Student stu = new Student();
        stu.name = "小明";
        stu.sayHello("小刚")}
}

此情况下若需精确指定某个变量,使用this关键字

public class Student {
    String name;
    int age;
    public void sayHello(String name){
        System.out.println(this.name);    
    }    
}
public class StudentTest{
    public static void main(String[] args{
        Student stu = new Student();
        stu.name = "小明";
        stu.sayHello("小刚")}
}
    /*
    成员变量name与局部变量name出现重名的情况
    使用this后,可访问到成员变量"小明"
    */

作用

this可以调用本类成员(变量,方法)

this.的省略规则

  • 本类成员方法:没有前提条件,this.可省略
  • 本类成员变量: 方法中没有重命变量,this.才可以省略

this的概念

  • this代表当前类对象的地址
  • 哪一个对象调用方法,方法中的this代表的就是哪一个对象
public class ThisTest{
    public void print(){
        System.out.println("print方法输出this"+this);    
    }
}
public class Test{
    public static void main(String[] args{
        ThisTest t1 = new ThisTest;
            t1.print();
        ThisTest t2 = new ThisTest;
            t2.print();
    }
}
/* 分别输出了t1和t2的地址 */

构造方法

初始化一个新建的对象、构建、创造对象的时候,所调用的方法

格式

  • 方法名与类名相同,大小写一致
  • 没有返回值类型,连void也没有
  • 没有具体的返回值(不能由return带回结果数据)
public 类名(可定义参数) {
    ........
}
*/调用方法*/
类名 对象名 = new 类名();

构造方法的执行时机:

  • 在创建对象时被调用执行
  • 每创建一次对象,就执行一次构造方法

构造方法的作用

  • 本质作用:创建对象
  • 结合执行时机:在创建对象的时候给对象中的数据初始化(直接给其定义变量且给变量赋值)

注意事项

  • 一个类中如果没有编写构造方法,系统会提供默认无参的构造方法
  • 若手动编写了构造方法,则系统不再提供无参构造
  • 构造方法容许方法重载
  • 构造方法不能手动调用(不能用对象名 . 构造方法)

构造方法可快捷生成

封装

使用类设计对象时,将需要处理的数据及处理方法设计到对象中

好处

  • 更好维护数据
  • 使用者无需关心内部实现,只要知道如何使用

设计规范

合理隐藏 合理暴露

权限修饰符(修饰成员变量和成员方法)

private

只能在同一个类中(可以保证数据安全性)

public class Student {
    private int age;
    public void setage(int age){
        if(age>=1&&age<=120){
            this.age=age;        
        }else{
            System.out.println("wrong number");        
        }    
    }
    */当类体外想对age进行赋值(访问)时只能通过setage方法,
  从而保证可以对输入的数值进行判断*/
    public int getAge() {
        return age;    
    }
}
*/可用getAge()方法调用数据*/

(default)默认权限不用前缀

同一个包当中,同一个类当中

protected

同一个包当中,同一个类当中,不同包的子类当中(涉及继承)

public

可在任意位置访问(不能跨模块跨项目)

JavaBean案例

概念

  • Javabean:实体类:封装数据的类
  • 此类成员变量都要私有(private),并且对外提供

getXxx,setXxx方法(快捷方法:右键—>Genarate–>constructor构造方法–>选择成员变量)

public void setXxx(...){
    this.Xxx=Xxx;
}
public void getXxx(){
    return Xxx;
}

无参,带参构造方法(快捷方法:右键—>Genarate–>constructor构造方法–>选择参数)

public Student(){}  /*无参*/
public Student(string name,int age){
    this.name=name;                    /*带参*/
    this.age=age;
}

应用场景

JavaBean只负责数据存储,数据处理交给其他类。

参考课程B站黑马程序员
感谢阅读。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LU-Q

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值