1. 面向对象的概念
  2. 类与对象的关系
  3. 封装

面向对象

  • 面向过程: 强调的是过程(动作)

  • 面向对象: 强调的是对象(实体)

面向对象的特点

  1. 面向对象就是一种常见的思想,符合人们的思考习惯;
  2. 面向对象的出现,将复杂的问题简单化;
  3. 面向对象的出现,让曾经在问题中的执行者,变成了对象中的指挥者.

面向对象的三个特征: 封装 继承 多态

类与对象的关系

  • 类: 对事物的描述

  • 对象: 该类事物的实例, 在 java 中通过 new 创建. 实际上, 对象的出现是为了封装一个事物所具备的数据.

  • 怎么描述事物呢?

    对于事物的描述通常只关注两方面:

    属性(通常是数值)

    行为(通常是动作,即函数)

  • 如何定义类?

    定义类其实就是在定义类中的成员,而成员包括:

    成员变量(即属性)

    成员函数(即行为)

//例: 描述小汽车
/*
分析:
1. 属性
轮胎数
颜色
2. 行为
运行
*/
// 类
class Car
{
int num; //轮胎数
String color; //颜色
void run() // 行为
{
System.out.println(num+"..."+color);
}
} class CarDemo
{
public static void main(String[] args)
{
// 在计算机中创建一个 car 的实例, 通过 new 关键字
Car c = new Car(); // c 就是一个 类 类型的引用变量, 指向了该类的对象(实例)
// 类 类型的变量要么指向对象, 要么就是 null.
c.num = 4;
c.color = "red";
c.run(); // 要使用对象中的内容可以通过 对象.成员 的形式来完成.
}
}

对象的内存体现

成员变量和局部变量的区别:

  1. 成员变量定义在类中,整个类中都可以访问;

    局部变量定义在函数, 语句, 局部代码块中, 只在所属的区域有效.

  2. 成员变量存在于堆内存的对象中;

    局部变量存在于栈内存的方法中.

  3. 成员变量随着对象的创建而存在, 随着对象的消失而消失;

    局部变量随着所属区域的执行而存在, 随着所属区域的结束而释放.

  4. 成员变量都有默认初始化值;

    局部变量没有默认初始化值.

匿名对象

  • 定义: 没有名字的对象, 其实就是定义对象的简写格式.
  • 格式: new Car();
  • 使用方式:
    • 当对象对方法仅进行一次调用的时候, 就可以简化成匿名对象.
    • 匿名对象可以作为实际参数进行传递.

基本数据类型数据参数传递图解

引用数据类型参数传递图解

封装 (Encapsulation)

// 定义类
class Person
{
int age;
void speak()
{
System.out.println("age="+age);
}
} class PersonDemo
{
public static void main(String[] args)
{
Person p = new Person();
p.age = 20; //直接访问该属性,存在安全隐患. 例如 p.age = -20; 不符合实际情况,属于错误的赋值
p.speak();
}
} // 改进方法
class Person
{
private int age; // 使用关键字 private, 私有化该属性,只在本类中有效, 即使创建对象, 也访问不到. public void setAge(int a) // 设置值
{
if(a>0 && a<130) // 可以在此处对赋值数据进行判断
age = a;
else
System.out.println("错误的数据");
} public int getAge() // 获取值
{
return age;
} void speak()
{
System.out.println("age="+age);
}
} class PersonDemo
{
public static void main(String[] args)
{
Person p = new Person();
p.setAge = 20; // 设置值的方式
p.speak();
}
}
  • 定义: 是指隐藏对象的属性和实现细节, 仅对外提供公共访问方式.

  • 好处:

    • 隔离变化
    • 便于使用
    • 提高复用性
    • 提高安全性
  • 封装原则:

    • 把不需要对外提供的内容都隐藏起来
    • 把属性都隐藏, 提供公共方法对属性访问.

      备注: 对外提供方法的目的,是可以对属性可控. set 方法返回值类型 void, get 方法返回值类型和属性类型相同.
  • 关键字: private 是一个权限修饰符, 用于修饰类中的成员.

    **备注: **

    1. 私有的内容只在本类中有效, 即使创建对象, 也访问不到.
    2. 私有仅仅是封装的一种体现而已, java 最小的封装体是 函数. 另外, 类和框架也都是封装体.

_参考资料:_
- [JavaSE 基础视频(毕向东)](https://www.bilibili.com/video/av3091992/index_4.html#page=5)

Java 面向对象编程介绍的更多相关文章

  1. JAVA面向对象编程课程设计——网络版单机斗地主

    一.团队介绍 成员姓名 任务分配 成员课程设计博客链接 兰泽祥(组长) 数据库,斗地主规则的实现,人机自动出牌的算法,实体类的设计 JAVA面向对象编程课程设计--web版斗地主 吴修恩 JSP界面的 ...

  2. Java面向对象编程基础

    一.Java面向对象编程基础 1.什么是对象?Object 什么都是对象! 只要是客观存在的具体事物,都是对象(汽车.小强.事件.任务.按钮.字体) 2.为什么需要面向对象? 面向对象能够像分析现实生 ...

  3. java 面向对象编程。。。。

    经过一周的学习(java),总结了许多,对java的理解,java的类型,运用,安装,基础语法,变量,常量,表达式,语句 java从C语言中继承了大量语言特性.java面向对象编程的基本特征,包括继承 ...

  4. 《Java面向对象编程》

    <Java面向对象编程> 第11章 对象的生命周期 11.1  创建对象的方式 用new语句创建对象 运用反射手段,调用java.lang.Class 或者 java.lang.Const ...

  5. JAVA面向对象编程课程设计——web版斗地主

    一.团队课程设计博客链接 JAVA面向对象编程课程设计--网络版单机斗地主 二.个人负责模块或任务说明 实体类的设计 斗地主规则的实现 人机自动出牌的算法 实现数据库的DAO模式 三.自己的代码提交记 ...

  6. java面向对象编程知识点总结

    一:今天完成 上午详细了解了java面向对象编程的一些细节,记录如下. 1)类 是一种引用类型,包含一个签名和一个主体,主体是放在花括号里面的成员,成员包括字段和方法,还有构造方法.初始化程序和嵌套类 ...

  7. Java面向对象编程(一)

    由于常常将Java和C++面向对象编程的原则搞乱,所以这次把相关要点分别总结一下,本文主要总结Java面向对象编程. 面向对象编程的三大特性是:继承性(inheritance), 多态性(polymo ...

  8. JAVA学习(五):Java面向对象编程基础

    Java面向对象编程基础 面向对象(Object oriented programming,OOP)技术是一种强有力的软件开发方法,它採用数据抽象与信息隐藏技术,来使软件开发简单化,以达到代码重用的目 ...

  9. (一)如何理解java面向对象编程

    哲学中,事物总是螺旋式上升,波浪式前进.因而编程也逐渐向人类更容易理解的方向前进,多年来人们苦苦追求的编程境界 : 高扩展性(extensibility),高复用性(reuseable).java语言 ...

随机推荐

  1. codility上的问题(34) Fluorum 2014

    好久没写codility的题了.一来没时间,二来有的题目不太好分析.这个题比較有意思,我还没有给出很严格的证明.

  2. config.sql

    # mysql服务器注释支持# #到该行结束# -- 到该行结束 # /* 行中间或多个行 */ drop database if exists db_warehouse;create databas ...

  3. python学习之urlparse()

    urlparse(url, scheme='', allow_fragments=True) <scheme>://<netloc>/<path>;<para ...

  4. python学习之logging模块

    Logger.setLevel(level) 设置记录器的级别为level.低于该级别的信息将被忽略. 记录器默认级别为NOTSET.如果记录器是根记录器,则默认将记录所有信息: 如果是一个非根记录器 ...

  5. html-文本处理集-持续学习更新

    文件处理2:分区分块.有序无序 <!-- 申明HTML5版本 --> <!DOCTYPE html> <html lang="en"> < ...

  6. Ubuntu 启动项、菜单 改动 防止隐藏

    因为电脑有多个系统,默认的grub引引导菜单是隐藏的,须要略微改动下方可显示 不要直接改动boot/grub/grub.cfg  要直接改动/etc/default/grub,然后update-gru ...

  7. What is Web Application Architecture? How It Works, Trends, Best Practices and More

    At Stackify, we understand the amount of effort that goes into creating great applications. That’s w ...

  8. 在OrangePI上搭建homeassitant过程记录

    1.更换Python版本 由于在新版的homeassistant当中需要使用python3.5.3及以后的版本,但由于apt源中只包含3.5.2的版本,所以需要升级到python3.6. 具体更换方式 ...

  9. java:eclipse-tomcat 配置

    计划开始学习java.第一步 1.在servers窗口中新建server 2.弹出的界面选择对应的tomcat版本 3.这里是关键,已存在的项目不要选择过去,否则最后生成的server配置无法修改se ...

  10. 经典sql 语句大全

    一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- ...