java中⽤来表⽰⽗类对象的关键字_Java⾯向对象--关键字
(super、static、。。。
Java关键字是电脑语⾔⾥事先定义的,有特别意义的标识符,有时⼜叫保留字,还有特别意义的变量。Java的关键字对Java的编译器有特殊的意义,他们⽤来表⽰⼀种数据类型,或者表⽰程序的结构等,关键字不能⽤作变量名、⽅法名、类名、包名和参数。本篇博客介绍super、static和final关键字的具体⽤法。
⽬录:
☍ super关键字
super关键字的使⽤
在Java类中使⽤super来调⽤⽗类中的指定操作:
☃ super可⽤于访问⽗类中定义的属性
☃ super可⽤于调⽤⽗类中定义的成员⽅法
☃ super可⽤于在⼦类构造器中调⽤⽗类的构造器
super.变量名; //调⽤⽗类属性
super.⽅法名(参数列表); //调⽤⽗类⽅法
super(参数列表); 在构造器中调⽤⽗类构造器
✦ 如果⼦类和⽗类没有同名成员,使⽤时可以省略super
注意:
➥ 尤其当⼦⽗类出现同名成员(同名属性和⽅法)时,可以⽤super表明调⽤的是⽗类中的成员
➥ super的追溯不仅限于直接⽗类,还包括间接⽗类(⽗类的⽗类...)
➥ super和this的⽤法相像,this代表本类对象的引⽤,super代表⽗类的内存空间的标识
✦ 使⽤this访问属性和⽅法时,如果在本类中未到,会从⽗类中查,super则是直接从⽗类中寻
✦ 总结⽽⾔this和super主要就是解决成员重名问题,若不重名使⽤时都可以省略
super关键字调⽤⽗类的构造器
☃ ⼦类中所有的构造器默认都会访问⽗类中空参的构造器
☃ 当⽗类中没有空参数的构造器时,⼦类的构造器必须通过this(参 参
表 数列表)或者super( 参数列表)语句指定调⽤本类或者⽗类中相应的
构造器。并且this()和super()只能在构造器中出现⼀个,且必须放在构造器的⾸⾏
☃ 如果⼦类构造器中既未显式调⽤⽗类或本类的构造器,且⽗类中⼜没有⽆参的构造器,则编译出错
public class Person{
private String name;
private int age;
public Person(String name){
this.name = name;
}
public Person(String name, int age){
this(name);
this.age = age;
}
}
public class Student extends Person{
private char sex;
public Student(String name,int age,char sex){
super(name,age);
this.sex = sex;
}
public Student(String name,char sex){
super(name);
this.sex = sex;
}
public Student(String sex){
// this.sex = sex; 编译出错,⽗类没有空参构造函数super(); }
}
this和super的区别
区别
this/this(参数列表)
super/super(参数列表)
1
访问属性
访问本类中的属性,如果本类没有此属性则从⽗类中继续查直接访问⽗类中的属性
2
调⽤访问
访问本类中的⽅法,如果本类没有此⽅法则从⽗类中继续查直接访问⽗类中的⽅法
3
调⽤构造器
调⽤本类构造器,必须放在构造器的⾸⾏
调⽤⽗类构造器,必须放在⼦类构造器的⾸⾏
☍ static关键字(重点)
static关键字概述
当我们编写⼀个类时,其实就是在描述其对象的属性和⾏为,⽽并没有产⽣实质上的对象,只有通过new关键字才会产⽣出对象,这时系统才会分配内存空间给对象,其⽅法才可以供外部调⽤。我们有时候希望⽆论是否产⽣了对象或⽆论产⽣了多少对象的情况下,某些特定的数据在内存空间⾥只有⼀份,例如所有中国⼈对象都拥有⼀个国籍‘中国’,这个属性不必在声明中国⼈对象像时去为每⼀个对象都单独分配⼀个⽤于代表国家名称的变量。
static关键字声明的属性和⽅法是静态变量和静态⽅法,或者称为类属性和类⽅法,是作⽤于全局的,声明为static的属性和⽅法在内存中是唯⼀的,任何该类对象对类属性和⽅法的修改都会影响其他对象的调⽤结果。
static属性和⽅法的设计思想
☃ 类属性作为该类各个对象之间共享的变量。在设计类时,分析 哪
些属性 不因对象的不同⽽改变,将这些属性设置为类属性。相应的⽅法设置为类⽅法。
☃ 如果⽅法与调⽤者⽆关,则这样的⽅法通常被声明为类⽅法,由于不需要创建对象就可以调⽤类⽅法,从⽽简化了⽅法的调⽤。
static关键字的使⽤和特点
☃ 在Java类中,可⽤static修饰成员变量、⽅法、代码块、内部类
特点:
➥ 随着类的加载⽽加载,优先于对象存在
➥ 修饰的成员,被所有对象所共享
➥ 访问权限允许时,可不创建对象,直接被类调⽤
➥ 由于类只会加载⼀次,所以静态成员在内存中也只会存在⼀个。存在⽅法区的静态域中
静态变量和静态⽅法
☃ 静态变量由该类的所有实例共享 ,没有对象的实例时,可以通过“类.静态变量”的⽅式调⽤
☃ 没有对象的实例时,可以⽤“类名.⽅法名()”的形式访问由static修饰的类⽅法
例⼦:
public class StaticTest {
/*
* static关键字
* 1、static:静态的,类的
* 2、static可以⽤来修饰属性,⽅法,代码块,内部类
* 3、static静态变量(类属性)
* 3-1、属性:按是否使⽤了static修饰,分为静态属性 vs ⾮静态属性(实列变量)
* 实例变量:我们创建了类的多个独享,每个独享都独⽴拥有类中的⾮静态属性,当修改其中⼀个对象中的⾮静态属性时,
* 不会导致其他对象中同样的属性值的改变
* 静态变量:我们创建⼦类的多个对象,多个对象共享同⼀个静态变量,当通过某⼀个都对象修改静态变量时,
* 会导致其他对象调⽤此惊天变量时,是调⽤修改过的变量
* 3-2、static修饰的其他说明
* (1)、静态变量随着类的加载⽽加载
* (2)、静态⽐变量的加载早于都对象的创建,可以通过类.静态变量的⽅式调⽤
* (3)、由于类只会加载⼀次,所以静态变量在内存中也只会存在⼀个。存在⽅法去的静态域中* 4、static静态⽅法(类⽅法)
* 4-1、随着类的加载⽽加载,可以通过‘类.静态⽅法()’的⽅式调⽤
* 4-2、静态⽅法中,只能调⽤静态的成员
* ⾮静态⽅法中,能调⽤静态和⾮静态的成员
*
static修饰的变量* 注意:
* 1、在静态的⽅法中,不能使⽤this和supper关键字
* 2、不能重写静态⽅法
*
* 开发中什么时候使⽤
* 1、属性可以被多个对象共享,不会随着对象的不同⽽不同
* 2、开发中,操作静态属性的⽅法通常设置为static⽅法
* 3、⼯具类中的⽅法,习惯声明为static的,⽐如:Math、Arrays、Collections
*/
static double PI = 3.14;
static int distance;
char nuit;
public static void main(String[] args) {
Chinese c1 = new Chinese();
c1.name = "张三";
c1.age = 30;
Chinese c2 = new Chinese();
c2.name = "李四";
c2.age = 30;
c1.nation = "CHN";
System.out.println(c2.name + "国籍:" + c2.nation);
// 本类中不⽤创建对象就可以访问静态成员
System.out.println("PI:" + PI);
run();
//调⽤其他类的静态变量和静态⽅法
System.out.println(Chinese.nation);
Chinese.eat();
}
public static void run() {
//nuit = '⽶'; 错误,在static ⽅法内部只能访问类的 的static修饰的属性或⽅法
//this.distance = 3000;tatic⽅法中不能有this和supper
distance = 1000;
System.out.println("跑了:" + distance);
}
}
class Chinese{
String name;
int age;
static String nation;
public static void eat() {
System.out.println("吃饭");
}
}
注意:
➥ 在static⽅法内部只能访问类的的static修饰的属性或⽅法,不能访问类的⾮static的结构
➥ 因为不需要实例就可以访问static ⽅法,因此static ⽅法内部不能有this和supper
➥ static 修饰的⽅法不能被重写
☍ final关键字
final关键字的使⽤
在Java中声明类、变量和⽅法时,可使⽤关键字final来修饰,表⽰“最终的”。
☃ final标记的类不能被继承。提⾼安全性,提⾼程序的可读性。
☄ 例如:String类、System类、StringBuffer类
☃ final 标记的⽅法不能被⼦类重写
☄ 例如:Object类中的getClass()⽅法
☃ final标记的变量(成员变量或局部变量)即称为常量。名称⼤写,且只能被赋值⼀次,赋值后不可在其
他类和⽅法中更改。☄ final标记的成员变量必须在声明时或在每个构造器中或代码块中显式赋值,然后才能使⽤。
☄ 例如:Math中的PI(public static final double PI = 3.14159265358979323846;)
/*final:最终的
* 1、final可以⽤来修饰的结构:类、⽅法和变量
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论