类和对象
类(Class):
类是对一类具有共同属性和行为的事物的抽象,类是对象的模板,是Java程序的基本组成单位;
-
属性:同一类事物的共同特性; ==> 类的属性所对应的就是成员变量;
如:人有年龄、身高、姓名等属性;
-
行为:同一类事物拥有的相同的行为; ==> 类的行为所对应的就是非静态的方法;
如:人有吃饭、睡觉等行为;
对象(Object):
对象包含属性和行为,对象是类的具体实例;
类和对象的关系:
类是对象的模板,是创建类的蓝图;对象是类的具体实例;
注意:
一个类文件中可以定义多个类,但是由public修饰的只能有一个;
ps:如果有不正确之处,望各位看官不吝赐教,毕竟我还是菜鸟
类的定义
成员变量:
在类中方法外声明创建的变量叫做成员变量;
局部变量:
在方法中或方法的声明中创建的变量叫做局部变量;
成员方法:
在类中定义的且没有用static修饰的方法叫做成员方法;
示例:
public class Student {
// 成员变量
String name;
int age;
// 成员方法
public void show(String name, int age) {
System.out.println(name + "," + age);
}
}
成员变量与局部变量的区别:
-
默认值:成员变量声明后不初始化系统会为其自动赋默认值;而局部变量必须声明赋值之后才能使用;
-
基本数据类型:
整数:0
浮点数:0.0
布尔类型:false
字符:\u0000
-
引用数据类型:null
-
-
定义的位置:成员变量在类中方法外定义,而局部变量在方法中或方法的声明中定义;
-
在内存中的位置:
- 局部变量:在栈中,当方法调用的时候,局部变量定义成功,当方法执行完成之后,局部变量消失;
- 成员变量:在堆中,是跟着对象的。当对象创建成功之后,成员变量定义,当对象消失,成员变量消失;
-
生命周期:局部变量随着方法的调用而产生,随着方法的完成而结束,而成员变量随着对象的创建而产生,随着对象的消失而消失;
构造方法
构造方法的作用:
用来创建并初始化对象;
构造方法的定义:
修饰符 类名(形参) {}
构造方法的特点:
- 构造方法没有返回类型;
- 构造方法的方法名与类名相同;
- 构造方法与普通方法一样可以重载;
注意:
- 如果在没有手写构造方法时,系统会默认为我们添加一个无参构造方法;
- 如果我们手写了带参数的构造方法,没有写无参构造方法,系统就不会再为我们添加一个无参构造方法,如果此时调用无参构造方法创建对象,会报错;
示例:
public Student() {} // 无参构造器
public Student(String name, int age) { // 带参构造器
this.name = name;
this.age = age;
}
对象的创建:
类名 对象名 = new 类名(参数);
等式右边的
类名(形参)
对应的是具体的构造方法,如果需要调用带参构造方法就需要进行传参;如果不需要传参则调用无参构造方法,注意这里一定要有无参构造方法,否则报错!
封装
封装:
把对象的属性和行为结合在一起形成一个独立单元,把内部实现细节隐藏起来,通过公共方法来向外暴露该对象的功能;
好处:
通过方法来控制成员变量的操作,提高了代码的安全性,把代码用方法进行封装,提高了代码的复用性;
那么,如何将内部实现细节隐藏起来呢?Java中提供了访问权限修饰符和set/get方法来进实现!首先介绍一下访问权限修饰符:
访问权限修饰符:
访问权限修饰符的目的就是为了有效的控制成员变量和方法可以在哪里能够被访问到;
-
private:私有的,被它修饰的成员变量和方法只能被当前类访问;(类)
-
protected:被保护的,被它修饰的成员变量和方法可以被当前内访问,也可以被同一个包下的其他类及该包下的子类访问,还可以被其他包中的子类访问;(子类)
-
public :公共的,被它修饰的成员变量和方法可以被该项目下的任何类访问;(项目)
-
default:默认的,当不写任何修饰符的时候就是默认的,它可以被当前类访问,也可以被同一个包中的其他类访问;(包)
当成员变量被private修饰的时候,其他类就不能在通过
对象.成员变量
的方式进行修改和访问成员变量,这个时候就需要用到set、get方法来进行访问成员变量,set方法用来修改成员变量,get方法用来访问成员变量;
set、get方法:
本质就是一组成员方法,只是他们的功能就是用来操作成员变量;
示例:
public void set(String name) { // set中需要声明修改的形参
this.name = name;
}
public String get() { // get中一般不写形参
return name;
}
上面所说的公共方法就是由public所修饰的一类成员方法,用来表示该对象的功能!例如:人的睡觉、吃饭功能;
this关键字
作用:
-
用来区分成员变量和局部变量;
-
this关键字用来指向当前对象,谁调用它,它就指向谁;
-
this关键字还能用来调用构造方法,但是只能用在构造方法中,且必须是构造方法的第一句话;
示例:
public Student(String name) { // 这里成员变量和局部变量同名,通过this来区分,this所访问的 // 都是成员变量
this.name = name; // 将局部变量的值赋给成员变量
}
public Student(String name, int age) {
this(name); // 必须放在构造方法的第一句,这里调用上面的构造方法
this.age = age;
}