最近把自己比较犯晕的几个小的JAVA知识点整理出来,一是回顾一下JAVA的知识,而是方式以后忘记
1、构造函数的使用
类有哦一个特殊的成员方法叫做构造方法,它的作用是创建对象并初始化成员变量。在创建对象时,会自动调用类的构造方法。
JAVA中构造方法必须与该类具有相同的名字,并且没有方法的返回类型(包括没有void)。另外,构造方法一般都应用public 类型来说明,这样才能在程序的任意位置创建类的实例---对象。
每个类至少有一个构造方法。如果不写一个构造方法,JAVA将提供一个默认的,该构造方法没有参数,而且方法体为空。
注意:如果一个类中已经定义了构造方法则系统不再提供默认的构造方法
例子:
package test01;
public class Hello {
int id;
String username;
String password;
public Hello(int id)
{
this.id = id;
System.out.println("构造函数1:id="+id);
}
public Hello(int i,String username,String password)
{
//此时,i这个局部变量没有和成员变量重名,所以不用指定
this.username = username;
this.password = password;
System.out.println("构造函数2:username="+username+" password="+password);
}
public Hello()
{
//用this调用上面的构造函数,必须上面有定义下面才能使用。
this(5,"hualang","123456");
}
public static void main(String args[])
{
Hello hello1 = new Hello(3);
Hello hello2 = new Hello(4,"loulijun","666666");
Hello hello3 = new Hello();
}
}
输出结果:
构造函数1:id=3
构造函数2:username=loulijun password=666666
构造函数2:username=hualang password=123456
2、super,this的区别及使用
JAVA的this关键字只能用于方法体内,JAVA虚拟机(JVM)会给这个对象分配一个引用紫森的指针,这个指针的名字就是this,因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中不能使用this,比如main方法中是不能使用this的,并且this只和特定的对象关联,而不和类关联,同一个类中的的不同对象有不同的this。
注意:函数参数或者函数中的局部变量和成员变量同名的话,成员变量被屏蔽,此时要访问成员变量则需要使用
"this.成员变量"的方式引用成员成员变量,如果没有同名的情况下,可以直接使用。
package test01;
public class ThisTest {
private int number;
private String username;
private String password;
final private int x = 6;
public ThisTest(int number)
{
this.number = number;
}
public ThisTest(int number, String username, String password)
{
//成员变量和参数同名,成员变量被屏蔽,用“this.成员变量”的方式访问成员变量
this.number = number;
this.username = username;
this.password = password;
}
public ThisTest()
{
this(1,"通过this调用另一个构造方法(3个参数)","111111");
}
public ThisTest(String name)
{
this(2,name,"通过this调用另一个构造方法");
}
public void test()
{
//局部变量与成员变量同名,成员变量被屏蔽,用"this.成员变量"的方式访问成员变量
int x;
x = this.x +6;
System.out.println("局部变量x="+x);
System.out.println("成员变量this.x="+this.x);
}
public void showMessage(ThisTest t)
{
System.out.println("-----------------------");
System.out.println(t.number);
System.out.println(t.username);
System.out.println(t.password);
System.out.println("-----------------------");
test();//可以使用this.test()调用
}
public static void main(String args[])
{
ThisTest t1 = new ThisTest();
ThisTest t2 = new ThisTest("loulijun");
t1.showMessage(t1);
t2.showMessage(t2);
}
}
运行结果如下:
-----------------------
1
通过this调用另一个构造方法(3个参数)
111111
-----------------------
局部变量x=12
成员变量this.x=6
-----------------------
2
loulijun
通过this调用另一个构造方法
-----------------------
局部变量x=12
成员变量this.x=6
运行结果分析:
main函数中首先创建两个ThisTest对象,t1、t2,然后调用用着两个对象调用showMessage()方法,并且将自己作为参数传递给showMessage(),比如t1.showMessage(t1):这个方法会以这个对象调用number,username,password,以及test()方法,从而打印出数据
下面是super的使用及说明
super和this作用类似,使被屏蔽的成员变量或者成员方法课件,或者说用来引用被屏蔽的成员变量和成员方法。
不过super是用在子类中,目的是访问直接父类中被屏蔽的成员,注意是直接父类(类之上最近的超类)。
1、在使用super的时候,一般尽可能的使用private私有化
2、子类构造方法调用父类的构造方法一般用super(参数列表)的方式调用,参数不是必须的。同时还要注意,super(参数列表)这条语句只能用在子类构造方法体中的第一行
3、当子类方法中的局部变量或者子类的成员变量与父类成员变量同名时,也就是子类局部变量覆盖父类成员变量时,用
"super.成员变量名"来引用父类的成员变量。当然,如果父类的成员变量没有被覆盖,也可以用"super.成员变量名"来引用父类成员变量,不过这是不必要的
4、当子类的成员方法覆盖了父类的成员方法时,也就是子类和父类有完全相同的方法定义(但方法体可以不同),此时,用"super.方法名(参数列表)"的方式访问父类的方法
父类Father.java
package test01;
public class Father {
public String v = "父类Father";
public String x = "父类的成员变量";
public Father()
{
System.out.println("Father无参构造方法被调用");
}
public Father(String v)
{
this.v = "Father有参构造方法被调用";
}
public void showMessage()
{
System.out.println("Father的showMessage()方法被调用");
}
public static void main(String args[])
{
//自动生成存根方法
}
}
子类Son.java
package test01;
public class Son extends Father {
public String v = "子类Son";
public Son()
{
//调用父类的构造方法,且只能放在第一行
super();
System.out.println("Son的无参构造方法被调用");
}
public Son(String str)
{
super(str);
System.out.println("Son的有参构造方法被调用");
}
//覆盖了父类的成员方法showMessage()
public void showMessage()
{
System.out.println("Son的showMessage()方法被调用");
}
public void test()
{
String v = "局部变量v覆盖了成员变量v和超类变量v";
System.out.println("---------------------------");
System.out.println("子类局部变量v="+v);
System.out.println("子类成员变量v="+this.v);
System.out.println("父类成员变量v="+super.v);
System.out.println("子类继承而来的超类成员变量x="+x);
System.out.println("超类成员变量x="+super.x);
System.out.println("---------------------------");
showMessage();//调用子类的showMessage()方法
this.showMessage();//调用子类的showMessage()方法
super.showMessage();//调用父类的showMessage()方法
}
public static void main(String args[])
{
Son son =new Son();
son.test();
}
}
运行Son.java,结果如下:
Father无参构造方法被调用
Son的无参构造方法被调用
---------------------------
子类局部变量v=局部变量v覆盖了成员变量v和超类变量v
子类成员变量v=子类Son
父类成员变量v=父类Father
子类继承而来的超类成员变量x=父类的成员变量
超类成员变量x=父类的成员变量
---------------------------
Son的showMessage()方法被调用
Son的showMessage()方法被调用
Father的showMessage()方法被调用
分享到:
相关推荐
内容较杂,有java初中高级知识点,也有Java web架构及原理
JAVA知识点32JAVA知识点32JAVA知识点32JAVA知识点32JAVA知识点32JAVA知识点32JAVA知识点32JAVA知识点32JAVA知识点32
最近的java 面试知识点, 比较全的java基础知识面试知识,linux
java知识点总结,所有框架知识点
java知识点积累
91.java知识点补充.zip91.java知识点补充.zip91.java知识点补充.zip91.java知识点补充.zip91.java知识点补充.zip91.java知识点补充.zip91.java知识点补充.zip91.java知识点补充.zip91.java知识点补充.zip91.java知识...
Java面试知识点总结,2022最新,35问答,助您斩获offer Java面试知识点总结,2022最新,35问答,助您斩获offer Java面试知识点总结,2022最新,35问答,助您斩获offer Java面试知识点总结,2022最新,35问答,助您斩...
java考试知识点整理
java 面向对象 知识点总结01
有关于Java的最新知识点,希望对大家有帮助!!!!!
Java知识点截图
JAVA知识点列表JAVA知识点列表JAVA知识点列表JAVA知识点列表JAVA知识点列表
基础的java 知识点,包含集合等的知识点,供大家学习,欢迎大家留言
java核心知识点整理,面试很有用 Java核心知识点2.JVM JVM 是可运行 Java 代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、 一个垃圾回收,堆 和 一个存储方法域。JVM 是运行在操作系统之上的,它...
JAVA核心面试知识点整理
java知识点总结思维导图(xmind),java知识点大全,xmind版方便查看。供大家下载学习!
Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案...
Java学习更是如此,知识点总结目录如下: 目录 一、 Java概述 3 二、 Java语法基础 5 数据类型 5 运算符号 14 语句 15 函数 15 方法重载(Overloadjing)与重写(Overriding) 16 数组 17 总结 18 三、 常见关键字 ...
JAVA核心知识点整理.pdf 整理了java开发中比较重要的知识点,对java开发有很大的帮助!主要介绍了 JVM,JAVA集合,多线程,Spring原理,微服务,Zookeeper等...