java入门(三)

这篇博客探讨了Java中值传递和引用传递的概念,通过实例展示了基本数据类型、String类及对象类型的传递区别。在Java中,基本数据类型采用值传递,对象则是引用传递,而String被视为特殊的类。文章还介绍了面向对象编程的三大特性:封装、继承和多态,并详细讲解了类、对象、属性、方法、构造器以及this关键字的使用。最后,强调了构造器的作用和this关键字在对象初始化中的重要性。
摘要由CSDN通过智能技术生成

java入门(三)

值传递和引用传递

值传递(pass by value):在调用函数时,将实际参数复制一份传递到函数中,这样在函数中对参数进行修改,就不会影响到原来的实际参数;

引用传递(pass by reference):在调用函数时,将实际参数的地址直接传递到函数中。这样在函数中对参数进行的修改,就会影响到实际参数;

第一个例子:

public class Hello {
    public static void main(String[] args) {
        Hello hello = new Hello();
        // 基本数据类型
        int i = 10;
        hello.pass(i);
        System.out.println("i = " + i);
    }
 
    public void pass(int pas) {
        pas = 20;
        System.out.println("pas = " + pas);
    }
}

运行结果为:pas=20 i=10

第二个例子:

public class Hello {
    public static void main(String[] args) {
        Hello hello = new Hello();
        // String类
        String s = "hello";
        hello.pass(s);
        System.out.println("s = " + s);
    }
 
    public void pass(String str) {
        str = "world";
        System.out.println("str = "+ str);
    }
}

运行结果:str=world s=hello

通过运行结果可以看出值也是发生了变化的,但是调用函数对String类赋值的时候【str = “world”;】相当于是【str = new String(“world”);】;我这里理解是变量str重新指向了一个新的对象的地址。

第三个例子:

public class Hello {
    public static void main(String[] args) {
        Hello hello = new Hello();
        // 对象
        User user = new User();
        user.setName("wang");
        hello.pass(user);
        System.out.println("main:"+user.getName());
    }
 
    public void pass(User user) {
        user.setName("java");
        System.out.println("The name is :" + user.getName());
    }
}

运行结果:The name is:java main:java

看到这个例子的时候,便是我最大疑问的时候,当时我便觉得在Java中基本数据类型是值传递,对象数据类型是引用传递,而String看做一个特殊的类。在看下一个例子;

第四个例子:

public class Hello {
    public static void main(String[] args) {
        Hello hello = new Hello();
        User user2 = new User();
        user2.setName("li");
        hello.pass2(user2);
        System.out.println("main:"+user2.getName());
    }
 
    public void pass2(User user) {
        user = new User();
        user.setName("java new");
        System.out.println("The name is :" + user.getName());
    }
 
}

运行结果:The name is:java main:li

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mDZdUNsS-1634219738197)(C:\Users\yx\AppData\Roaming\Typora\typora-user-images\image-20210910213022766.png)]

面向对象

面向对象编程的本质就是:以类的方式组织代码,以对象的组织封装数据。

三大特性:封装、继承、多态。

类与对象

类是抽象的,对象是类的实例化。实例化方法如下:

类名 对象名 = new 类名();

使用new关键字创建对象的时候,除了分配内存空间之外,还会给创建好的对象进行默认初始化以及对类中构造器的调用。

属性和方法

属性,字段,成员变量都是一个东西,可以是基本数据类型也可以是引用类型。

方法就相当于函数。关于方法的笔记在Java入门(二)。

构造器

类中的构造器也成为构造方法,是在进行创建对象的时候必须要调用的,就相当于类的初始化。具有以下两个特点:

  • 必须和类的名字相同
  • 必须没有返回类型,也不能写void
修饰符 方法名(形参列表){	//也可以没有形参
	方法体;
}
实例化
public Person(String pName, int pAge){
    name = pName;
    age = pAge;
}

注:

  1. 一个类可以定义多个构造器,即构造器的重载。
  2. 构造器是完成对象的初始化,并不是构建对象。(在构建完对象后自动调用)
  3. 类生成时,系统自动给类一个默认无参构造器。当定义有参构造器时,会覆盖原有无参构造器,默认无参构造器无法在使用。如果需要,需手动再定义一遍。

this关键字

相当于python中的self,用于指向当前类的属性,方法和构造器,方便和局部变量进行区分。

this.属性名;
this.方法名(形参列表);
构造器语法:this(参数列表); 

注:

  1. 利用this访问构造器,只能在构造器中使用,并且this必须是第一条语句。
  2. this实例化后指向当前对象的地址。
  3. this只能在类内部使用。

区分。

this.属性名;
this.方法名(形参列表);
构造器语法:this(参数列表); 

注:

  1. 利用this访问构造器,只能在构造器中使用,并且this必须是第一条语句。
  2. this实例化后指向当前对象的地址。
  3. this只能在类内部使用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值