目录
一、this
1.介绍
在类定义的方法中有时需要引用正在使用该方法的对象时,可以使用关键词this表示该对象。
2.格式
this.变量名
this.方法名(参数列表)
3.实际使用
(1).在同一方法体内,定义两个重名的局部变量是不合法的。但局部变量,包括方法接受的输入参数,都可以与类的成员变量同名。这时就可以用this关键词直接引用对象,来区分局部变量和全局变量
(2).用于构造方法中。通过this可以调用类中的成员方法,并且this可以实现构造方法调用其他同名的构造方法。
4.例子
(1).区分局部变量和全局变量
public class javaTest{
String a;
char b;
int c;
public void setTest1(String aa,char bb,int cc){
this.a=aa; //this可以删除,因为全局变量名与局部变量名不同
this.b=bb;
this.c=cc;
}
public void setTest2(String aa,char bb,int cc){
a=aa; //与setTest1进行对比
b=bb;
c=cc;
}
public void setTest3(String a,char b,int c){
this.a=a; //this不可以删除,因为全局变量名与局部变量名相同
this.b=b;
this.c=c;
}
public static void main(String args[]){
javaTest s=new javaTest();
s.setTest1("hello",'x',10);
System.out.println("执行setTest1方法后 a="+s.a+" b="+s.b+" c="+s.c);
s.setTest2("hello",'Y',10);
System.out.println("执行setTest2方法后 a="+s.a+" b="+s.b+" c="+s.c);
s.setTest3("hello",'Z',10);
System.out.println("执行setTest3方法后 a="+s.a+" b="+s.b+" c="+s.c);
}
}
输出结果:
(2).构造方法
package Study;
public class javaTest{
String a;
int b;
public javaTest(){
a="张三";
b=14;
}
public javaTest(String a,int b){
this(); //通过this调用无参构造方法,即调用上面的方法
System.out.println("a="+this.a+" b="+this.b);
}
public javaTest(int b){
this.b=b;
System.out.println("b="+this.b);
}
public static void main(String args[]){
javaTest s=new javaTest("李四",30); //调用第二个构造方法
javaTest x=new javaTest(30); //调用的第三个构造方法
}
}
输出结果
二、static
1.介绍
在一般情况下,访问类的成员必须通过实例化该类进行访问。但有时候希望定义一个完全独立于该类的任何对象,这时只需要在类成员的声明前加个static即可。
2.名称
加了关键词static的成员具有静态属性
static+成员变量=静态成员变量(类变量)
static+成员方法=静态成员方法(类方法)
3.实际使用
static不用来修饰类,只是修饰类的成员,它在该类所有实例之间是共享的。
对于public类型的static成员,可以在类外直接用类名调用而不需要初始化
4.类方法的两原则
(1).类方法不能访问所属类的非静态变量和方法,只能访问方法体内的局部变量、参数和静态变量
(2).类方法中不能出现this和super关键字。
4.例子
程序1
public class javaTest{
static String name="王五"; //静态成员变量
public static String setName(String n){ //静态成员方法
name=n;
return name;
}
}
程序2(通过程序2调用程序1)
public class javaTest2 {
String testNmae="张三";
public static void main(String args[]){
javaTest2 s=new javaTest2();
System.out.println("未调用前testName的值:"+s.testNmae);
s.testNmae=javaTest.name; //类变量的调用(这时类外不需要初始化)
System.out.println("调用类变量后的testName的值:"+s.testNmae);
s.testNmae=javaTest.setName("李四"); //类方法的调用
System.out.println("调用类方法后的testName的值:"+s.testNmae);
}
}
输出结果
三、final
1.介绍
当final修饰基本数据类型时,该变量就成为了常量,值无法改变;当final修饰引用数据类型时,该变量的值不能改变,即值中存储的对象内存地址值不变,该变量不能再去指向别的对象,但对象内的成员可以改变
2.使用地方
可以用来修饰变量、方法和类
3.例子
程序1
public class javaTest{
static String name="王五"; //静态成员变量
public static String setName(String n){ //静态成员方法
name=n;
return name;
}
}
程序2
public class javaTest1{
final static int number=100;
public static void main(String args[]){
//下列语句删除注释后发生编译错误,final修饰的变量number无法再次赋值
//javaTest1.number=200;
final javaTest s1=new javaTest(); //实例化程序1
javaTest1 s2=new javaTest1();
//下列语句删除注释后发生编译错误,final修饰的变量s1无法再次赋值
//s1=s2;
}
}
四、super
1.介绍
super关键词表示对某个类的父类的引用。一般而言,super有两种通用形式:
(1).用来访问被子类的成员隐藏的父类成员
(2).可以调用父类的构造函数
如子类和父类有同名的成员变量或方法,可以使用super关键词来引用父类的成员。
2.格式
super.成员变量名
super.成员方法名
3.例子
程序1
public class javaTest{
String name;
char sex;
int age;
public String getName(){
return name;
}
public char getSex(){
return sex;
}
public int getAge(){
return age;
}
}
程序2
public class javaTest2 extends javaTest {
String studentID;
String major;
String name; //定义一个与父类成员同名的变量name
//定义一个和父类成员同名的成员方法getName()
public String getName(){
return "王五";
}
public String getName2(){
super.name="张三"; //获得父类被隐藏的成员变量name
return super.getName(); //调用父类被隐藏的成员方法getName()
}
public String getMajor(){
return major;
}
public String getStudentID(){
return studentID;
}
}
程序3
public class javaTest3 {
public static void main(String[] args){
javaTest2 s1=new javaTest2();
s1.name="赵六";
System.out.println("学生姓名是:"+s1.name);
System.out.println("学生姓名是:"+s1.getName());
System.out.println("学生姓名是:"+s1.getName2());
}
}
程序2继续程序1,然后程序3来调用程序1,2中的成员变量和方法
输出结果