成员方法
类成员主要包含两部分:成员方法和成员变量。
1.带参数的方法
例:每个人都有不同的工作理念,在Person类中定义工作的方法,并通过参数接收工作理念。
分析:带参数的work()方法可以接受用户输入的内容。创建work()方法时定义的参数叫形式参数,简称形参。调用方法时传入的参数叫做实际参数,简称实参。
public class PersonP{//定义“人”类
public String name;
public String gender;
public int age;
//无参数的工作方法
public void work(){
Systeml.out.println(this.name+"的工作理念:干活挣钱有饭吃");
}
//带参数的工作方法
public void work(String contect){
System.out.println(this.name+"的工作理念:"+contect);
}
}
例:在Person类中定义工作的方法,并返回工作理念。
分析:work()方法要求返回工作理念,可以定义其返回类型为String。
public class Person{//定义“人”类
public String name;
public String gender;
public int age;
//有返回值的无参方法
public String work(){
return"实现自身价值和理想!";
}
}
//以上为Person类定义代码,以下为调用代码
public class PersonTest{
public static void main(String args[]){
Person hanbing=new Person();
hanbing.name="寒冰";
hanbing.gender="女";
hanbing.age=22;
String contect=hanbing.work();//将work()方法的返回值赋值给变量contect
System.out.println(hanbing.name+"的工作理念:"+contect);
}
}
2.方法重载
(1)方法重载的定义
方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数类型或参数个数。
例:定义一个不带参数的work()方法,再定义一个带参数的work()方法,然后观察二者之间的区别。
public class Person{
public String name;
public String gender;
public int age;
//无参数的工作方法
public void work(){
System.out.pringtln(this.name+"的工作理念:干活挣钱有饭吃");
}
//带参数的工作方法
public void work(String contect){
System.out.println(hanbing.name+"的工作理念:"+contect);
}
}
(2)方法重载的特点
在同一个类中。
方法名相同。
参数的个数或类型不同。
方法的返回值不能作为判断方法之间是否构成重载的依据。
(3)方法重载的使用
例:调用工作的方法。
当work()方法形成方法重载后,hanbing对象后面使用“.”时,会提示有两个work()方法可供选择,且在弹出的代码智能提示中给出返回类型和参数的信息。
//省略Person类定义的代码
public class PersonTest{
public static void mian(String args[]){
Person hanbing=new Person();
hanbing.name="寒冰";
hanbing.gender="女";
hanbing.age=22;
hanbing.work();//调用无参方法
hanbing.work("实现自身价值和理想");//调用重载的有参方法
}
}
(4)方法重载的优点
方法重载其实是对原有方法的一种升级,可根据参数的不同,采用不同的实现方法,而且不需要编写多个名称,简化了类调用方法的代码。
成员变量
1.成员变量作用域
类中的属性,也就是直接在类中定义的变量称作成员变量,它定义在方法的外部。
在下面的代码中,Person类中的name、gender既不属于eat()方法,也不属于work()方法,而属于Person类本身的属性,它们是Person类的成员变量。
public class Person {
public String name;
public String gender;
public int age;
public void eat(String name) {
System.out.println(this.name + "邀请" + name + "共进晚餐");
}
public void work() {
int age = 18;
System.out.println(this.name + age + "岁的工作理念:干活挣钱有饭吃");
}
public void work(String contect) {
System.out.println(this.name + "岁的工作理念:" + contect);
}
public void showDetails() {
System.out.println("姓名是:" + this.name + ",性别为:" + this.gender + ",年龄是:" + this.age);
}
}
成员变量可以在声明时赋初始值。
2.局部变量作用域
局部变量就是定义在方法中的变量。
分析:
work()方法中的变量age就是局部变量。
提示:虽然成员变量age和局部变量age的名称一样,但表示的却不是同一个变量。一般情况下,局部变量在使用前需要赋值,否则会编译出错。
3.成员变量和局部变量的区别
总的来说,使用成员变量和局部变量时需要注意以下几点。
(1)作用域不同。局部变量的作用与仅限于定义它的方法,在该方法外无法访问它。成员变量的作用域在整个类内部都是可见的,所有成员方法都可以使用它, 如果访问权限允许,还可以在类外部使用成员变量。
(2)初始值不同。对于成员变量,如果在类定义中没有给它赋予初始值,java会给它一个默认值,基本数据类型的值为0,引用类型的值为null。但是Java不会给局部变量赋予初始值,因此局部变量必须要定义并赋值后再使用。
(3)在同一个方法中,不允许有同名的局部变量。在不同的方法中,可以有同名的局部变量。
(4)局部变量可以和成员变量同名,并且在使用时,局部变量具有更高的优先级。
4.数据类型
在Java中,变量的类型分为两种:一种是基本数据类型,另一种是引用数据类型。
Java中的引用数据类型包括3种:类、数组和接口。
例:对比基本数据类型和引用数据类型的区别。
public class Person {
public int age;
}
//以上为Person类定义代码,以下为调用代码
public class Test{
public static void main(String[] args) {
//基本数据类型
int num1=11;
int num2=num1;
System.out.println("num1等于:"+num1);
num2=22;
System.out.println("把num1赋给num2后,修改num2的值,"+"num1等于:"+num1);
//引用数据类型
Person person1=new Person();
person1.age=11;
Person person2=person1;
System.out.println("person1.age等于:"+person1.age);
person2.age=22;
System.out.println("把person1对象赋给person2对象后,修改person2的age属性,"
+"person1.age等于:"+person1.age);
}
}
分析如下:
int为基本数据类型,当初始化num1并赋值后,将num1赋给num2,然后修改num2的值,运行后发现num1的值没变。
class为引用数据类型,当实例化person1对象并对其属性赋值后,将person1对象赋给person2对象,然后修改person2的值,运行后发现person1的属性值发生了变化。
对于基本数据类型,不同的变量会分配不同的存储空间,并且存储空间种存储的是该变量的值。赋值操作传递的是变量的值,改变一个变量的值不会影响另一个变量的值。
对于引用数据类型,赋值是把原对象的引用(可理解为内存地址)传递给另一个引用。对数组而言,当用一个数组名直接给另一个数组名赋值时,相当于传递了一个引用,此时,这两个引用指向同一个数组,也就是指向同一内存空间。
同理,基本数据类型和引用数据类型在传递参数时,同样会有这样的区别。
构造方法
Java中,当类创建一个对象时会自动调用该类的构造方法,构造方法分为默认构造方法和带参数的构造方法。
1.构造方法的定义
构造方法的主要作用是进行一些数据的初始化。
[访问修饰符]方法名([参数列表]){
//省略方法体的代码
}
构造方法没有返回值。
默认构造方法没有参数,因此参数列表可选。
构造方法的方法名与类名相同。
例:为Person类定义一个构造方法。
publid class Person{
public string name;
public Person(){
this.name="寒冰";
}
}
该例所示的Person的构造方法的作用是当有Person类的对象创建时,将这个对象的name属性设置为“寒冰”。
当开发人员没有编写自定义构造方法时,Java会自动添加默认构造方法,默认构造方法没有参数。
如果自定义了一个或多个构造方法,则Java不会自动添加默认的构造方法。
2.构造方法重载
例:使用构造方法重载和一般方法重载等技术实现信息的输出。
public class Person {
public String name;
public String gender;
public int age;
public Person() {
this.name = "寒冰";//无参构造法
}
public Person(String name) {
this.name = name;//带参构造法
}
public void work() {
System.out.println(this.name + "的工作理念:干活挣钱有饭吃");
}
public void work(String contect) {
int age = this.age;
System.out.println(this.name + age + "岁的工作理念:干活挣钱有饭吃");
}
}
//以上为Person类定义代码,以下为调用代码
public static void main(String[] args) {
Person guset =new Person("寒冰");//选择Person的带参构造方法创建对象
System.out.println("大家好,欢迎"+guset.name+"来到地球村");
Scanner input=new Scanner(System.in);
System.out.println("请选择您的性别:(1、男 2、女)");
switch (input.nextInt()){
case 1:
guset.gender="男";
break;
case 2:
guset.gender="女";
break;
default:
System.out.println("操作错误");
return;
}
System.out.println("请输入您的年龄:");
guset.age=input.nextInt();
guset.work();//调用无参work()方法
System.out.println("请输入您的工作理念:");
String contect=input.next();
guset.work(contect);//调用有参work()方法
}
this关键字是对一个对象的默认引用。每个实例方法内部都有一个this引用变量,指向调用这个方法的对象。
this使用举例如下:
(1)使用this调用成员变量,解决成员变量和局部变量的同名冲突。
public void setName(String name){
this.name=name;//成员变量和局部变量同名,必须使用this
}
(2)使用this调用成员方法。
public void play(int n){
health = health-n;
this.print();//this可以省略,直接调用print()方法
}
(2)使用this调用重载的构造方法,只能在构造方法中使用,且必须是构造方法的第一条语句。
public Penguin(String name,String sex){
this.name=name;
this.sex=sex;
}
public Penguin(String name,int health,int love,String sex){
this(name,sex);
this.health=health;
this.love=love;
}
因为this是在对象内部指代自身的引用,所以this只能调用实例变量、实例方法和构造方法,不能调用类变量和类方法,也不能调用局部变量。