史上最全讲解: JAVA中的参数与返回值类型,构造器 ,关键字this与static
返回值类型
方法的参数|返回值都可以为任意类型,可以是基本数据类型,也可以是自定义的引用数据类型.
package com.shsxt.oop01;
//蛋糕师
//注意: 方法的参数|返回值都可以为任意类型,包括自定义的引用数据类型
public class Caker {
public String name;
//制作蛋糕
//返回值: 有 返回一个蛋糕 参数:蛋糕的细节
public Cake makeCake(int size,String taste,double money){
//创建蛋糕对象
Cake cake=new Cake();
cake.size=size;
cake.taste=taste;
cake.money=money;
return cake;
}
}
构造器
定义
构造器也称构造函数或者构造方法,是一个特殊的方法,特殊在没有返回值类型.
new关键字在创建对象时会做一下事情:
1.在堆中开辟空间,对象的成员属性会被加载到堆内存中并赋默认值.
2.调用构造器初始化信息
3,将地址返回给引用.
构造器的作用是为对象初始化信息用的,不可以创建对象.跟随new一起使用
格式:
修饰符 类名(参数列表){
…
}
注意事项
1.构造器不需要返回值类型(包括void)
2.构造器的名字必须与类名保持一致.
3.可以使用return结束方法
4.构造器可以重载
5.如果没有定义构造器,编译器会默认提供一个空构造,如果定义了构造器则编译器不会再提供任何构造器
package com.shsxt.constructor02;
public class Constructor{
public static void main(String[] args){
Teacher teacher = new Teacher("aaa", "bbb");
teacher.teach();
}
}
class Teacher{
public String name;
public String gender;
public String subject;
public Teacher(){
}
public Teacher(String teacherName){
name = teacherName;
}
public Teacher(String teacherName,String teacherGender){
this(teacherName);
gender = teacherGender;
}
public Teacher(String teacherName,String teacherGender,String teacherSubject){
this(teacherName, teacherGender);
subject = teacherSubject;
}
public void teach(){
System.out.println("我会教书"+name+gender+subject);
}
}
this 关键字
定义
this关键字指代当前new出来的对象,动态的执行不同的对象.(必须用在方法中!!!)
作用
- 构造器的首行调用本类中的其他构造器
this(参数列表);
注意:必须用在构造器首行才可以
构造器之间不能相互调用 - 区分同名变量
this存储对象的地址值,this指代当前调用成员方法(使用成员变量)的对象.
[注意]
如果出现同名情况,即参数名与成员变量名相同,想要指代成员变量必须使用this;如果不存在同名可以不使用this.
构造器中的this 指代当前new出来的对象
在方法中,如果出现局部变量与成员变量同名的问题,就近原则默认使用局部变量.
package com.shsxt.this03;
public class ThisTest {
public static void main(String[] args){
Teacher teacher = new Teacher("aaa", "bbb");
teacher.teach();
}
}
class Teacher{
public String name;
public String gender;
public String subject;
public Teacher(){
}
public Teacher(String name){
this.name = name;
}
public Teacher(String name,String gender){
this(name);
this.gender = gender;
}
public Teacher(String name,String gender,String subject){
this(name, gender);
this.subject = subject;
}
public void teach(){
System.out.println("我会教书"+name+gender+subject);
}
}
Static关键字
静态方法中只能修饰静态内容;即被static修饰的方法只能使用被static修饰的内容,要使用成员的内容只能new对象
定义
静态的,只能修饰成员,不能修饰局部
修饰变量:被称为静态变量或者类变量.
修饰方法:被称为静态方法或者类方法
使用方式
可以通过类使用也可以通过对象使用
1.通过类使用
类名.静态变量名;
类名.静态方法名;
2.通过对象使用
对象名.静态变量名;
对象名.静态方法名
注意
1.成员都是属于对象的,静态的内容都是属于类的.
2.静态的变量在方法区中的静态区存在,是唯一的,所有根据该类创建的对象都具有,在类第一次加载后就初始化了.
3.成员的变量是存在于对象之中的,跟着对象在变化,有一个对象就有一个成员变量
4. this与static不可以同时使用.,因为this作用于对象的,static作用于类.
5. 静态的内容中只能直接使用静态的内容,不可以直接使用成员的内容,但是可以通过对象使用.
6. 成员内容中即可以直接使用静态的也可以直接使用成员的.
package com.shsxt.constructor02;
public class Practice01 {//类名.静态方法名;类名.静态变量 在本类中可省略
int age = 1;
static String gender = "男";
public static void main(String[] args){
Teacher01 teacher = new Teacher01("11", "22");
teacher.teach();
System.out.println(new Practice01().age);
System.out.println(gender);
new Practice01().test();//静态方法中调用成员方法,必须使用创建对象.成员方法名的形式
Practice01.test2();//静态方法中使用静态方法,可以直接使用静态方法名(在同一类中),或者类名.静态方法名的形式
}
//成员方法中 使用成员变量可以直接使用成员变量名age 也可以使用new Practice01().age 或者this.age
//成员方法中使用静态变量,可以直接使用gender,也可以Practice01.gender
public void test(){
System.out.println(age);
System.out.println(Practice01.gender);
}
//静态方法中 使用成员变量不可以直接使用成员变量名age 必须使用new Practice01().age,也不可以使用this.age;
//静态方法中使用静态变量,可以直接使用gender,也可以Practice01.gender
public static void test2(){
System.out.println(new Practice01().age);
System.out.println(gender);
}
}
class Teacher01{
public String name;
public String gender;
public String subject;
public Teacher01(){
}
public Teacher01(String name){
this.name = name;
}
public Teacher01(String name, String gender){
this(name);
this.gender = gender;
}
public Teacher01(String name, String gender, String subject){
this(name, gender);
this.subject = subject;
}
public void teach(){
System.out.println("我会教书"+name+gender+subject);
}
}