Java方法

本文介绍了Java编程中的核心概念,包括一个Java源文件的命名规则,public类的限制,静态与非静态方法的调用区别,值传递与引用传递的原理,并详细阐述了构造器的作用、特点以及使用场景。通过实例分析了参数传递的影响,展示了构造器在对象初始化中的关键角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个Java源文件只能有一个public类,且Java文件名必须和此类名一样。

静态方法

static修饰的方法,可以直接通过类名打点调用。
静态方法是和类一起加载的,非静态方法只有在实例化之后才创建

非静态方法

必须进行实例化之后,通过对象打点调用。


值传递

public class ClassTest {
    public static void main(String[] args) {
        int a = 1;
        System.out.println(a);
        ClassTest.change(a);
        System.out.println(a);
    }
    public static void change(int a) {
        a = 10;
    }
}

/*
print:
1
1
*/

再通过内存来观察:

public class ClassTest {
    public static void main(String[] args) {
        int a = 1;
        System.out.println(System.identityHashCode(a));
        ClassTest.change(a);
        System.out.println(System.identityHashCode(a));
    }
    public static void change(int a) {
        a = 10;
        System.out.println(System.identityHashCode(a));
    }
}

/*
print:
460141958
1163157884
460141958
*/

引用传递(Java只有值传递)

public class ClassTest {
    public static void main(String[] args) {
        Person person = new Person();
        System.out.println(System.identityHashCode(person.age));
        ClassTest.change(person);
        System.out.println(System.identityHashCode(person.age));
    }

    public static void change(Person person) {
        person.age = 10;
        System.out.println(System.identityHashCode(person.age));
    }
}

class Person {
    int age;
}

/*
print:
460141958
1163157884
1163157884
*/

总结:

  1. 如果传的是基本数据类型和String,采用值传递,实参不会改变。
  2. 如果传的是对象集合或者数组,采用引用传递,实参会改变。

构造器

一个类里面即使什么都不写,也可以直接new一个对象

  • 使用new关键字创建对象的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化,以及对类中构造器的调用。
  • 类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的。并且构造器有以下两个特点:
    1. 必须和类名相同
    2. 必须没有返回类型,也不能写void

Java源文件

public class Person {
}

Java字节码文件

public class Person {
	public Person() {
	}
}

构造器的使用

快捷键:ALT + Ins

  • 使用new关键字,本质上是在调用构造器,用来初始化值
  • 一旦定义了有参构造,无参构造器就必须显式定义(好像可以不用显式定义,或许是JDK版本问题,也或许是老师讲错了。)
// 无参构造:
public class ClassTest {
    public static void main(String[] args) {
        Person Wwz = new Person();
        System.out.println(Wwz.name);
    }
}
class Person {
    String name;
    public Person() {
        this.name = "Wwz";
    }
}

// 有参构造
public class ClassTest {
    public static void main(String[] args) {
        Person Wwz = new Person();
        System.out.println(Wwz.name);
    }
}
class Person {
    String name;
    public Person() {
    }
    public Person(String name) {
        this.name = "Wwz";
    }
}

内存分析(狂神老师画)

狂神老师的内存分析图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值