1.面向对象介绍
面向: 拿,找
对象: 能干活的东西
因此,所谓---面向对象编程: 拿东西过来做对应的事情
2.设计对象并使用
(1)类和对象
用人话说就是: ●类(设计图)---是对象共同特征的描述 ●对象---是真实存在的具体东西
//定义一个类---(比如我们现在定义学生)
public class student {
//属性(成员变量)---(学生的一些信息)
String name; //名字
double height; //身高
int age; //年龄
//行为(方法)---(学生可以做的一些事情)
public void study() {
System.out.println("学习");
}
public void fall_in_love() {
System.out.println("谈恋爱");
}
}
public class Main {
public static void main(String[] args) {
//创建一个对象---(因为上面我们已经定义了学生这种类,因此现在可以创建一个具体的对象)
student s = new student(); //格式: 类名 对象名 = new 类名();
//使用一个对象---(我们现在就可以访问这个对象的属性与行为)
s.name = "彭于晏";
s.height = 180.0; //访问属性的格式: 对象名.成员变量
s.age = 18;
s.study(); //访问行为的格式: 对象名.方法(...);
s.fall_in_love();
}
}
(2)类的几个补充注意事项
●用来描述一类事物的类,专业叫做: JavaBean类 (在Javabean类中是不写main方法的)
●在以前我们编写main方法的类,叫做测试类,我们可以在测试类中创建Javabean类的对象 并进行赋值调用
●成员变量的完整定义格式为: 修饰符 数据类型 变量名 = 初始化值;一般无需指定初始化 值,存在默认值(0 / 0.0 / false / null) (这个修饰符下面会讲到)
3.封装
(1)什么是封装
●告诉我们,如何正确设计对象的属性和方法
●原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为
(2)理解封装思想的好处
●让编程变得很简单,有什么事,找对象,调方法就行
●降低学习成本,不用记对象有哪些方法,有需要去找就行
(3)private关键字
●是一个权限修饰符(修饰符它来了)
●可以修饰成员(成员变量和方法)
●被private修饰的成员只能在本类中才能访问
public class Student {
private int age;
//为什么要用private修饰成员呢?
//因为如果不修饰,在测试类中就可以对其赋值了,但如果赋的值及其离谱咋办
//这个private修饰符就是为了避免这样
//但有了private又该如何赋值呢?就要用到set方法和get方法了
//set(赋值)
public void setAge(int a) {
if (a >= 18 && a <= 22) {
age = a;
} else {
System.out.println("数据离谱!!!");
}
}
//get(获取)
public int getAge() {
return age;
}
}
public class Main {
public static void main(String[] args) {
Student s = new Student();
s.setAge(19);//赋值
int age = s.getAge();//获取
System.out.println(age);//打印结果 19
}
}
4.this关键字
public class Student {
private int age = 20; //成员变量
public void one () {
int age = 10; //局部变量
System.out.println(age);//会打印多少呢? 10 为什么?(就近原则!!!)
System.out.println(this.age);//会打印多少呢? 20 为什么?(this关键字的作用)
}
}
5.构造方法
(1)构造方法的作用:
●创建对象的时候,由虚拟自动调用,给成员变量进行初始化的
(2)构造方法有几种,各自作用:
●无参数构造方法: 初始化对象时,成员变量的数据均采用默认值
●带所有参数构造方法: 初始化对象的同时可以为对象进行赋值
(3)构造方法有哪些注意事项?
●任何类定义出来,默认就自带了无参数构造方法,写不写都有
●一旦定义了有参数构造方法,无参数构造方法就没有了,此时需要自己写无参数构造方法了
● 建议在任何时候都手动写上空参和带全部参数的构造方法
public class Student {
private int age;
private String name;
private double height;
public Student() {
//空参构造方法
}
public Student(int age,String name,double height) {
this.age = age;
this.name = name;
this.height = height;
//带全部参数的构造方法
}
}
public class Main {
public static void main(String[] args) {
Student s = new Student(18, "彭于晏", 180.0);
//创建对象的时候,由虚拟自动调用,给成员变量进行初始化的
}
}
注意: 我们前面好像学了set这个方法就是赋值用的吧,那是不是现在学了构造方法,可以在创建对象的同时就给成员变量赋值了,是不是就说明set没用了呢?其实不然,如果我们要通过键盘输入一个值来赋给成员变量的时候该怎么办呢?很显然,就要用到我们的set了,因为构造方法是在创建对象的同时直接赋值的,与通过键盘输入的形式赋值是完全不符的
6.标准JavaBean![](https://img-blog.csdnimg.cn/direct/4904a837c9c2488292d4dc2046126836.jpeg)
7.对象内存图
这个看网课比较好(P87~89)
8.补充:成员变量与局部变量
区别 | 成员变量 | 局部变量 |
类中位置不同 | 类中,方法外 | 方法内,方法申明上(形参) |
初始化值不同 | 有默认初始化值 | 没有,使用之前要先赋值 |
内存位置不同 | 堆内存 | 栈内存 |
生命周期不同 | 随着对象的创建而存在,随着对象的消失而消失 | 随着方法的调用而存在,随着方法的运行结束而消失 |
作用域 | 整个类中有效 | 当前方法中有效 |