Java关键字
目录:
1:static关键字
2:private关键字
3:关键字和 this 和 super 的比较
static关键字
a) 修饰属性:Java静态属性和类相关, 和具体的实例无关. 换句话说, 同一个类的不同实例共用同一个静态属性.
b)修饰方法 :静态方法属于类而不属于类的对象
静态方法可以直接调用静态方法,无需创建类的实例
静态方法可以访问静态数据成员并可以更改静态数据成员的值,但不可以直接使用非静态数据成员或调用非静态方法
c)静态代码块 :静态代码块不管成多少个对象,只会执行一次,并且最先执行
静态代码块执行完毕-》构造代码块(实例代码块)执行-》构造函数执行
讨论:为什么man函数是静态的
如果没有static,main函数就是一个普通的成员方法,想要进行运行就必须new一个对象对main函数进行引用,这样会造成主函数没有入口无法运行。
class TestDemo{
public int a;
public static int count;
}
public class Main{
public static void main(String[] args) {
TestDemo t1 = new TestDemo();
t1.a++;//创建实例对象t1来调用a
TestDemo.count++;//无需创造实例对象即可调用
System.out.println(t1.a);
System.out.println(TestDemo.count);
System.out.println("=============================");
TestDemo t2 = new TestDemo();
t2.a++;
TestDemo.count++;
System.out.println(t2.a);
System.out.println(TestDemo.count);
}
}
//输出结果为
1
1
===============================
1
2
————————————————
private关键字
1.封装属性:被private修饰的变量或成员方法,通过类内部直接访问,不能被类的调用者使用,但可以通过提供public方法供类的调用者使用。
2.如果要修改被private修饰的变量的值可以通过setter和getter方法。
3. 注意事项
private 不光能修饰字段, 也能修饰方法
通常情况下我们会把字段设为 private 属性, 但是方法是否需要设为 public, 就需要视具体情形而定. 一般我们希望一个类只提供 “必要的” public 方法, 而不应该是把所有的方法都无脑的设为public
class Animal {
private int high;
private String name;
public int getHigh() {
return high;
}
public void setHigh(int high) {
this.high = high;
}
public void show() {
System.out.println("身高" + high);
}
}
public class Demo {
public static void main(String[] args) {
Animal dog = new Animal();
dog.setHigh(15);
dog.show();
}
}
"D:\IntelliJ IDEA 2019.2.3\jbr\bin\java.exe" "-javaagent:D:\IntelliJ IDEA 2019.2.3\lib\idea_rt.jar=50561:D:\IntelliJ IDEA 2019.2.3\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\Administrator\Desktop\javaHomework\Demo\out\production\Demo Demo
身高15
Process finished with exit code 0
super 关键字
super 表示获取到父类实例的引用
- 使用了 super 来调用父类的构造器
public Bird(String name) {
super(name);
}
2) 使用 super 来调用父类的普通方法
```java
public class Bird extends Animal {
public Bird(String name) {
super(name);
}
@Override
public void eat(String food) {
// 让子调用父类的接口.
super.eat(food);
System.out.println("我是一只小鸟");
System.out.println(this.name + "正在吃" + food);
}
}
在这个代码中, 如果在子类的 eat 方法中直接调用 eat (不加super), 那么此时就认为是调用子类自己的 eat (也就是递
归了). 而加上 super 关键字, 才是调用父类的方法