一个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
*/
总结:
- 如果传的是基本数据类型和String,采用值传递,实参不会改变。
- 如果传的是对象集合或者数组,采用引用传递,实参会改变。
构造器
一个类里面即使什么都不写,也可以直接new一个对象
- 使用new关键字创建对象的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化,以及对类中构造器的调用。
- 类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的。并且构造器有以下两个特点:
- 必须和类名相同
- 必须没有返回类型,也不能写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";
}
}