方法 静态方法 静态成员变量
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层次:
- 包 由文件所处的目录决定,如
package com.xxx.yyy - 类 存放java代码基本单元,java的基本结构就是类。
- 类中包含四种结构:
- 静态成员变量
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();