一、面向对象思想

  1、概述

    Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计、开发计算机程序。

    这里的对象泛指现实中一切事物,每种事物都具备自己的属性行为

    面向对象思想就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算机事件的设计思想。 它区别于面向过程思想,强调的是通过调用对象的行为来实现功能,而不是自己一步一步的去操作实现。

  2、举例

    洗衣服:

      •  面向过程:把衣服脱下来-->找一个盆-->放点洗衣粉-->加点水-->浸泡10分钟-->揉一揉-->清洗衣服-->拧干-->晾起来
      • 面向对象:把衣服脱下来-->打开全自动洗衣机-->扔衣服-->按钮-->晾起来

    区别:

      •  面向过程:强调步骤如何执行,注重细节。
      •     面向对象:强调对象,(即洗衣机)忽略细节。

  3、特点

    面向对象思想是一种更符合我们思考习惯的思想,它可以将复杂的事情简单化,并将我们从执行者变成了指挥者 。

    面向对象的语言中,包含了三大基本特征,即 封装、继承 和 多态

二、类和对象

  1、什么是类

    •     :是一组相关 属性 行为 的集合。可以看成一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。
    • 属性:就是该事物的状态信息。
    • 行为:就是该事物能够做什么。

   Demo:

    类:小狗。

    属性:名字、雌雄、体重、颜色、年龄;

    行为:走、跑、叫、吃、看门

  2、什么是对象

    •  对象:是一类事物的具体体现。 对象是类的一个 实例,必然具备该类事物的属性和行为。

    Demo:

    对象:一个小狗。

    属性:Tom、公、6kg、黑色、3岁;

    行为:翘着尾巴走,欢快的跑、汪汪的叫、吃骨头;

  3、类与对象的关系

    • 是对一类事物的描述,是 抽象 的。
    • 对象 是一类事物的实例,是 具体 的。
    • 类是对象的模板,对象是类的实体

三、类的定义

  1、事物与类的对比

    现实世界的一类事物:

     属性:事物的状态信息。             行为:事物能够做什么。

    Java 中用 class 描述事物也是如此:

     成员变量:对象事物的 属性。    成员方法:对应事物的 行为

  2、类的定义格式

    语法格式:

[修饰符] class ClassName {
  //成员变量
  //成员方法
  //构造器
  //代码块
  //内部类
}
    •   定义类:    就是定义类的成员,包括 成员变量,成员方法,构造器,代码块和内部类;
    • 成员变量: 同普通的定义变量一样,只是位置发生了变化。在类中,方法外面;
    • 成员方法: 同普通的定义方法一样,(方法前面不需要加 static 关键字);
    • 构造器:创建对象时使用;
    • 代码块:在类初始化和对象初始化时使用;
    • 内部类:在某个大的事物中,包含一个独立的小事物;

    Demo:定义一个学生类

  public class Student {
//成员变量
String name; // 姓名
int age; // 年龄
  char sex = '男'; //性别   显示设置属性的值 // 成员方法
public void study() {
System.out.println("我爱学 Java。");
} }

     注意

      •   成员变量是直接定义在类当中的,在方法外边。
      • 成员方法不要写static关键字。  

四、对象的使用

  1、导包

    其实就是指出需要使用的类,在什么位置,在哪个包里面。

    语法格式:

import 包名称.类名称;

     注意:如果要使用的类和当前类属于同一个包的情况下,可以省略导包语句不写。

  2、创建对象

     语法格式:

类名 对象名 = new 类名();

  3、使用对象

    使用对象访问类中的成员:

使用成员变量:  对象名.成员变量;
使用成员方法: 对象名.成员方法();

    Demo:

 public class Test01_Student {
  public static void main(String[] args) {
  //创建对象格式:类名 对象名 = new 类名();
  Student s = new Student();
  System.out.println("s:"+s); // Student@100363 地址值   //直接输出成员变量值
  System.out.println("姓名:"+s.name); //null
  System.out.println("年龄:"+s.age); //0   //给成员变量赋值
  s.name = "赵丽颖";
  s.age = 18;
  //再次输出成员变量的值
  System.out.println("姓名:"+s.name); //赵丽颖
  System.out.println("年龄:"+s.age); //18   //调用成员方法
  s.study(); // "我爱学 Java"
  
}

   注意

    (1)可以在类中给成员变量赋值,称为显示赋值,这样新建对象后,类中的值就是该对象属性的初始值。

    (2)如果成员变量没有进行赋值,那么将会有一个默认值,规则如下:

    

  数据类型 默认值
基本类型 整数(byte,short,int,long) 0
浮点数(float,double) 0.0
字符(char) '\u0000'
布尔(boolean) false
引用类型 数组,类,接口,字符串 null

五、对象内存图

  1、一个对象,调用一个方法内存图

    

    分析:通过上图,可以得知在 栈 内存中运行的方法,遵循“先进后出,后进先出” 的原则。

    在 main 方法中,变量 one 指向的是 堆中对象的地址,而堆中的对象的成员方法指向的又是方法区中 .class  文件的成员方法的地址。

  2、两个对象,调用同一方法内存图

    

    分析:多个对象调用方法时,根据对象中方法标记(地址值),去类中寻找方法信息。这样哪怕是多个对象,方法信息只保存一份,节约内存空间。

  3、两个引用指向同一对象的中内存图

    

   分析:通过上图可知,虽然创建了两个引用变量,但实际在堆中只创建了一个对象,两个引用变量都指向这个对象,而且都能够修改此对象的成员变量和调用成员方法。

六、对象作为参数和返回值

  1、作为参数

    

  2、作为返回值

    

    总结:对象类型作为方法的参数与返回值的时候,传递的其实都是 地址值

七、成员变量和局部变量区别

  1、图解

    变量根据定义 位置的不同,给变量起了不同的名字。

   

  2、区别

    • 定义的位置不一样 【重点】

      •  成员变量:在类中,方法外部

      • 局部变量:方法中或者方法声明上(形式参数)或者代码块中
    • 作用范围不一样 【重点】

      •  成员变量:整个类中都可以使用
      • 局部变量:只有在声明的方法中才可以使用,
    • 默认值不一样 【重点】

      •  成员变量:如果没有赋值,会有默认值,规则如上;
      • 局部变量:没有默认值,必须先定义,赋值,才能使用
    • 内存中的位置不一样 【了解】

      •  成员变量:位于堆内存
      • 局部变量:位于栈内存
    • 生命周期不一样 【了解】

      •  成员变量:随着对象创建而诞生,随着对象被垃圾回收而消失
      • 局部变量:随着方法进栈而诞生,随着方法出栈而消失
    • 修饰符
      •  成员变量:有很多修饰符,如:权限修饰符
      •     局部变量:不能加权限修饰符,唯一能加的是 final

Java 面向对象(一)面向对象思想的更多相关文章

  1. java中一个重要思想:面向对象

    面向对象: 1, 面向过程的思想(合适的方法出现在合适的类里面) 准备去一个地方: 先买车, 挂牌, 开导航, 踩油门, 过黄河, 穿越珠穆朗玛峰... 2, 面向对象的思想 我开着车去, 车怎么去随 ...

  2. 面向对象的编程思想和Java中类的概念与设计

    面向对象的编程思想学习,面向对象内容的三条主线;1.java类及类的对象2.面向对象的三大特征3.其他关键字学习内容:3.1面向对象与面向过程面向对象与面向过程在应用上的区别 Java中类的概念与设计 ...

  3. Java语言中的面向对象特性:封装、继承、多态,面向对象的基本思想(总结得不错)

    Java语言中的面向对象特性(总结得不错) [课前思考] 1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类? 2. 面向对象编程的特性有哪三个?它们各自又有哪些特性? 3. 你知道jav ...

  4. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  5. [Java入门笔记] 面向对象编程基础(一):类和对象

    什么是面向对象编程? 我们先来看看几个概念: 面向过程程序设计 面向过程,是根据事情发展的步骤,按进行的顺序过程划分,面向过程其实是最为实际的一种思考方式,可以说面向过程是一种基础的方法,它考虑的是实 ...

  6. 黑马程序员——【Java基础】——面向对象(二)异常机制、包(Package)

    ---------- android培训.java培训.期待与您交流! ---------- 一.异常机制 (一)异常概述 1.异常:就是程序在运行时出现不正常情况. 2.异常类:程序在运行时,出现的 ...

  7. Java中的面向对象

    Java中的面向对象 在软件开发的学习中, 我最先接触的开发语言就是java,但都是简单的函数和循环数组的应用.说道面向对象,第一次看到这个词的时候还是在C#的学习过程中,我记得当时PPT上霸气的解释 ...

  8. java学习之面向对象概念

    思考的两种方式: 举例: 把大象放到冰箱里 一.面向过程 :[打开冰箱->把大象放里面->关上冰箱门]面向过程注重的是过程,也就是(动作[函数]),然后按照动作依次去执行就好了. 代表语言 ...

  9. 20175212童皓桢 Java实验二-面向对象程序设计实验报告

    20175212童皓桢 Java实验二-面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设 ...

  10. 第二十五节:Java语言基础-面向对象基础

    面向对象 面向过程的代表主要是C语言,面向对象是相对面向过程而言,Java是面向对象的编程语言,面向过程是通过函数体现,面向过程主要是功能行为. 而对于面向对象而言,将功能封装到对象,所以面向对象是基 ...

随机推荐

  1. python中dir,__dict__ , __setitem__(),__getitem__()

    class Testa: pass class Testb(object): pass if __name__ == '__main__': print 'testb = ',dir(Testb) p ...

  2. 深入理解Java虚拟机 - 书评

    谈起<深入理解java虚拟机>这本书,让我印象深刻的就是换工作跳槽面试的时候,当时刚进入java开发这个行业的时候,平时只是做一些对数据库的增删改查等功能,当自己技术增长一些的时候,就开始 ...

  3. LeetCode_38. Count and Say

    38. Count and Say Easy The count-and-say sequence is the sequence of integers with the first five te ...

  4. oracle-复制表结构和表数据

    1.复制表结构和表数据 create table table_new as select * from table_old 2.复制表结构 create table table_new as sele ...

  5. 第三章 授权——《跟我学Shiro》

    转发地址:https://www.iteye.com/blog/jinnianshilongnian-2020017 目录贴:跟我学Shiro目录贴 授权,也叫访问控制,即在应用中控制谁能访问哪些资源 ...

  6. AWS 存储服务(三)

    目录 AWS S3 业务场景 挑战 解决方案 S3的好处 S3 属性 存储桶 Buckets 对象 Object S3 特性 S3 操作 可用性和持久性 一致性 S3 定价策略 S3高级功能 存储级别 ...

  7. rsync参数说明

    参数说明: log file = /var/log/rsyncd.log   #日志文件位置,启动rsync后自动产生这个文件,无需提前创建 pidfile = /var/run/rsyncd.pid ...

  8. 配置Linux描述网络安全CIA模型之可用性案例

    在Linux中防御SYN型DOS攻击的方法比较常见的有: 1.增大队列SYN最大半链接数 2.利用SYN cookie技术   下面分别进行分析. 1.增大队列SYN最大半连接数 在LINUX中执行命 ...

  9. ByteDance面试

    1.HashMap.HashSet源码解读 2.Http状态码.包头内容有哪些 响应头 说明 示例 状态 Access-Control-Allow-Origin 指定哪些网站可以跨域源资源共享 Acc ...

  10. kotlin基本数据类型

    通过idea创建kotlin项目: 创建kotlin文件 package com.czhappy.chapter01 var aBoolean:Boolean = true var anInt:Int ...