美文网首页
Java基础之面向对象

Java基础之面向对象

作者: felixfeijs | 来源:发表于2020-12-02 22:04 被阅读0次

Java类及类的成员(属性、方法、构造器、代码块、内部类)

面向对象(OOP Object Oriented Programming)与面向过程(POP Procedure Oriented Programming)
  • 面向对象是相对于面向过程而言的。面向过程,强调是功能行为,以函数/方法为最小单位,考虑怎么做。面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。
  • 面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象、分类、继承、聚合、多态等。
  • 方法定义时:..的区别
面向对象的三大特征(封装、继承、多态、抽象)
  • 封装:使用private关键字对对象的属性进行隐藏,并隐藏其具体细节,目的就是增强安全性和简化编程,并提供对外的使用方法.
  • 多态:同一个行为(方法)有不同的表现形式。
  • 继承:使用extends关键字使子类继承父类的特征(属性)和行为(方法)。
类和对象
  • 类(Class)和对象(Object)是面向对象的核心概念
  • 类是对一类事务的描述,数抽象的、概念上的定义
  • 对象是实际存在的该类事务的每个个体,因而也称为实例(instance)
  • 类的创建如下
public class Person {

    // 属性
    String name;
    int age = 1;
    // 方法
    public void eat(){
        System.out.println("吃东西了");
    }
    public void sleep(){
        System.out.println("睡觉了");
    }
}
  • 对象的创建如下
public static void main(String[] args) {
    // 对象(实例)的创建
    Person person = new Person();
    // 方法的调用
    person.eat();
    person.sleep();
    // 属性的调用
    System.out.println("我今年"+ person.age + "岁了");
}
属性的使用(成员变量)
名称 定义方式 内存区别
属性 定义在类的{}内 加载到堆空间
局部变量 定义在方法内、方法行参、代码块内、构造形参、构造方法内 加载到栈空间
方法的重载和重写
  • 在同一个类中,允许存在一个或多个同名方法,只要它们的参数个数或参数类型不同即可
可变个数的形参
  • JDK5.0采用可变个数形参来定义方法,传入零个或多个同一类型的变量
public class Person {
    // 可变形参声明方式,参数为数组
    public void test(String...val){
        for (String item:val) {
            System.out.println(item);
        }
    };
    public static void main(String[] args) {
        new Person().test("我","要","吃",”饭“);
    }
}

其他关键字(this、super、static、final、abstract、interface、package、import等)

对象的内存解析

  • 内存解析如图
image.png
  • 本地方法栈:通常调用本地方法c或者c++的方法
  • 堆(heap),此内存区域的唯一目的就是存放对象实例,几乎所有的实例都在这里分配内存。
  • 方法区:用于存储已被虚拟机家在的类信息、敞亮、静态变量、即时编译器遍以后的代码等。
  • 虚拟机栈(stack):存储局部变量、对象实例的变量(包含了对象引用的地址)等,局部变量表存放了编译期可知长度的各种基本数据类型(boolean、byte、short、long、int、double、float、char)、对象应用(reference类型),它不等同于对象本身,是对象在堆内存的首地址。方法执行完,自动释放
  • 如下,对于对象引用的使用代码如下
public static void main(String[] args) {
        // 对象(实例)的创建
        Person p1 = new Person();
        // 方法的使用
        p1.eat();
        p1.sleep();
        p1.name = "tom";
        // 属性的使用
        System.out.println("我今年"+ p1.age + "岁了");
        Person p3 = p1; // 只是改变了p3的地址=p1的地址
        System.out.println(p3.equals(p1)); // 如果是对象比较的地址
        p3.name = "fpf";
        System.out.println("我用的是p1的堆地址:我的姓名"+ p1.name);
        // fpf
        System.out.println("我用的也是p1的堆地址:我的姓名"+ p3.name);
        // fpf
    }

匿名对象

  • 声明的对象没有赋值给变量,使用如下
public class Person {

    // 属性
    String name;
    int age = 1;

    // 方法
    public void eat(String some){
        System.out.println("吃东西了"+some);
    }
    public void sleep(){
        System.out.println("睡觉了");
    }
    public static void main(String[] args) {
        // 匿名对象的使用
        new Person().eat("饭");
        new Person().eat("面");
        // 常见的匿名对象的使用
        PersonMall mall = new PersonMall();
        mall.show(new Person());
    }
}
class PersonMall{
    public void show(Person person){
        person.sleep();
    }
}

相关文章

  • 面试题汇总

    1.Java基础面试问题 Java基础之基础问题 Java基础之面向对象 Java基础之数据结构 Java基础之I...

  • java SE目录

    java SE目录 java基础(一)java基础(二)关键字面向对象(一)面向对象(二)面向对象(三)集合(一)...

  • Java 基础学习笔记

    Java 基础之 面向对象六大原则 Java 基础之 重写和重载的区别和各自使用 Java 基础之巧用Object...

  • Java基础03面向对象

    Java 基础02Java编程基础 面向对象上 面向对象的概述 面向对象的概述:面向对象是一种符号人类思维习惯的编...

  • 【知识详解】JAVA基础(秋招总结)

    JAVA基础 目录 JAVA基础 问:面向过程(POP)和面向对象(OOP)? 问:Python和Java的区别?...

  • Java 基础

    Java 基础01Java开发入门 Java 基础02Java编程基础 Java 基础03面向对象 Java 基础...

  • 从事Android以来的相关总结1-JAVA技能

    ☆JAVA技能 «有良好的JAVA基础,熟练掌握面向对象思想: 理解面向对象: 面向对象是一种思想,是基于面向过程...

  • 面向对象

    title:面向对象tags: 基础,Java 面向对象 面向对象程序设计简介 面向对象的基本思想是使用类、对象、...

  • java基础之---面向对象

    前言 最近又闲下来了,无意间在其他博客看见几篇java基础的文章,发现自己好多都忘记了。趁有时间就自己再回顾复习一...

  • 厉害!蚂蚁金服面试官整理的“基础-中级-高级”Java程序员面试

    Java基础(对象+线程+字符+接口+变量+异常+方法) 面向对象和面向过程的区别? Java 语言有哪些特点? ...

网友评论

      本文标题:Java基础之面向对象

      本文链接:https://www.haomeiwen.com/subject/eifpwktx.html