2. 方法 静态方法 静态成员变量&&对象 构造器 成员变量&& 实例方法与空指针异常

270 阅读3分钟

方法 静态方法 静态成员变量

public class Main{
    /*
     *  void 标识无返回值
     *  main 是一个java程序的入口
     */
    public staitc void main(String[] args){ 
        int x = 1;
        int y = 2;
        System.out.println(add(x, y));
    }
    
    public static int add(int x, int y){ // static 表示是静态方法,并且此方法不依附于任何对象。
        int z = x + y; 
        return z;
    }    
}

每次执行add方法,都会创造一个环境,此处的z就是局部变量。局部变量在函数执行时被创建,执行完毕后被销毁。如果我们需要保留使用函数中的局部变量,需要使用成员变量

public class Main{
   public static int i; // 会被初始化为0;public表示i是公开的,任何地方都可以访问它。
   public staitc void main(String[] args){ 
       add();
       add();
       add();
       System.out.println(i); // i = 3;
   }
   
   public static int add(int x, int y){ 
       i += 1;
   }    
}

对象 构造器 成员变量

Java是一个面向对象的语言,那么类和对象之间的关系是什么呢?
声明一个Cat的类。

public class Cat{
   // 假如没有声明任何的constructor构造器,编译器会自动帮我们生成--Cat(){}
   private String name; // 
   public Cat(){ }
   public Cat(String name){
       this.name = name; // this指new出来的类实体。点操作符就是访问实体的一个属性。
   }
}

构造器和方法的写法相似但是有区别,相同点:都有参数表和一个大括号,都可以有多个。都可以有访问限定符(public)。不同点:构造器的返回值就是实例本身,但是不写返回值类型。
private声明的变量就是成员变量,与类是相绑定的;static声明的则是静态成员变量,不和任何对象相绑定。

public class Main{
    public static void main(String[] args){
        Cat cat = new Cat(); // 使用new调用Cat类的无参构造方法。
        
        Cat cat2 = new Cat("张三"); // 此处调用的是public Cat(String name)构造器。
    }
}

实例方法与空指针异常

现在为我们的Cat类增加一些方法。

 public class Cat{

   private String name; // 
   public Cat(){ }
   public Cat(String name){
       this.name = name; 
   }
   
   public void meow(){ // 
       Syetem.out.println("我的名字是" + name);
   }
}

在meow方法中没有使用static关键字,是因为方法不和类相绑定的话,是不能访问当前类的属性的,meow就是实例方法。

public static void main(String[] args){
   Cat cat = new Cat();
   cat.meow(); // 空指针异常
}

我们在调用meow方法时,会使用name属性,而我们没有为他赋值。如何规避这个问题呢?

public void meow(){ 
    if(name == null){
        // 进行处理
    }else{
        Syetem.out.println("我的名字是" + name);    
    }
    
}

总结

java层次:

  1. 包 由文件所处的目录决定,如package com.xxx.yyy
  2. 类 存放java代码基本单元,java的基本结构就是类。
  3. 类中包含四种结构:
    • 静态成员变量 static int i
    • 静态成员方法/静态方法 public static void main(String[] args){}
    • 实例变量 和对象相绑定的变量 public string name = "老王"
    • 实例方法 和对象相绑定的方法 public int add(int i){}
静态变量

存放在JVM中的一个全局的存储单元。public static int i,i在任何地方都可以访问,如果是在别的类中访问它,那么要这样引用--> className.i

静态方法

public static void a(){},不和任何类相绑定的方法,在任何地方都可以访问到,但是在别的类中访问同静态变量一样,需要加上类名,用点运算符引用。

实例方法

实力方法如果向上面那样去引用className.a()则会报错。正确的引用方式是先new一个实例,然后通过实例来调用,如上面的Cat类

Cat cat = new Cat();
cat.meow();