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内存结构

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

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

  • Java堆(Heap):

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

  • 方法区(Method Area)

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

  • 程序计数器(Program Counter Register)

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

  • 栈(Stacks)

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

  • 本地方法栈

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

Java面向对象入门的更多相关文章

  1. java面向对象入门(1)-入门介绍

    在本 Java OOPs 概念教程中,我们将学习四种主要的面向对象原则 -- 抽象.封装.继承和多态性.它们也被称为面向对象编程范式的四大支柱. _抽象_是在不考虑无关细节的情况下公开实体基本细节的过 ...

  2. java面向对象入门(3)-java构造方法

    Java构造函数是特殊的方法(没有返回类型),使您可以在应用程序内部的其他类使用对象之前完全初始化对象状态.Java中的构造方法是使用new关键字调用的.下面让我们更深入地了解构造函数. 1.什么是j ...

  3. Java面向对象入门(2)-访问修饰符

    Java访问修饰符–public, protected, private and default Java提供了四个访问修饰符来设置类,变量,方法和构造函数的访问级别,即public,private, ...

  4. java面向对象入门之方法参数的传递

    /* Name : Power by :Stuart Date:2015.4.25 */ class PassOn{ //创建show方法,把i传入,输出i+1的结果 public void show ...

  5. java面向对象入门之带参方法创建

    /* Name :创建带参的方法 Power by :Stuart Date:2015.4.25 */ //创建Way类 class Way{ //Way类成员的基本变量 int add1=123; ...

  6. java面向对象入门之创建类

    /* Name:如何创建类的实例 Power by Stuart Date:2015-4-23*/ //一个bike测试类 public class bikeTest{ //bike 一个变量 Str ...

  7. Java实例 Part5:面向对象入门

    目录 Part5:面向对象入门 Example01:成员变量的初始化值 Example02:单例模式的应用 -----懒汉式 -----饿汉式 Example03:汉诺塔问题的求解 Example04 ...

  8. JavaSE入门学习21:Java面向对象之接口(interface)(二)

    一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.j ...

  9. JavaSE入门学习24:Java面向对象补充

    一Java中的Object类 Object类是全部Java类的父类.假设一个类没有使用extendskeyword明白标识继承另外一个类,那么这个类默认 继承Object类. public class ...

随机推荐

  1. vim操作:打开多个文件、同时显示多个文件、在文件之间切换

    打开多个文件: 1.vim还没有启动的时候: 在终端里输入 vim file1 file2 ... filen 便可以打开所有想要打开的文件 2.vim已经启动 输入 :open file 可以再打开 ...

  2. 破解压缩包的几种方式(zip伪加密 爆破 CRC32碰撞 已知明文攻击)

    zip伪加密 zip文件是由3部分组成,详见文末 压缩源文件数据区+压缩源文件目录区+压缩源文件目录结束标志 在压缩源文件数据区有个2字节的 全局方式位标记 ,在压缩源文件目录区也有个2字节的 全局方 ...

  3. SpringBoot2.0整合fastjson的正确姿势

            SpringBoot2.0如何集成fastjson?在网上查了一堆资料,但是各文章的说法不一,有些还是错的,可能只是简单测试一下就认为ok了,最后有没生效都不知道.恰逢公司项目需要将J ...

  4. 数据库系统(四)---关系型数据库设计及E-R图

    1.关系型数据库: 关系型数据库是一类采用关系模型作为逻辑数据模型的数据库系统,遵从数据库设计的基本步骤,包括:需求分析.概念结构设计.逻辑结构设计.物理结构设计.数据库实施.数据库的运行和维护等阶段 ...

  5. SQL 分组后只获取每组的一条数据

    /****** Object: Table [dbo].[TEMP] Script Date: 2018-8-22 星期三 23:33:09 ******/ SET ANSI_NULLS ON GO ...

  6. 第04节-BLE协议抓包演示

    在上几篇博客中,形象的讲解了BLE各个层的作用,各个层的数据结构.本篇博客将研究BLE协议抓包.在实际开发中,有一个中央设备(central)和一个外设(Peripheral).所谓中央设备就是指它可 ...

  7. Python面试题(1)

    1.如何反向迭代一个序列 #如果是一个list,最快的方法使用reversetempList = [1,2,3,4]tempList.reverse()for x in tempList:    pr ...

  8. Spring AOP技术本质认识

    Spring AOP技术本质认识 一.AOP简介   AOP(Aspect Oriented Programming,面向切面编程),把某一类问题集中在一个地方进行处理,比如处理程序中的点击事件.打印 ...

  9. CentOS7 开放端口 通过 firewall-cmd 工具来操作防火墙

    CentOS7 提供了 firewall-cmd 工具来操作防火墙. firewall-cmd --permanent:表示设置为持久,配置被写入配置文件,跨重启,不会立即生效,重新加载配置后生效.不 ...

  10. 洛谷 CF997A Convert to Ones

    洛谷 CF997A Convert to Ones 洛谷传送门 题意翻译 给你一个长度为 nn 的01串( n \leq 310^5n*≤3∗105 ),你有两种操作: 1.将一个子串翻转,花费 XX ...