面向对象(对象和类)

VanTYS 2020-04-09

通过编程思想来解决程序的问题:
  面向过程编程思想
  面向对象编程思想
  面向切面编程思想
  面向接口编程思想

面向对象编程思想(OOP Object Oriented Programming):
  面向对象是基于面向过程的编程思想
  面向过程强调的是每一个功能步骤
  面向对象强调的是由对象去调用功能

面向对象编程思想优点:
  更符合我们思考习惯的思想
  可以将复杂问题简单化
  将我们从执行者变成指挥者,角色发生了转换

面向对象的核心是对象,对象可以是任意一个事物
Java中使用类来描述现实世界中的元素,类是抽象的

类的结构:
  属性: 描述对象的特征
  方法: 描述对象的行为功能

设计对象的核心就是要确定对象具备什么功能;

手机——功能:看电影、听音乐、聊天、拍照、打游戏

  特征:品牌、价格、形状、大小、尺寸、产地等······

——特征:毛色、年龄、性别、品种、体型、体重

 功能:吃、睡、抓老鼠、爬树、卖萌······

属性:就是类的特征(数据)描述
     通过变量的方式定义属性
     属性又称为成员变量或全局变量

创建类:(class用于定义类,一个类中可以编写该类的多个属性或方法

  public  class  类名{

    //属性

    //方法

  }

用户类的定义:

类其实是对象的类型,描述了一类对象,这些对象有着相同的属性和方法;比如刚才定义的User类其实并没有指代某个具体用户,每次实例化都表示通过该类型创建了一个新的对象类的编写也是Java 中自定义类型的实现

定义好的类需要通过new实例化后才能使用,实例化后的类才会在内存中生成数据,通过类的实例化在内存中生成的数据称为对象

  public class User{

    //用户属性

    String name;

    int age;

    String sex;

    String job;

  }

类的实例化:User user=new User();

访问类的属性:对象名.属性名

      user.name="tom";

      user.age=20;

方法的优点:

对方法中的代码进行复用

使类的业务结构分离,代码结构更清晰,便于维护管理

方法的创建:访问修饰符   返回值类型   方法名([参数列表]){

      //方法体  相关代码

      [return ]  值

    }

修饰符: 访问修饰符可以对方法、类、属性、包等进行作用,用于修饰添加访问范围、功能等作用

Java的修饰符: public   protected  private   static  final  synchronized  abstracted等

方法的返回值类型:
  没有返回值 void
  有返回值 定义返回的数据类型

有返回值的方法:
  必须使用return 返回数据
  返回的数据类型必须和方法声明的数据类型保持一致

 方法的调用:

 1.类的外部调用方法:类名 对象名=new 类名();——实例化

        对象名 方法名();——调用方法

2.类的内部调用方法:public void methodA(){}

        public void methodB(){

          methodA();——直接调用

        }

 方法中定义的变量和属性名重名怎么办

使用关键字this区分

this表示当前类的实例,使用  (this . 变量名)  即表示访问该类的成员变量

因此定义在方法中的变量,又称为局部变量

 

类与对象的区别:

类是抽象的,并没有在内存中产生数据,类只是规范定义的该对象类型的结构;

对象是实体,是在内存中创建出来的实体数据,包含了真正的数据内容;

类与对象的联系:

类是对象的类型,是具备相同属性和方法抽离出来的模板

对象是根据类创建出来的实体数据

鸟类是父类,燕子是类,燕子李三是对象

自定义类就是自定义Java中数据类型的过程

数据分为基本类型和引用类型,自定义的所有类都是引用类型

基本类型和引用类型的区别:

1.基本类型的值是结构体,直接存储在内存栈中,引用类型需要实例化的方式才能在内存栈中创建出来

2.栈中数据可直接访问,引用类型必须要通过引用的方式来访问堆中的数据

类中的属性(变量)在类实例化时,JVM会分配默认值

1.int   short  long   float   double  默认为0

2.boolean默认值为false

3.char默认值为空字符

4.引用类型的默认值为null(只有栈中的数据,没有堆中的数据,只有实例化以后才会产生堆中的数据) 

NullPointException异常就是类没有进行实例化就访问其中的数据产生的

创建类(属性和方法)

/**
 * 人类,人的类型
 */
public class Human {
    //属性
    //通过定义变量描述人的属性
    int age;
    String sex;
    String name;


    //方法

    /**
     * 自我描述的方法
     */
    public void details(){
        System.out.println("姓名:"+name+",年龄:"+age+",性别:"+sex);
    }

    /**
     * 购物前的准备方法
     */
    public void ready(){
        System.out.println(name+"出门前整理了帽子");
        System.out.println(name+"出门前整理了领带");
    }

    /**
     * 购物方法
     */
    public String shopping(){
        //方法中声明的变量由于作用域范围,仅在当前方法中生效,因此该变量称为局部变量
        //方法中有出现同名变量时,就近优先访问局部变量
        String name = "tom";
        //同一个类中,内部方法的调用可以直接访问
        //this表示当前对象的引用
        //默认情况下访问在方法内部访问的属性、方法都使用this
        this.ready();
        System.out.println(this.name+"出去进行了购物");
        //有返回值的方法必须要使用return将对应类型的数据返回
        //方法只能返回一个值
        //return的作用是强制终止所在方法的执行,并将return后的数据返回出去
        return "一颗青菜";
    }

}

测试类(调用属性和方法)

public class HumanTest {

    public static void main(String[] args) {
        //实例化Human类,实例化将使类在内存生成相应的数据
        //通过实例化产生的数据又称为“对象”,又称为实体数据     //创建第一个人
        Human man1 = new Human();
        //通过对象名.属性名 来访问该对象的属性
        //给属性赋值
        man1.name = "特朗普";
        man1.sex = "男";
        man1.age = 73;
        //通过对象名.方法名 来访问对象的方法功能
        man1.details();
        //有返回值的方法,必须要使用相应的类型接收返回值
        String goods = man1.shopping();
        System.out.println(man1.name+"买回了"+goods);

        //创建了第二个人
        Human man2 = new Human();
        man2.name = "特没谱";
        man2.sex = "男";
        man2.age = 50;
        //自我描述
        man2.details();

        //当尝试对为null值的对象访问属性或方法时,会产生NullPointerException异常
        Human man3 = null;
        System.out.println(man3.sex);

    }
}

 main方法比较特殊:

main方法中的static不需要new就可以开辟出一个空间

main方法要调用方法是,不管在不在同一个类中,都要进行实例化,通过(对象名 . *) 的形式才能进行调用

面向对象(对象和类)

相关推荐