一.面向对象思想
- 基于过程思想:给一个需求,通过分析需求,然后一步一步的去实现,完成一个功能的具体步骤.
面向对象思想:创建对象,使用对象调用功能!(主要:对象)
举例:
面向过程:
打水:自己打水—>拿起杯子—>走到打水的地方—>打水
面向对象:
打水:让别人给我打水(只管水给我就可以了)—->喝水 在用面向对象思想体现的时候,我们应记着三个规则,更符合面向对象思想:
- 首先分析有那些类
- 接着分析每个类应该有什么
- 最后分析类与类的关系
面向对象开发:就是不断的创建对象,使用对象,指挥对象做事情.
面向对象设计:就是在管理和维护对象之间的关系.
面向对象特征:
封装(encapsulation)
继承(inheritance)
多态(polymorphism)
二.类与对象及其使用
类:是一组相关的属性和行为的集合
- 借助事物理解类:
事物是现实世界里面的一些具体的东西.
描述一个事物:学生:姓名,年龄,性别 学习,打游戏
描述事物的属性:姓名,年龄,性别
描述事物的行为:学习,打游戏
一个事物转换成类:`学生事物:属性:姓名,年龄,性别 行为:学习,打游戏`
学生类:
属性在类中叫成员变量:name,age,gender
行为在类中叫成员方法:study(),playGame() - java中最基本的单元是类
- 借助事物理解类:
对象是该类事物的具体体现
例如:上述学生类的对象:班长,张三,李四….
创建对象:类名 对象名 = new 类名() ;
使用对象名去访问成员变量,成员方法:对象名.成员变量/对象名.成员方法
//创建一个学生类
class Student{
//成员变量
String name;
int age;
char sex;
//成员方法
public void playGames(){
System.out.println("打游戏");
}
public void study(){
System.out.println("学习");
}
}
//学生类的测试类
public class Demo1 {
public static void main(String[] args){
//创建对象
Student a = new Student();
//访问成员方法
a.playGames();
a.study();
//访问成员变量
a.name = "张三";
a.age = 20;
a.sex = '男';
System.out.println(a.name+" "+a.age+" "+a.sex);
}
}
三.成员变量和局部变量的区别
在类中的位置不同
成员变量:类中方法外
局部变量:方法内或者方法声明上在内存中的位置不同
成员变量:堆内存
局部变量:栈内存生命周期不同
成员变量:随着对象的存在而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失初始化值不同
成员变量:有默认的初始化值(int->0,引用类型->null)
局部变量:没有默认的初始化值,必须先定义,赋值,才能使用。注意:当局部变量和成员变量名称一致时就近原则
//定义一个基本类
class Num{
//定义成员变量:类中方法外
int num = 100;
//定义一个成员方法
public void show(){
//定义局部变量:方法声明上/方法定义中
int num1 = 200;
System.out.println(num1);
//局部变量和成员变量同名,就近原则
int num = 300;
System.out.println(num);
}
}
public class Demo1 {
public static void main(String[] args){
//创建Num类的对象
Num a = new Num();
System.out.println(a.num);
a.show();
}
}
四.匿名对象
- 匿名对象:没有名字的对象
- 调用:执行一次,不适合多次调用
- 匿名对象可以作为参数传递
//创建一个学生类
class Student1{
public void show(){
System.out.println("学习");
}
}
class StudentDemo{
//将匿名对象作为形参
public void method(Student1 s){
s.show();
}
}
public class Demo2 {
public static void main(String[] args){
//创建一个有对象名的对象
Student1 a = new Student1();
a.show();
a.show();//这个对象将show调用两次
//匿名对象调用show
new Student1().show() ;
new Student1().show() ;//重新创建了一个对象,堆内存中产生内存空间
StudentDemo b= new StudentDemo();
//匿名对象作为参数
b.method(new Student1());
//链式编程
new StudentDemo().method(new Student1());
}
}