java面向对象:类(二)
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 基本语法
[修饰符] 方法名(形参列表){
方法体;
}
说明:
- 构造器的修饰符可以默认,也可以是public protected private
- 构造器没有返回值
- 方法名和类名必须一样
- 参数列表和成员方法一的规则
- 构造器的调用,由系统完成
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 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 }
注意事项和使用细节:
- this关键字可以用来访问本类的属性、方法、构造器
- this用于区分当前类的属性和局部变量
- 访问成员方法的语法:this. 方法名(参数列表)
- 访问构造器方法:this(参数列表);注意只能再构造器中使用(即只能在构造器中访问另外一个构造器,必须放在第一条语句)
- this不能再类定义的外部使用,只能再累定义的方法中使用。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)