类与对象(面向对象编程的关键思想)
面向对象编程的重点:类与对象
类与对象的一些基本概念
-
类的定义格式:
[修饰符] class [extents 父类名] [implements 接口列表]{
... //类体部分
}
-
类体部分包括类的属性和方法。
-
对象的创建及引用:定义Java类后,就可以使用“new+构造方法”来创建类的对象,并将创建的对象赋值给某个引用变量,进而通过”引用变量名.属性(或方法)“来访问对象的属性(或方法)。
-
创建对象即为对类的实例化,当创建了一个对象时,系统将自动调用对象的构造方法,并给实例变量赋初值。
构造方法
-
构造方法的特点:
-
方法名要与类名一致
-
构造方法没有返回值
-
-
构造方法的主要作用就是给对象的属性赋值
-
需要注意的是:当类中没有创建构造方法时,系统将自动创建一个无参数且为空的构造方法。若创建了有参的构造方法,系统将不再自动创建无参构造方法,此时需要自己创建,否则当创建的对象不含参数时,系统将报错。
-
创建构造函数的快捷方式:Alt+ins
变量的作用域
1. 变量的作用域也称变量的有效范围,它是指程序中的一个区域,变量在其作用域内可以被访问。作用域也决定Java运行系统什么时候为变量创建和释放内存。根据变量在程序中声明的位置,可以将变量分为以下4种情形:
(1)成员变量:其作用域是整个类体。成员变量定义时系统会自动赋默认初值。成员变量包括:实例变量(实例变量又称类的属性,实例变量必须通过对象来访问)、类变量(静态变量)、常量。举例:
public class Variable{
public int a; //实例变量
private String b; //实例变量
public static int c; //类变量(加了static修饰符)
final String d="常量"; //常量
}
(2)局部变量:在方法内部或一小段代码中定义的变量。方法内定义的变量在整个方法内有效,而循环内定义的局部变量只在循环内有效。如:
public class Variable{
public static void method{ //定义了一个method方法
int a=1;
int b=2; //变量a,b的作用域为method方法内
for(i=0;i>9;i++){ //变量i由于实在循环块中定义的,所以其作用域仅为整个for循环
a++;
b--;
}
}
}
注意:局部变量在定义时,系统不会赋默认值。
(3)方法参数:作用域是整个方法(与局部变量相同,只不过定义的位置不同,方法参数定义在形参表中,而局部变量则定义于方法体内)。如:
public class Variable{
public void method(int a){
a++;
} //方法参变量在整个方法内有效
}
(4)异常处理参数:与方法参数作用类似,其作用范围是catch后面跟随的异常处理块。
-
变量的作用域举例
public class Scope{
int x=1; //成员变量x
int y; //成员变量y
public void method(int a){ //方法参变量a
int x=8; //局部变量x,将成员变量x隐藏
for(int i=1;i<a;i++) //控制循环体的局部变量i
y++;
System.out.println("x="+x+",y="+y+",a="+a);
}
public static void main(String[] args){
Scope x=new Scope(); //方法内定义的局部变量
x.method(6);
}
}
【运行结果】
x=8,y=5,a=6
类变量和静态方法
用static修饰符修饰的属性是仅属于类的静态属性,相应的成员变量变量也称类变量或静态变量。
-
类变量的访问形式
-
类变量可以通过类或对象名作前缀来访问,在本类中可以直接以变量名访问。
-
静态变量在存储上归属类空间,不依赖如何对象,通过对象来访问静态变量实质上还是访问类空间的那个变量。因此,类变量的值时统一的,对于同一类变量,如何地方对其值修改,其他地方的类变量也会随之修改为相同值。
-
静态方法
用static修饰符修饰的方法叫静态方法。可通过类或对象访问。在静态方法的方法体内,可以处理类变量,也可以访问其他静态方法,但绝不能访问如何归属对象空间的变量或方法(即非静态变量或方法)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)