Java面向对象01:回顾方法的使用

静态和非静态

//Hello 类
public class Hello {
    //main 方法
    public static void main(String[] args) {  //修饰符,可选;返回值类型,与return一致;方法名,见名知意,驼峰原则;参数列表,实参和形参要保持一致的类型
    a();  //静态方法本类可以直接调用,其他类通过类名.方法名()调用
    Hello hello = new Hello();
    hello.b();  //非静态方法,无论是本类调用还是其他类调用,都要先实例化
    }
    /*  回顾方法的定义
    修饰符 返回值类型 方法名(参数类型 参数名){
        方法体
        return 返回值;
    }
     */
    //静态方法,和类一起加载
    public static void a() {
        System.out.println("调用其他类的静态方法,可以直接通过类名.方法名()调用!");
        //Hello.t();
        b();  //静态方法不能调用非静态方法,因为静态方法和类一起加载的时候,非静态方法还没有被实例化
    }
    //非静态方法,只有被实例化了才会被加载
    public void b(){
        System.out.println("调用非静态方法,必须先实例化类,也就是new对象,再通过对象调用!");
        //对象类型 对象名 = 对象值
        //Hello hello = new Hello();
        //hello.f();
        a();  //非静态方法可以调用静态方法
    }
    public static void c(){
        System.out.println();
        a();  //静态方法之间可以相互调用
    }
}

值传递和引用传递

public class Hello {
    public static void main(String[] args) {
        int a = 1;
        int[] b = {0};
        change(a);
        System.out.println(a);  //1,值传递不会改变原有的变量
        Person person = new Person();
        System.out.println(person.name);  //null,属性默认值为null
        change1(person);
        System.out.println(person.name);  //ty,引用传递会改变原来的属性值
        change2(b);
        System.out.println(b[0]);  //1,数组也属于引用类型,也会改变原数值
    }
    public static void change(int a){
        //a只是将数值复制过来,不影响原变量
        a = 10;
    }
    public static void change1(Person person){
        //person是一个对象,其指向--->Person person = new Person();这是可以改变属性的。涉及到对象和内存,见后
        person.name = "ty";
    }
    public static void change2(int[] a){
        a[0] = 1;
    }
}
//新建一个类
class Person{
    String name;
}

拓展:值传递(Java)和引用传递

对象和内存分析

  • 当定义一个类以后,首先会在方法区生成相关的信息,包含类名,方法名和属性等
  • 由于main()方法是静态方法,和类一起加载,被放入
  • 当new创建对象以后,会根据类的模板,在中初始化对象的相关属性和方法,然后在中保存对象的引用变量名。对象是通过引用来操作的:栈——>堆
  • 可以看出,栈中保留的只是引用变量名,因此引用类型(数组、类、接口)被传参时,其指向的始终是堆中的数据,因此会被修改
    Java面向对象01:回顾方法的使用

Java面向对象01:回顾方法的使用

上一篇:Sql Server相关的性能计数器


下一篇:HTML标签