this关键字
在Java中this关键字一共有以下的三个作用:
表示当前类的对象
- 表示当前类的对象;
- 调用当前类中的属性和方法;
- this调用当前类中的构造方法;
public class Teacher { public void show(){ System.out.println("Teacher---->show()"); } public void test(){ this.show();//对象.方法名称(参数...); } } |
调用属性和方法
public void test(){ System.out.println("姓名:"+this.name); } |
this调用构造方法
1、如果一个类中有多个构造方法的话,也可以利用this关键字互相调用。
2、使用this调用构造方法必须也只能放在构造方法的第一行 。
public class Teacher { private String name="张三"; private String sex="男"; private String code="20150210";
public Teacher() { System.out.println("无参构造方法"); } public Teacher(String name,String code) { this.name=name; this.code=code; } public Teacher(String name,String code,String sex){ this(name,code); this.sex=sex; } } |
static关键字
在使用主方法的时候格式如下:
public static void main(String[] args){} |
主方法中有一个关键字static,在使用变量的时候咱们发现变量也要使用static去申明。
1.static可以修饰变量(属性)
在程序中使用static声明属性的话,则此属性称为全局属性(有些也称为静态属性)
全局属性是存放在”全局数据区”中供这个类的所有对象共享,而且这个属性只能用类名直接调用。
2.static可以修饰方法
static既可以在声明属性的时候使用,也可以用其来声明方法,用它声明的方法有时也被称为“类方法”。
案例:
public class Person { public static void show(){ System.out.println("Person--->show()"); } } |
public static void main(String[] args) { Person per1=new Person("张三", 23,'男'); Person.show(); } |
Person--->show() |
3.static使用的限制
非static声明的方法可以去调用static声明的属性或方法的。但是static声明的方法是不能调用非static类型声明的属性或方法的。
案例:
public class MyTest { static int a=12;//静态变量 public static void main(String[] args) { System.out.println(a);//静态方法访问静态变量 test(); } public static void test(){ System.out.println("hehe"); } public void hehe(){ System.out.println(a);//非静态的方法调用静态变量 test();//非静态的方法调用静态方法 } } |
以上的内容就是Java中static关键字的使用方式,static关键字其实就两个功能:修饰属性、修饰方法。Static修饰的属性和方法都是通过类名直接调用的。
super关键字
在之前咱们学习this关键字,它的作用有三个,只不过this关键字主要是操作本类的属性和方法的,super关键字和this关键字的功能非常相似,super关键字主要是用来操作父类中的属性和方法。
1、调用父类的构造方法
super(实参)
2、调用父类中的非私有化的属性和方法
super.方法名()
super.属性名
调用父类中的构造方法:
案例:给四个属性赋值
public Person(String name,int age,String sex){ this.name=name; this.age=age; this.sex=sex; } |
//给Student的对象的四个属性赋值的构造方法 public Student(String name,int age,String sex,String code){ //调用父类中的构造方法给属性赋值 super(name,age,sex); this.code=code; } |
上面的子类调用父类中的构造方法主要是为了给子类中的四个属性通过构造方法进行赋值操作。
案例:调用父类中的属性和方法
public void test(){ super.show();//调用父类中的普通方法 System.out.println("Student--->test()"); System.out.println(super.city);//调用父类中的非私有化的属性 } |
Super关键字主要是在设计的子类和父类的时候进行使用,其实在以后的学习中会出现很多的关键字的使用技巧。
this与super的区别
No. | 区别点 | this | super |
1 | 属性访问 | 访问本类中的属性,如果本类没有此属性则从父类中继续查找 | 访问父类中的属性 |
2 | 方法 | 访问本类中的方法,如果本类中没有此方法,则从父类中继续查找 | 直接访问父类中的方法 |
3 | 调用构造 | 调用本类构造,必须放在构造方法的首行 | 调用父类构造,必须放在子类构造方法的首行 |
4 | 特殊 | 表示当前对象 | 无此概念 |
final关键字
final修饰变量
final变量的特征
- final修饰符可以修饰变量,被修饰的变量即成为了常量
- final类型的变量必须显式地初始化,否则将导致编译错误
- final变量只能被赋值一次
- 在定义final常量时,一般以大写字母命名,且多个单词之间以“_”符号隔开
案例:
public class MyTest { public static final String BAIDU_URL="www.baidu.com"; public static void main(String[] args) { System.out.println(BAIDU_URL); } } |
final修饰类
1、用final关键词修饰的类是不能被继承的,也称最终类。
2、用final类的原因
1、对该类的设计永远不需要任何改动
2、处于安全的考虑
案例:
public final class Person { } |
public class Student extends Person{ } |
上面的Person类使用final修饰,那么此类就是一个最总的类(太监类),就是表示此类没有子类了。
final修饰方法
用final关键词修饰的方法不能被子类修改(覆写)。
案例:
public class Person { public final void show(){ System.out.println("Person---->show()"); } } |
public class Student extends Person{ @Override public void show() { System.out.println("Student---->show()"); } } |
Cannot override the final method from Person |
上面父类中的show()方法被final修饰了,出现了上面的错误,意思就是父类中的方法使用final修饰了那么子类就无法在覆写父类中的对应方法了。