面向对象复习(2)

本文介绍了Java中的面向对象概念,包括对象与引用的创建,this关键字的使用,以及值传递和引用传递的区别。同时,讲解了static关键字的作用,如静态变量和静态方法,以及代码块的执行时机。最后,提到了包的管理和访问权限修饰符的重要性和作用。
摘要由CSDN通过智能技术生成

面向对象(2)

对象与引用

java语言中除基本类型之外的变量都称之为引用类型

java中的对象时通过引用对其操作的

Car bm  =  new Car();
  • 右边的new Car是以Car类为模板,调用无参构造函数,在堆空间中创建一个Car对象

  • 左边的Car bm 在栈中创建了一个Car类型的引用变量,所谓Car的引用变量,就是指向右边对象的对象引用

  • = 把对象在内存中的地址 赋给 左边的变量 左边的变量拿的只是对象的引用地址

public Person(String name,int age){
      this.name=name;
      this.age=age;
}

this关键字

this表示当前正在操作的对象,在成员方法,构造方法中使用成员变量,使用this调用

this代表当前对象

this可以引用成员变量

this可以引用成员方法

public void showInfo(){
    System.out.println("姓名:"+this.name+" 年龄:"+this.age);
}

哪个对象调用showInfo方法,那么 name,age就是那个方法中的属性

值传递

public class Demo {
​
    /*
       基本类型值传递
     */
    public static void main(String[] args) {
        Demo d = new Demo();
        int a = 10;
        d.test(a);
        System.out.println(a);
    }
​
    /*
      形参b
      用实参a的值,直接对b进行了赋值,在内存中有两个独立的存储空间 a,b
     */
    public void test(int b){
        b = 20; //b的值发生改变 不会影响到a
    }
}

形参的改变,不会影响实参的值,形参只是用实参的值初始化自己的存储单元内容,在内存中有两个独立的存储空间

引用传递(传地址)

public class Demo {
​
    /*
       引用类型 在传递时,传的是对象的地址
     */
    public static void main(String[] args) {
        Demo d = new Demo();
        Person zs = new Person("张三", 20);
        d.test(zs);//只是把对象的地址传递给了 p
        System.out.println(zs.name);//李四
    }
​
    /*
​
     */
    public void test(Person p){ //p和zs指向的是同一个对象
          p.name = "李四";
    }
}

引用类型在传递的时候,传的是对象的地址,所以此时,形参和实参指向的是同一个对象,对形参进行操作那么也就是对实参操作

static关键字

static 静态修饰属性、方法、代码块、内部类

类变量,和类一样 只有一份

  • 被static修饰的内容 随着类的加载而加载

  • 优先于对象存在

  • 被所有对象共享

  • 可以通过类名直接调用

static String country = "中国"; //常量一般修饰为static

static修饰方法,类方法,静态方法不能使用非静态的成员变量,静态资源随着类先加载

非静态的成员变量随着对象的创建而加载

非静态方法可以使用静态变量,非静态方法必须通过对象来调用,对象创建前会先加载类

/*
   static修饰方法,类方法,静态方法不能使用非静态的成员变量,静态资源随着类先加载,
                非静态的随着对象的创建而加载
 */
public static void test(){
    //System.out.println(name);// 会报错
}
​
/*
   非静态方法可以使用静态变量, 非静态方法必须通过对象来调用,对象创建之前先加载类
 */
public void test1(){
    System.out.println(country);
}

代码块

类似一个没有名字的方法

代码块分为:

实例代码块:在创建对象之后执行,调用构造方法之前执行,每创建一次对象就执行一次

静态代码块:在类加载时执行,只执行一次,多个静态按照先后顺序执行

类什么时候加载?

main方法在哪个类中执行,这个类加载

创建某个类的对象

调用某个类中静态属性、方法

为了更好的组织类,java提供了包机制,用于区别类名的命名空间(是类路径中的一部分 地址)

避免类重名

按功能管理类

包名都小写

控制访问权限

访问权限修饰符

用来修饰类、成员变量、成员方法、内部类,控制对齐访问的权限

访问权限和包密切相关

public:公共的 类、成员变量、方法、内部类 可以任意被访问

protect:保护的 成员方法、变量、内部类 同包下、不同包的子类可以访问

default:默认的 类、成员变量、方法、内部类 同包下可以访问

private:私有的 本类中访问

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

重开之Java程序员

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

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

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

打赏作者

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

抵扣说明:

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

余额充值