JaveSE--面向对象编程

一.什么是面向对象

物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最后才对某个分类下的细节进行面向过程的思索。

对于描述复杂的事物,为了从宏观上把握、从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。但是具体到微观操作,仍然需要面向过程的思路去处理。

面向对象编程(OOP–Object-Oriented Programming)

它的本质就是:以类的方式组织代码,以对象的组织(封装)数据

三大特性:封装,继承,多态

从认识论角度考虑是先有对象后有类。对象是具体的事物。是抽象的,是对对象的抽象;从代码运行角度考虑是先有类后有对象,类是对象的模板。

二.回顾方法

1.方法的定义

语法如下:

    修饰符  返回值类型  方法名(...){
        方法体
        return 返回值
    }

其中return代表方法的结束,break代表跳出swit或结束循环!

方法名:驼峰原则+见名知意

参数列表:参数类型+参数名

异常抛出:疑问,后面讲解

2.方法的调用

  1. 静态方法-static
    可在别的类中可以直接调用。

静态方法是和类一起加载的

public class Student {

    public static void say(){
        System.out.println("学生说话了");
    }
}

public class Demo02 {
    public static void main(String[] args) {

        Student.say();
    }
}
  1. 非静态方法
    在别的类中调用前需先实例化

    非静态方法是在实例化之后才存在的

public class Student {

    public void say(){
        System.out.println("学生说话了");
    }
}

public class Demo02 {
    public static void main(String[] args) {

        Student student = new Student();//实例化
        student.say();
    }
}

3. 值传递和引用传递

  1. 值传递
 public static void main(String[] args) {

        int a =1;
        System.out.println(a);//1
        change(a);
        //此方法把原始变量a的值赋予方法中的形参,然后将方法中形参的值改变成10,并未改变原始变量a的值
        System.out.println(a);//1
    }

    public static void change(int a){
        a = 10;
    }
  1. 引用传递

    public class Demo03 {
        public static void main(String[] args) {
    
            Person person = new Person();//实例化
            System.out.println(person.name);//null
    
            change(person);
      //person是一个真实存在的人,名字是它的属性,在change方法中将它的名字改成刘鑫,这是person独有的属性
            System.out.println(person.name);//刘鑫
        }
    
        public static void change(Person person){
            person.name = "刘鑫";
        }
    }
    
    class Person{
        String name;
    }
    

三.类和对象的创建

  1. 类是一种抽象的数据类型,它是对某一类事物整体描述/定义,但是并不能代表某一个具体的事物。
  2. 对象是抽象概念的具体实例:能够体现出特点,展现出功能的是具体的实例,而不是一个抽象的概念。

1.创建与初始化对象

使用new关键字创建对象,使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用。语法如下:

className objectName = new class();

类 = 属性 + 方法

类是抽象的,需要实例化的,类实例化后会返回一个自己的对象!

2. 构造器详解

一个类即使什么都不写,它也会存在一个构造方法。

类中的构造器也称构造方法(必须掌握),是在进行创建对象的时候必须要调用的。并且构造器有以下两个特点:

  1. 必须和类名字相同
  2. 必须没有返回类型,也不能写void

Alt+Insert自动生成构造器!

public abstract class Application {

    public static void main(String[] args) {
        //new 实例化了一个对象
        Person p1 = new Person();
        Person p2 = new Person("meteor");

        System.out.println(p1.name);//liuxin
        System.out.println(p2.name);//meteor
    }
}

public class Person {
    //一个类即使什么都不写,它也会存在一个构造方法。
    //显示的定义构造器
    
    String name;
    //实例化初始值
    //1.使用new关键字,本质是在调用构造器
    //2.用来初始化值
    public Person(){
        this.name = "liuxin";
    }
    //有参构造:一旦定义了有参构造,无参就必须显示定义
    public Person(String name){
        this.name = name;
    }
}

3.内存分析

在这里插入图片描述

类和方法定义储存在堆区的方法区,并在方法区存储常量池和类所对应的属性。

静态方法区会储存static性质的方法和数据类型,和类一起加载,对象可以直接调用静态方法区中的方法。

当new一个对象时,首先会定义一个引用变量名,它会被存储在栈中;同时在堆中分配一个地址调用对应的类。

将对象的特征赋予对象时,对堆中的对象属性进行更改。

 Pet dog = new Pet();
//dog为引用变量名,它的属性均为初始化值
//dog.name:null;
//dog.age:0;
//dog.shout();
 dog.name = "旺财";
 dog.age = 3;
 dog.shout();
//对dog属性定义
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值