一、类和对象的概念
JAVA中的类和对象类似于c语言中的结构体,都是自定义类型。
区别在于,类中是可以存放方法(函数)的,而c语言中的结构体只能存储变量
类,是自己创建的类型。里面可以存放很多变量、方法、代码块。类是对象的模板
创建了类后,就可以以类为模板创造对象。这个过程我们也可以叫做类的实例化。
用同一个类创建多个对象时,这几个这几个对象中存储的变量数、变量名称、方法数即方法名称都是相同的,但它们当中存储的数据不同
二、类的创建
在JAVA中,我们可以用class关键字创建一个新的类
这样我们就创建好了一个新的类,这个类的名称是Student。
接下来,我们为这个Student类中加入一些变量
现在Student类中有了姓名、年龄、体重、成绩这几个变量了
三、创建对象
只有类是不够的,类只是一个模板。真正能存储数据的,是对象。
现在我们创建一个类型为Student的对象
我们创建了一个类型为Student,名称为student的对象。现在我们可以在这个对象中存储数据了
当我们要操作对象中的变量或方法时,我们使用: 对象名.变量名
四、类的成员方法
类中可以有变量,也可以有方法
这里定义了一个test方法,它的功能是输出某某某正在考试,然后随机生成一个100以内的成绩,并赋值给当前对象的grade变量。
这里的this就是当前对象的意思。假设有多个Student类型的对象,那么哪个对象调用的test,这里的this就指那个对象
我们看看调用test方法的结果
test方法成功地将student对象中的grade赋值为了97
五、类的构造方法
构造方法,是类中一种比较特殊的方法
1、构造方法是没有返回值的
2、构造方法的调用时机也比较讲究,只能在实例化对象时调用
3、构造方法的方法名必须 与当前类的类名相同
构造方法实际上就是,在创建对象时可以同时对对象进行初始化的方法
接下来我们为Student类创造一个构造方法
这就是一个构造函数,我们可以通过它来初始化函数
这是构造函数的用法,即在创建变量时的括号内,按顺序写入要初始化的变量值
构造函数也是可以重载的,比如我们可以创建一个不带变量的构造函数
实际上,每次实例化对象时,都一定要使用构造函数的。
那我们之前没有构造函数,实例化对象时,编译器为什么不报错呢?
原因是:当我们自己连一个构造函数都没有写的时候,编译器会为我们写一个没有参数的构造函数。这个构造函数是隐藏的,也没有实际作用。但它可以解决没有构造函数无法通过编译的问题
六、类的封装
类和对象有一个三个很重要的性质,分别是:封装、继承、多态
在这个博客里,我们先讲封装
封装,顾名思义,就是将类中的某些东西封存起来,不让外界使用
我们可以使用private关键字对类中的变量或方法进行封装
当我们之前在对象中创建变量时,前面总有一个public关键字
public:公共的, private:私人的
这两个关键字是相对的,用public修饰的变量或方法,在程序的任何地方都可以访问。用private修饰的变量,只有在类和对象的内部才可以访问。
这样我们就将Student类中的这几个变量封装起来了。
当我们再次企图在外界访问这几个变量时:
编译器报错了,外界是没有这几个变量的访问权限的。
如果我们还是想修改或取出这几个变量中存储的数据,可以用创建成员方法的方式。
这两个成员函数,一个可以用来修改age中存放的值,一个可以用来取出age中存放的值
七、static修饰变量和方法
static用于修饰类中的变量和方法,可使变量和方法成为静态的
通俗点来说,static修饰的变量,不是属于某个对象的,而是属于类的,是所有该类型的对象 所共有的。
当我们要访问static修饰的变量或方法时,一般通过: 类名.变量名
需要注意的是,静态的方法中只能使用静态的变量,不能使用非静态的变量。
因为非静态的变量是存在与对象中的,而静态的方法是由类来调用的,此时没有对象存在。
了解了static关键字后,我们或许可以理解Arrays和Scanner在使用时的差异了
Scanner中的nextInt方法在用时需要实例化一个Scanner类的对象,然后通过对象使用
而Arrays中的toString方法只需要通过类名使用就可以
这正是因为:nextInt方法是非静态方法,而toString方法是静态方法