作为一名学生,这都是我平时在学习中遇到的一些问题,不清楚不明白的地方,总结给大家的,希望能够帮助到大家
一、案例:
package com.test;
public class Hero{// 建立一个Hero类
public int age;// 成员变量
public String name;// 成员变量
public static int age2;// 类变量(静态变量)
public static String name2;// 类变量(静态变量)
public void run(){
String name3;// 局部变量
int age3;// 局部变量
}
2.在Hero里面、方法run外面的是成员变量
3.在Hero里面、方法run外面、static开头的是类变量(静态变量)
4.在run方法里面的是局部变量
二、Java构造方法与this关键字
概述
构造方法是类中定义的特殊方法,它在一个类使用关键字new实例化新对象时默认调用,其主要功能是完成实例变量的初始化操作。
构造方法与普通方法的区别:构造方法的名字必须与类名称相同;构造方法不能有返回值类型声明(包括void)
构造方法执行初始化
默认初始化是在创建一个对象时,系统将所有基本类型的实例变量(对于对象而言)设置为0或false;对于引用类型的实例变量设置为null。
构造方法初始化是指系统在创建对象时就为该对象的实例变量显示指定初始值。
无论如何,Java类至少包括一个构造器,(即便设计者没有提供任何构造器,系统也会自动提供一个无参构造方法)
public class Person// 定义一个类
// 定义成员变量
public String name;
priavte int age;
// 定义构造方法
public Person(String name,int age){// 必须与类名相同且必须无返回值声明
//初始化变量
this.name = name;
this.age = age;
}
//定义输出方法
public void Info(){
System.out.println("姓名:"+this.name+";年龄:"+this.age);
}
}
public class Test{
public static void main(String[] args){
Person per = new Person("丁一",22);// 实例化对象并自定义初始化
per.Info();// 调用输出方法
}
}
构造方法重载
构造方法重载指的是同一个类里具有多个构造器,多个构造器的形参列表不同,方法名称必须和类名相同
java
public class Person{
private String name;
private int age;
public Person(){// 无参构造
public Person(String name,int age){// 双参构造
this.name = name;
this.age = age;
}
public String Info(){
return "姓名:"+this.name+";年龄:"+this.age;
}
}
public class Test{
public static void main(String[] args){
Person per = new Person("丁一",22);
Person p = new Person();
System.out.println(per.Info());// 系统会选择双参构造
System.out.println(p.Info));// 系统会选择无参构造
}
}
This 关键字
This可以调用本来的成员变量,以上代码已展示;格式:this.实例变量
This可以调用本来方法(包括普通方法和构造方法)
调用本来普通方法格式:this.方法名()
public class Cat{
public void Eat(){// 定义一个要被调用的方法
System.out.print("喵喵喵,吃鱼鱼啦~");
}
public void Mylife(){
this.Eat();// 调用本类方法,可省略,但最好不要省略
System.out.println("吃完就睡身体好!");
}
}
public class Test{
public static void main(String[] args){
Cat cat = new Cat();// 实例化对象
cat.MyLife();// 输出
}
}
构造方法间的相互调用,格式:this() 注意:此语句只能放在构造方法的首行
public class Person{
private String name;
private int age;
private String country;
public Person(){ // 无参构造
System.out.println("俺出生啦!!!");
}
public Person(String name){ // 单参构造
this.();// 调用无参构造
this.name = name;// 初始化变量
}
public Person(String name,int age){ // 双参构造
this(name);// 调用单参构造(同时也调用了无参构造)
this.age = age;// 初始化变量
}
public Person(String name,int age,String country){ // 三参构造
this(name,age);// 调用双参构造(同时也调用了单参和无参构造)
this.country = counrty;// 初始化变量
}
public void tell(){
System.out.println("俺叫"+this.name+",今年"+this.age+"+"了"+",来着"+this.counrty);
}
}
public class Test{
public static void main(String[] args){
Person per = new Person("王二狗",20,"中国");// 系统自动选择三参构造
per.tell();// 输出
}
}
构造方法相互调用既可以让程序代码更加简洁,也可以降低软件的维护成本
无法用this调用static修饰的方法和成员变量
注意:多个构造方法间互相调用,必须有一个构造方法没有调用语句作为程序的出口,否则会出现构造方法的递归调用!!
递归调用:递归调用是一种特殊的嵌套调用,是某个函数调用自己,而不是另外一个函数。
this关键字主要有三个应用: (1)this调用本类中的属性,也就是类中的成员变量; (2)this调用本类中的其他方法; (3)this调用本类中的其他构造方法,调用时要放在构造方法的首行。