Java面向对象
静态/非静态方法
静态方法只能调用静态方法,非静态方法可以调用静态方法:
public static void main(String[] args) {
//静态方法 static 可以直接用类名.方法名直接调用
//非静态方法 需要先实例化这个类 new
Student student = new Student();
student.say();
}
public static void a(){
//b(); 此时调用b会报错 因为static是和类一起加载的 b()此时还没有加载
}
//类实例化 之后才存在
public void b(){
}
值传递和引用传递
普通的函数:传进去的参数是拷贝的一份
//引用传递:对象 ,本质还是值传递
public class demo03 {
public static void main(String[] args) {
Person person =new Person();
System.out.println(person.name); //null
demo03.change(person);
System.out.println(person.name); //xxx
}
public static void change(Person person){
person.name = "xxx"; //因为person是一个对象 指向的--->Person person - new Person() 这是一个具体的人 可以改变属性
}
}
class Person{
String name;
}
构造器
-
一个类即使什么都不屑,它也会存在一个方法(构造器)
-
类中的构造器也称为构造方法,是在创建对象的时候必须调用的。并且构造器有以下两个特点:
-
1.必须和类的名字相同
-
2.必须先没有返回类型,也不能写void
-
public class Person {
String name;
//作用:实话初始值
//1.使用new关键字,本质是在调用构造器
//2.用来初始化值
public Person(){
//构造器
this.name = "alingo";
}
//有参构造: 一旦定义了有参构造,无参就必须显式定义
public Person(String name){
this.name = name;
}
//alt + insert 自动生成构造器(根据属性来构造)
}
创建对象内存分析
public class Pet {
public String name;
public int age;
public void shout(){
System.out.println("叫了一声");
}
}
//一个项目应该只存在一个main方法
public class Application {
public static void main(String[] args) {
Pet dog = new Pet();
dog.name = "旺财";
dog.age = 3;
dog.shout();
Pet cat = new Pet();