类与对象概述
在Java语言中,类与对象是非常重要的组成部分,类可以看做是对象的载体,它定义了对象所具有的功能,对象依附于类而存在。
对象
对象是对事物的实例化,例如 人、鸟、电脑、手机等。这些都可以是看作是一个对象。
通常对象会被分为两部分,静态部分与动态部分。
静态部分就是一个事物必然拥有的部分,这个部分被称为属性,任何对象就会有属性。
而动态部分就是一个事物特有的部分,这个部分被称为行为,行为可以是对象独有的,也可以是都有的。
例如:
//学生类
public class Student{
//这些就是属性,是每一个学生都有的部分
String name; //姓名
int age; //年龄
char gender; //性别
//这个就是行为,每个学生的特长不一定都相同
public void specialty(String swil){
}
}
如果将大雁看作是一个对象的话,那么大雁会具有那些属性与方法呢?
图示
对象的创建
在Java中使用new操作符,调用构造方法创建对象。
如果有多个构造方法,new 操作符会根据构造方法传入的形参来自动调用相应的构造方法。
类名 对象名 = new 构造方法(无参/有参);
Book bk=new Book(); //创建一个对象,使用空参构造
Book bk_2=new Book("Java程序设计"); //创建一个对象,使用有参构造
对象属性与行为的访问
上述已说明对象拥有属性与行为,那么对象的属性与行为该怎么访问呢?
在使用 new 操作符创建一个对象后,可以使用 对象.成员 的方法来使用对象的属性与行为。
例如
public class Main{
public static void main(String[] args){
Student s1=new Student(); //使用空参构造创建一个方法
//给创建的对象属性赋值
s1.name="小明";
s1.age=18;
s1.gender='男';
//使用对象的属性
System.out.println(s1.name);
}
}
//学生类
class Student{
//这些就是属性,是每一个学生都有的部分
String name; //姓名
int age; //年龄
char gender; //性别
//这个就是行为,每个学生的特长不一定都相同
public void specialty(String swil){
}
}
类
前面已经简略介绍过对象的概念了,对象是类的实例化,而类是对象的载体。
那么以下我们来总结一下,一个类中的组成。
成员变量
在Java中,对象的属性就是成员变量的方式存在的。
public class Book{
//成员变量
private String name; //书的属性
//行为
public void setName(String Name){
//为属性赋值
this.name=Name;
}
public String getName(){
//获取属性值
return this.name;
}
}
其实成员变量就是普通的变量,只不过用来表示了类的属性。在创建成员变量时,可以为成员变量设定初始值,如果设定初值的话,会有默认值。如果在创建成员变量时,给定了默认值,那么在本类创建的所有对象,在没有修改这个成员变量的值前,所有对象的成员变量都是这个给定值。
成员方法
在Java中使用成员方法来对应类对象的行为。以上述的Book类为例。
它包含了两个成员方法,一个是设置图书的名称,一个是获取图书的名称。
定义成员方法的格式
权限修饰符 返回值类型 方法名(参数类型 参数名){
//方法体
return 返回值;
}
成员方法的定义,其实与方法的定义没区别,只不过成员方法是对应着类对象的行为。
权限修饰符
权限修饰符用于控制外界对类或类中的事物的访问。
Java提供了三种权限修饰符,分别是:public、private、protected。这三种权限修饰符控制着外界对被修饰事物的访问。
该图片来自网络,侵删。
特别说明,如果类或方法或成员变量前没有加任何权限修饰符,那么就是默认权限default。
局部变量
定义在方法内部的变量称为局部变量。局部变量的定义和使用,与普通的变量一致。
public class Array{
//交换数组中两个下标的值
public void swap(int[] arr,int left,int right){
//此时 temp 就是一个局部变量
int temp=arr[left];
arr[left]=arr[right];
arr[right]=temp;
}
}
局部变量在方法被执行时创建,在方法结束时销毁。局部变量在使用前必须进行赋值或者初始化。
局部变量的有效范围
如果把一对{}大括号看作一个方法的话,那么局部变量的作用域在定义后,直至{}大括号结束。
图示
this关键字
this关键字只能在本类中使用。
this关键字表示对象当前调用者的地址。
public class Main {
public static void main(String[] args) {
//创建一个Array类的对象,对象名为a1
Array a1=new Array();
a1.show();
System.out.println(a1); //输出对象地址值
}
}
// 定义一个Arra类
class Array{
public void show(){
//输出 调用者对象的地址
System.out.println(this);
}
}
结果如下
例如:以下代码得运行结果是什么呢?
public class Main {
public static void main(String[] args) {
Array a1=new Array();
a1.showNum();
}
}
class Array{
private int num=100;
public void showNum(){
int num=-100;
System.out.println("第一个数:"+num);
System.out.println("第二个数:"+this.num);
}
}
因为this关键字代表着对象当前调用者的地址,所以this.num 等价于 Array.num。
输出结果
类的构造方法
在类中,除了成员方法之外,还有一类特殊的方法,就是构造方法。构造方法是一种于类同名的方法。
在一个类创建对象时,虚拟机会根据形参,自动调用构造方法,来初始化对象。
构造方法没有返回值,且构造方法的名称要与本类同名。同时满足这两点才是一个构造方法。
无参构造与有参构造
这里的有参与无参,指的是有无形参。
public class Book{
private String name;
//无参构造
public Book(){
}
//有参构造
public Book(String Name){
this.name=Name;
}
}
特别注意:无参构造不需要我们自行编写,虚拟机会自动加上,但是如果我们编写了有参构造的话,那么此时虚拟机不会自行添加无参构造,需要我们自行编写。
静态变量与静态方法
使用static关键字修饰的方法或者变量称为静态的。
被static修饰的变量与方法,地址被放置于静态区内,在类文件执行时,会自动调用这块区域,且只会执行一次。
静态方法与变量可以直接使用 类名.静态成员 的方式调用。
静态关键字使用注意点
- 在静态方法中不可能使用this关键字
- 静态方法只能调用静态方法,非静态方法调用所有
- 局部变量不可以使用static关键字声明
- 主方法必须使用static声明
- 所有类,只有内部类可以使用static关键字声明
结尾
上述就是有关Java类与对象章节的总结了,写的可能不是很好,如有表达错误的地方,望各位指出。