java面向对象:类(二)

发布时间 2024-01-05 16:23:01作者: 测试开发孵化园

1.Java面向对象:类

1.1 作用域

1.1.1 基本使用

面向对象中,变量作用域是非常重要的知识点

在java编程中,主要的变量就是属性(成员变量)和局部变量

我们所获得局部变量一般是指在成员方法中定义得变量

java中作用域得分类:

  • 全局变量:也就是属性,作用域为整个类,可以不赋值,直接使用,因为有默认值
  • 局部变量:也就是除了属性之外得其他变量,作用域为定义它得代码块中。必须赋值后,才能使用,因为没有默认值
 1 public class Cat {
 2     //全局变量:也就是属性,作用域为整个类体
 3     //属性在定义时可以直接赋值
 4     int age = 10;//指定得值是10
 5 
 6     //全局变量(属性)可以不赋值,直接使用,因为有默认值
 7     double weight; //默认值0.0
 8 
 9     public void hi(){
10         //局部变量必须赋值后,才能使用,因为没有默认值
11         int num=1;
12         String address="北京的猫";
13         System.out.println("num="+num);
14         System.out.println("address="+address);
15         System.out.println("weight="+weight);//属性
16     }
17     
18     public void cry(){
19         //1.局部变量一般是指在成员方法中定义的变量
20         //2. n和 name就是局部变量
21         //3. n和name的作用域在cry方法中
22         int n=10;
23         String name="jack";
24         System.out.println("在cry中使用属性 age="+age);
25     }
26     
27     public void eat(){
28         System.out.println("在eat中使用属性age="+age);
29         //System.out.println("在eat中使用cry的变量name="+name);//错误
30     }
31 }

1.1.1 注意事项和细节使用

  • 属性和局部变量可以重名,访问时遵循就近原则
  • 在同一个作用域中,比如在同一个成员方法中,两个局部变量,不能重名
  • 属性生命周期较长,伴随着对象的创建而创建,伴随着对象的销毁而销毁
  • 局部变量,生命周期较短,伴随着它的代码块的执行而创建,伴随着代码块的结束而销毁。即在一次方法调用过程中
  • 作用域范围不同
    • 全局变量/属性:可以被本类使用,或其他类使用
    • 局部变量:只能在本类中对应的方法中使用 
  •   修饰符不同
    • 全局变量/属性可以加修饰符
    • 局部变量不可以加修饰符

1.2 构造方法/构造器

1.2.1 基本语法

[修饰符] 方法名(形参列表){

  方法体;

}

说明:

  1. 构造器的修饰符可以默认,也可以是public protected private
  2. 构造器没有返回值
  3. 方法名和类名必须一样
  4. 参数列表和成员方法一的规则
  5. 构造器的调用,由系统完成

1.2.2 基本介绍

构造方法又叫构造器(constructor),是类的一种特殊的方法,它的主要作用是完成对新对象的初始化。它有几个特点

1)方法名和类名相同

2)没有返回值

3)在创建对象时,系统会自动的调用该类的构造器完成对象的初始化

 1 public class Constructor01 {
 2     public static void main(String [] args){
 3         //当我们new一个对象时,直接通过构造器指定名字和年龄
 4         Student s1=new Student("小刘",15);
 5         System.out.println("s1的信息如下");
 6         System.out.println("s1对象 name="+s1.name);
 7         System.out.println("s1对象 age="+s1.age);
 8     }
 9 }
10 
11 //在创建类的对象时,就直接指定这个对象的年龄和姓名
12 class Student{
13     String name;
14     int age;
15     //构造器
16     //1.构造器没有返回值,也不能些void
17     //2.构造器的名称和类Student一样
18     //3.(String name,int age)是构造器形参列表,规则和成员方法一样
19     public Student(String name,int age){
20         System.out.println("构造器被调用,完成对象的属性初始化");
21         name=name;
22         age=age;
23     }
24 }

注意事项和使用细节:

  1. 一个类可以定义多个不同的构造器,即构造器重载
  2. 构造器名和类名要相同
  3. 构造器没有返回值
  4. 构造器是完成对象的初始化
  5. 在创建对象时,系统自动的调用该类的构造方法
  6. 如果程序员没有定义构造器,系统会自动给类生成一个默认无参构造器
  7. 一旦定义了自己的构造器,默认构造器就被覆盖了,就不能再使用默认的无参构造器,除非显示的定义一下

1.2 this关键字

 1 public class This01 {
 2     public static void main(String[] args) {
 3         Dog dog1=new Dog("大黄",3);
 4         System.out.println("dog1的hashcode="+dog1.hashCode());
 5         dog1.info();
 6         System.out.println("============");
 7         Dog dog2=new Dog("小黑",2);
 8         System.out.println("dog2的hashcode"+dog2.hashCode());
 9         dog2.info();
10     }
11 }
12 
13 class Dog{
14     String name;
15     int age;
16 
17 //    public Dog(String dName,int dAge){
18 //        name=dName;
19 //        age=dAge;
20 //    }
21     //如果我们构造器的形参,能够直接写成属性名,就更好了
22     //但是出现了一个问题,根据变量的作用域原则
23     //构造器的name是局部变量,而不是属性
24     //构造器的age 是局部变量,而不是属性
25     //---》引出this关键字来解决
26     public Dog(String name,int age){
27         //this.name就是当前对象的属性name
28         this.name=name;
29         //this.age就是当前对象的属性age
30         this.age=age;
31         System.out.println("this.hashCode="+this.hashCode());
32     }
33 
34     public void info(){//成员方法中,输出属性信息
35         System.out.println("this.hashCode="+this.hashCode());
36         System.out.println(name+"\t"+age+"\t");
37     }
38 }

注意事项和使用细节:

  1. this关键字可以用来访问本类的属性、方法、构造器
  2. this用于区分当前类的属性和局部变量
  3. 访问成员方法的语法:this. 方法名(参数列表)
  4. 访问构造器方法:this(参数列表);注意只能再构造器中使用(即只能在构造器中访问另外一个构造器,必须放在第一条语句)
  5. this不能再类定义的外部使用,只能再累定义的方法中使用。