面向对象
面向对象(Object Oriented)是软件开发方法,一种编程范式。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。
面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。
-
对象
- 万物皆对象,客观存在的事物都是对象
-
类
-
什么是类
类定义了一种抽象数据类型
类就是模板,确定对象将会拥有的特征(属性)和行为(方法)
-
类的特点
- 类是对象的类型
- 具有相同的属性和放到的一组对象的集合
-
-
什么是对象的属性
属性:对象具有的各种特征,每个对象的属性有具有特定的值,可以理解为对某类事物的描述
例如:狗类
属性:品种、尺寸、颜色、年龄
注意:对象的属性既具有默认值,这个默认值与相对的类型相关
数据类型 默认值 byte 0 short 0 int 0 long 0 double 0.0 float 0.0 char 空字符 boolean false String null -
什么是对象的行为
方法:对象执行的操作
-
类和对象的关系
6.类是对象的抽象,仅仅是一个模板,在现实世界中是不存在的;而对象是具体的实例,是类这个模板的具体实例。
成员变量 在类中定义,用来描述对象将要有什么
局部变量 在类的方法中定义,在方法中临时保存数据
同名变量的不同
局部变量的特点:
在同一个方法中,不允许有同名的局部变量
在不同的方法中,可以有同名的局部变量
static 是静态修饰符有方法中有static是静态方法,没有则是非静态方法。
static 也可以修饰属性,成员变量
成员变量和局部变量的区别
1、)作用域不同
局部变量的作用域仅限于定义它的方法,也就是在方法内使用
成员变量的作用域在整个类内部都是可见的,在类中所有方法都可以使用
2、)初始值不同
成员变量有默认的初始值
局部变量没有默认的初始值,必须自行设定初始值
3、)存储位置不同
成员变量是在对象创建以后存在于堆中,对象回收时,成员变量消失,方法调用结束后,值就消失了
局部变量是在方法的创建被调用的存在于栈中称为:方法栈,方法调执行结束,从栈中清除
对象的创建而创建,对象回收时,成员变量消失,随着方法的调用被创建,方法执行结束,从栈中清除。
用测试类调用方法,测试结果
public class Variable {
// 成员变量可不赋值,有默认的初始值
public int count;
public int x;
public static int y;
//无修饰符
public void fun01() {
//局部变量,没有默认的初始值,必须自行设定初始值
int a = 10;
//输出结果就是10
System.out.println("fun01()中a的值 >>> " + a);
}
public void fun02() {
int a = 20;
//输出结果就是20
System.out.println("fun02()中a的值 >>> " + a);
}
public void fun03() {
int a = 30;
//局部变量没有默认的初始值,必须自行设定初始值
注意 int b;// 报错 java: 可能尚未初始化变量b The local variable b may not have been initialized
// System.out.println("fun03()中b的值 >>> " + b);
System.out.println("fun03()中a的值 >>> " + a);
}
public void fun04() {
//调用成员变量是int类型,会输出0,因为成员变量有默认的初始值
System.out.println("成员变量count的值 >>> " + count);
}
public void fun05() {
//调用成员变量是int类型,现在会输出0,注意后面有++ 所以会+1,先输出后++
System.out.println("成员变量count的值 >>> " + count++);
}
public void fun06() {
//调用成员变量是int类型,现在会输出2,注意前面有++ 所以先会+1,在输出值得到2
System.out.println("成员变量count的值 >>> " + ++count);
}
public void fun07(){
System.out.println("非静态成员变量x的值 >>> " + ++x);
System.out.println("静态成员变量y的值 >>> " + ++y);
}
}
成员变量的关系非静态成员变量
静态成员变量与非静态成员变量的关系
如何调用静态方法与非静态方法
static 是静态修饰符有方法中有static是静态方法,没有则是非静态方法
静态方法
- 静态方法可以通过( 类名 点 方法名 )的方式调用
- 但是不能通过( 类名 点 方法名 )的方式调用非静态方法
非静态方法
- 可以通过类的实例化( 对象名 点 方法名 )的方式调用非静态方法
- 也可以通过类的实例化( 对象名 点 方法名 )的方式调用静态方法
- 类的实例化—>> 类名 对象名 = new 类名();
调用静态方法与非静态方法 调用其他类中的方法
public class Person01Test {
@Test
//static 是静态修饰符有方法中有static是静态方法,没有则是非静态方法。
// 可以通过(类名 点 方法名)的方式调用静态方法
// 不能通过(类名 点 方法名)的方式调用非静态方法
public void test01(){
Person.sleap();
}
@Test
public void test02(){
//类的实例化将person类 在堆中新创建个对象,名为person01
Person person01 = new Person();
// 可以通过类的实例化对象,调用方法
// 用(对象名 点 方法名)调用静态方法
// 也可用(对象名 点 方法名)调用非静态方法
person01.eat();//方法中没有static
person01.drink();
person01.sleap();//方法中有static
}
调用静态方法与非静态方法 调用同一类中的方法
- 静态方法可以调用静态方法,但是无法直接调用非静态方法
- 非静态方法 可以调用 非静态方法 与可以调用 静态方法
- 直接输入方法名
静态方法可以调用静态方法,但是无法直接调用非静态方法
package com.lihaozhe.javase.day03.bean.bean;
/**
* @author xhj
* @version 1.0.0 2022/4/20 上午9:23
*/
public class Dog {
public static void main(String[] args) {
// 静态方法可以调用静态方法,但是无法直接调用非静态方法
food("苹果",3);
// main方法 静态方法调用非静态方法,用类的实例化
Dog dog=new Dog();
dog.arr();
dog.cou(2,8);
}
public void arr() {
System.out.println("多少");
//非静态方法 可以调用 非静态方法 也可以调用 静态方法
//直接输入方法名
cou(5,6);
food("苹果",5);
}
public void cou(int a, int b) {
System.out.println("年龄"+(a + b));
}
public static void food(String a, int b){
System.out.println("吃了"+ b +"个"+ a);
}
}