面向对象思想的介绍
面向过程:
他是编程的一种高级思想,主要强调的是做事的过程。什么事都得亲力亲为,最终得到结果。
典型的编程语言:C语言 。
面向对象:
他是编程的一种高级思想,主要强调的是对象,也就是谁来做事情,不关注过 程。关注谁做事 情并得到结果即可。
典型的编程语言:Java、C#。
举例子:
洗衣服:
面向过程: 准备盆,倒水,放衣服,到洗衣液,开搓,涮一涮,拧干,晾出去。
面向对象: 找一个女朋友,直接把衣服给女朋友,最后直接拿到干净的衣服 。
好处: 1、符合人的思想理念 2、把复杂的事情简单化 3、把执行者变为指挥者 。
特征: 封装、继承、多态。
类
概述:
java是一门面向对象的编程思想的语言,java就要使用这种思想,类就是java中对面向对象思想使用的一种表现形式。java中用来对事物的特征和行为的描述的集合体就叫做类。
理解:
类是java用来创建事物的,java是对现实生活的体现,现实生活中有的事物,
java也想有,就使用类描述事物出来,java中就有这个事物。
比如:
java中想要有女人这个事物,需要使用类描述女人事物的特征和行为。
内容组成:
1、属性 【代码使用变量来体现属性】
2、行为 【代码使用方法来体现行为】
3、构造方法【属于方法,有自己独有的格式】
创建类:
格式:
修饰符 class 类名 {
类的内容
}
格式解释:
修饰符 :限定类被使用的权限。
class:关键字 就是表示类
代码示例:
public class Person {
// 属性【特征】
String name;
int age;
String gender;
// 行为 【普通方法】
public void work() {
System.out.println("为了生活天天敲代码");
}
// 构造方法 【系统默认有】
}
注意 : 类是抽象的概念。
对象
概述:
对象就是对类的实例化,对象特征和行为都有具体的值,他是对类的属性具体体现,一个类可以有多个对象类是对象的一种模板,对象是类的实例【类和对象的关系】 。
对象的创建:
类名 对象名 = new 类名(实参)
例如:
Scanner sc = new Scanner(System.in);
对象的使用:
属性:
对象名.属性名 (获取属性名 )。
对象名.属性名 = 新属性值(修改属性值 )。
行为:
对象名.方法名(实参);。
注意:
1、类和对象是java用来体现面向对象思想的表现形式。
2、对象的使用建立在的对应类存在的基础上。
3、哪里使用对象就在哪里创建。
代码示例:
public class TestPerson {
public static void main(String[] args) {
// 想要使用Person这个事物 就得创建事物的对象
Person p1 = new Person();
// p1就是Person事物的一个具体的对象 【类对象】
// 使用p1对象的属性值
System.out.println(p1.name);// null
System.out.println(p1.age);// 0
System.out.println(p1.gender);// null
p1.name = "金莲";
p1.age = 18;
p1.gender = "人妖";
System.out.println(p1.name);// 金莲
System.out.println(p1.age);// 18
System.out.println(p1.gender);// 人妖
// 行为的使用
p1.work();// 为了生活天天敲代码
}
}
案例示例:
描述一个动物类 属性:科目 名字 颜色 行为:逛街 吃 在测试类中创建一个对 象 猫科动物 叫lili 黑色 分别输出这个对象的属性值,并调用它的方法 。
public class Animal {
// 属性:
String subject;// 科目
String name;// 名字
String color;// 颜色
// 行为
// 逛街
public void goShopping() {
System.out.println("现在的动物会逛街,主要还不用花钱");
}
// 吃
public void eat() {
System.out.println("动物天生是吃货");
}
}
测试类:
public class TestAnimal {
public static void main(String[] args) {
// 创建Animal的对象
Animal animal = new Animal();
// 修改值
animal.subject = "猫科动物";
animal.name = "lili";
animal.color = "black";
// 输出属性的值
System.out.println(animal.subject);
System.out.println(animal.name);
System.out.println(animal.color);
// 调用对象的行为
animal.goShopping();
animal.eat();
}
}
构造方法
概述:
是类的内容之一,只要作用是用来创建对象,并给对象的属性值赋值的。
格式:
修饰符 类名(参数列表){
方法体
}
特点:
1、描述的类中没有书写任何的构造方法,系统偷偷的补充一个空参构造方法。如果提供了构造,系统不会补充任何的构造 。
2、没有返回值类型。
3、方法名和类名必须一。
4、构造方法是jvm调用的。
代码示例:
public class ConstructorDemo {
// 属性
String name;
int age;
// 一般情况 只提供满参和空参就够了
public ConstructorDemo(String name, int age) {
super();
this.name = name;
this.age = age;
}
public ConstructorDemo(String name) {
super();
this.name = name;
}
public ConstructorDemo(int age) {
super();
this.age = age;
}
//空参构造
public ConstructorDemo() {
super();
}
}
创建对象的内存理解
一个对象的创建内存理解
对象资源使用的内存理解图
两【多】个对象的创建内存理解图
两【多】个变量指向同一个对象
两个变量指向同一个对象指的的两个变量中存放的是同一个对象的地址值
Person p = new Person();
Person p1 = p;
成员变量和局部变量的比较【面试题】
成员变量:
类描述的属性 属于对象的空间中存放属性值的变量 定义在类中方法外的变量。
局部变量: 定义在方法中的变量 。
区别:
1、定义位置不同: 成员变量:类中方法外 局部变量:方法中 。
2、内存空间位置不同: 成员变量:堆内存的对象空间中 局部变量:栈内存中 。
3、生命周期不同: 成员变量:随着对象的创建而创建 随着对象的消失而消失 局部变量:随着方法的调用而创建,随着方法结束就消失。
4、默认值不同: 成员变量:有默认值。
默认值根据数据类型获取:
基本数据类型: 整数类型:0
浮点类型:0.0
字符类型:’\u0000’
布尔类型:false
引用数据类型:null
局部变量:没有默认值
变量的访问原则
原则: 就近原则。
注意: 全局【成员】变量和局部变量定义不同所以可以出现同名的变量
使用原则:
1、就近原则 。
2、在方法中指定使用全局的变量使用关键字this来区分。
this: 代表当前调用对象 本身不是一个固定的对象,谁来调用所在的资源代表谁 。
代码示例:
public class VariableDemo {
// 成员变量【全局变量】
static int a = 100;
static int b = 200;
public static void main(String[] args) {
// 局部变量
int a = 500;
int c = 400;
// 使用变量
System.out.println(a);// 500 就近原则
VariableDemo demo = new VariableDemo();
System.out.println(demo.a);// 500 就近原则
System.out.println(b);// 200
System.out.println(c);// 400
}
public void show() {
int a = 1000;
System.out.println(a);
System.out.println(this.a);
}
}
public class TestVariableDemo {
public static void main(String[] args) {
VariableDemo variableDemo = new VariableDemo();
variableDemo.show();// this 代表的是variableDemo
VariableDemo variableDemo1 = new VariableDemo();
variableDemo1.show();// this 代表的是variableDemo1
}
}
匿名对象
概述:
创建了一个对象,直接使用了,没有赋值给变量的对象就是匿名对象。
特点:
匿名对象只能使用一次。
好处: 提升代码的运行效率 。
使用场景: 只使用一次对象时候 。
格式:
new 类名(实参);
代码示例:
public class TestVariableDemo {
public static void main(String[] args) {
// 有名的对象
VariableDemo variableDemo = new VariableDemo();
variableDemo.show();// this 代表的是variableDemo
// 有名的对象
VariableDemo variableDemo1 = new VariableDemo();
variableDemo1.show();// this 代表的是variableDemo1
// 匿名对象
new VariableDemo().show();
System.out.println(new VariableDemo().a);
}
}