zoukankan      html  css  js  c++  java
  • Java面向对象入门

    Java面向对象入门

    一、Java面向对象的基本组成

    1. Java类及类的成员:属性、方法、构造器;代码块、内部类
    2. 面向对象三大特征:封装、继承、多态(抽象)
    3. 关键字:this、super、static、final、abstract、interface、package、import...

    二、面向对象的分析思路与步骤

    1. 根据问题需要,选择问题所针对的现实世界中的实体
    2. 从实体中寻找解决寻找问题相关的属性和功能,抽象成
    3. 将抽象的类用计算机语言描述,形参计算机的类
    4. 将类实例化成计算机中的对象,对象是计算机解决问题的最终工具

    小例子:

    大象放进冰箱

    人{
     打开(冰箱){
        冰箱.开开();
     }
    
     抬起(大象){
         大象.进入(冰箱)
     }
     关闭(冰箱){
         冰箱.关闭()
     }
    }
    冰箱{
    开开(){}
    关闭(){}
    }
    大象{
     进入(冰箱){
     }
    }
    

    三、设计类

    设计类就是设计类的成员,成员有属性和方法。

    属性 = 成员变量 = field = 域、字段

    方法 = 成员方法 = 函数 = method

    创建类的对象 = 类的实例化 = 实例对象

    1.类和对象的使用

    • 创建类,设计类的成员
    • 创建类的对象
    • 通过对象.属性对象.方法调用对象的结构

    2.对象的内存解析

    先简单了解几个概念

    • 堆(Heap):目的是存放对象实例,几乎所有的对象实例都在此处分配内存
    • 栈(Stack):通常说的栈是指虚拟机栈,用于存储局部变量等。方法执行完,自动释放
    • 方法区(Method Area):用于存储已被虚拟机加载的类信息、常量、静态变量、即使编辑器编译后的代码等数据。

    Person类:

    class Person{
        //    属性
        String name;
        int age = 1;
        boolean isMale;
    
        //    方法
        public void eat(){
            System.out.println("人可以吃饭");
        }
    
        public void sleep(){
            System.out.println("人可以睡觉");
        }
    
        public void talk(String language){
            System.out.println("说的是:"+language);
        }
    }
    

    Main入口:

    public class PersonTest {
        public static void main(String[] args) {
          Person p1 = new Person();
    			p1.name = "Sour";
          p1.isMale = true;
          Person p2 = new Person();
          Person p3 = p1;
        }
    }
    

    Person p1 = new Person();
    在堆空间中声明了一个Person对象,在栈空间中声明了一个变量p1,并将Person对象的首地址赋值给了变量p1。(name,isMale等属性是在堆空间中的)

    Person p2 = new Person();
    在堆空间中又声明了一个新的Person对象,并赋值给变量p2,两个对象互不干扰

    Person p3 = p1;
    在栈空间声明了一个变量p3,将p1的地址值赋值给p3,相当于p3与p1指向了堆空间中的同一个对象。

    四、类中属性的使用

    属性分为:成员变量 局部变量

    • 相同点:

      1. 定义变量的格式:数据类型 变量名 = 变量值
      2. 先声明后使用
      3. 都有对应的作用域
    • 不同点:

      1. 在类中声明的位置不同

        成员变量:直接定义在类的一对{}

        局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内部变量

      2. 权限修饰符的不同

        成员变量:可以在声明属性时,指明权限,使用权限修饰符

        局部变量:不可以使用权限修饰符

        常用的权限修饰符:privatepublic、缺省(默认不写即缺省)、protected

      3. 默认初始化值

        成员变量:类的属性,根据类型都有默认初始化值
        整型(byte/short/int/long):0
        浮点型(float/double):0.0
        字符型(char):0
        布尔型(boolean):false

        ​ 引用数据类型(类、数组、接口):null

        局部变量:没有默认初始化值(Python可以设置默认初始化值)

        调用之前必须要显式赋值

      4. 在内存中加载的位置不同

        成员变量:加载到堆空间中

        局部变量:加载到站空间中

    五、类中方法的声明和使用

    方法的声明:权限修饰符 返回值类型 方法名(形参列表){ 方法体

    }

    如果方法有返回值,则必须在方法声明时,指定返回值的类型。同时,方法中,需要return关键字返回指定类型的变量或者常量,如果方法没有返回值,声明方法时用void来表示。没有返回值时使用return表示结束此方法

    注:方法中不能定义方法(没有函数的概念)

    六、jvm内存结构

    image-20190717084809915

    方法区是所有线程共享的内存区域.

    java栈、本地方法栈和程序计数器是运行是线程私有的内存区域

    • Java堆(Heap):

      Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。

    • 方法区(Method Area)

      是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

    • 程序计数器(Program Counter Register)

      占用内存空间较小,可以看做是当前线程所执行字节码的行号指示器

    • 栈(Stacks)

      线程私有的,它的生命周期与线程相同。描述的是Java方法执行的内存模型,每个方法被执行都会创建一个栈帧用于存储局部变量表、操作栈、动态链接、方法出口等信息。每个方法被调用执行完成,就是一个入栈到出栈的过程。

    • 本地方法栈

      虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的Native方法服务。

  • 相关阅读:
    ubuntu16.04添加开机启动任务
    Elasticsearch-5.0.0移植到ubuntu16.04
    转:解决npm install慢的问题
    解决virtualbox装ghost xp装驱动时报portcls.sys蓝屏的问题
    git文件迁移到新架构
    ubuntu16.04文件形式安装mongodb
    linux启动流程
    启动WAMPSERVER出现计算机中丢失 MSVCR110.dll
    socket编程的网络协议
    PHP7的新特性
  • 原文地址:https://www.cnblogs.com/mangM/p/11198826.html
Copyright © 2011-2022 走看看