面向对象
面向对象思想: 这是一种符合我们思考习惯的思想,可以将复杂的事情简单化,让我们从执行者变成了指挥者
类是一个模版,对象就是模版做出来的东西,比如类是学生,对象是张三
类由成员变量和成员方法组成
成员变量:和之前学习的变量是一样的,但有两个小区别:一、他的位置在类中,方法外 二、成员变量不需要初始化值也可以使用,因为有默认值
成员方法:和之前不一样的是去掉了修饰符中的static关键字
学生类的例子
public class Student {
String name;
int age;
public void study(){
System.out.println("Study");
}
public void eat(){
System.out.println("Eat");
}
}
创建对象
类名 对象名 = new 类名()
示例
class hello {
public static void main(String[] args) {
Student st = new Student();
st.age = 30;
System.out.println(st.age);
st.eat();
}
}
一个对象的内存图
两个对象的内存图
两个引用指向同一个对象
成员变量和局部变量的区别
- 成员变量在类中,方法外;局部变量在方法中或者方法申明上(形式参数)
- 在内存中位置不同:成员变量在堆内存,局部变量在占内内存
- 生命周期不同:成员变量随着对象的创建而存在,消失而消失;局部变量随着方法的调用而存在,随着方法的调用完毕而消失
- 初始化值的不同:成员变量有默认值;局部变量没有默认值必须先定义赋值,然后使用
Private关键字
是一个修饰符,可以修饰成员变量和成员函数,只能在本类中被访问
案例:
public class Student {
String name;
private int age;
public void age(int a){
age = a;
System.out.println(age);
}
}
Private修饰后的标准类代码
public class Student {
private String name;
private int age;
public void setName(String n){
name = n;
}
public String getName(){
return name;
}
public void setAge(int a){
age = a;
}
public int getAge(){
return age;
}
}
封装
把不需要对外提供的内容隐藏起来,把属性隐藏,提供公共方法对其访问
好处:通过方法来控制成员变量的操作,提高代码的安全性
把代码进行封装,提高了代码的复用性
this关键字
为了代码见名知义
如果局部变量名称和成员变量名一致,计算机采用就近原则
this解决成员变量被隐藏的问题
public class Student {
private String name;
private int age;
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
}
构造方法
用于给对象数据初始化
public class Student {
public Student(){
System.out.print("construction");
}
}
如果给出了构造方法,系统将不会提供默认的构造方法,这时候就需要我们自己写无参构造
构造方法也是可以重载的
public class Student {
private String name;
private int age;
public Student(){
}
public Student(String name){
this.name = name;
}
public Student(int age){
this.age = age;
}
public Student(String name, int age){
this.age = age;
this.name = name;
}
}
标准的学生类案例:
public class Student {
//成员变量
private String name;
private int age;
//构造方法
public Student(){
}
public Student(String name, int age){
this.age = age;
this.name = name;
}
//成员方法
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
}