this 关键字
成员变量与局部变量同名
class Person {
private int age = 10;
public Person(){
System.out.println("初始化年龄:"+age);
}
public int GetAge(int age){
this.age = age;
return this.age;
}
}
public class test1 {
public static void main(String[] args) {
Person Harry = new Person();
System.out.println("Harry's age is "+Harry.GetAge(12));
}
}

可以看到,这里age是GetAge成员方法的形参,this.age是Person类的成员变量。
调用构造方法
public class Student1 {
private String name;
private int age;
public Student1() {
// this()在构造方法中调用本类的其他构造方法
// this()在构造方法第一行
this("张三");
age = 18;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Student1(String name) {
this.name = name;
}
}
public class Demo01 {
public static void main(String[] args) {
Student1 s2 = new Student1();
System.out.println(s2.getName()+"..."+s2.getAge());
}
}

this(参数):调用本类中另一种形式的构造函数(应该为构造函数中的第一条语句)。
super
子父类中构造方法的默认调用隐式语句:super();
调用父类中的有参数构造方法:super(实参列表);
子类会继承父类中的内容,所以子类在初始化时,必须先到父类中去执行父类的初始化动作。
当父类中没有空参数构造方法时,子类的构造方法必须有显示的super语句,指定要访问的父类有参数构造方法。
public class Person {
public Person(String name,int age){
System.out.println("父类");
}
}
public class Student extends Person{
String name;
int age;
public Student() {
this("lili",12);
System.out.println("子类");
}
public Student(String name,int age){
super(name, age);
}
}
public class Text {
public static void main(String[] args) {
Student s = new Student();
}
}

super()和this()均需放在构造方法内第一行。this和super不能同时出现在一个构造函数里面,只能this间接调用。
final
final修饰的类不能被继承,但可以继承其他类
public final class Fu extends Object{
}

final修饰的成员方法不能重写,但是不修饰的重写的可以加final修饰
public class Fu2 {
public final void xiuche() {
System.out.println("试穿的修车手艺");
}
public void sale() {
System.out.println("祖传买车方法");
}
}

被final修饰的成员变量没有系统默认初始值,需要在创建对象前赋值

被final修饰的局部变量是常量,不能改变,如果是引用数据类型,可以对其属性进行修改。
static
被static修饰的成员变量属于类,不属于这个类的某个对象
public class Student {
String name;
int age;
static String schoolname;
}
public class Text {
public static void main(String[] args) {
Student s = new Student();
s.name = "小红";
s.schoolname = "北京大学";
Student s1 = new Student();
s1.name = "小明";
s1.schoolname = "清华大学";
System.out.println(s.schoolname+" "+s1.schoolname);
}
}

静态成员只能调用静态成员,不能调用非静态成员,非静态成员可以调用静态成员
package com.oracle.demo05;
public class ceshi {
static int a = 1;
int b = 2;
public static void main(String[] args) {
//静态成员可以调用静态成员方法
eat();
//静态成员不可以调用非静态成员方法
//study();
/*Cannot make a static reference to
the non-static method study() from the
type ceshi*/
//静态成员方法可以调用静态成员变量
System.out.println(a);
//静态成员方法不可以调用非静态成员变量
//System.out.println(b);
}
public static void eat(){
}
public void study(){
//非静态成员方法可以调用静态成员方法
eat();
//非静态成员方法可以调用静态成员变量
System.out.println(a);
}
}
不能使用this/super【this、super属于对象,而静态属于类】
图解
