Java面向对象㈠ -- 封装
Java的面向对象有三大特征:封装、继承、多态。这里主要对封装进行讲解。
封装可以理解为隐藏一个类的成员变量和成员函数,只对外提供需要提供的成员函数。
Java的封装主要通过访问权限控制符:private,默认,protected,public来实现。(这四个权限访问控制符的区别网上有很多,建议读者自行搜索学习,切记要亲自练习一下!)
最明显的实现就是把类的成员变量私有(private),只能通过类的成员函数来进行访问,并且此时的成员函数公有(public)。这就是著名的setter/getter方法。
说到Java的封装,不得不提到构造函数,每次通过创建一个对象的时候,构造的函数都会被调用。构造函数可以重载,但是不能被覆盖。另外与构造函数类似的是构造代码块。
Java的封装本身是很简单的,只是在这里另外介绍两个关键字:this,static。
this代表当前对象的引用,当使用这个对象的成员变量和成员函数时,实际上会有一个隐式的this在前面(确切的说是this.)。只是有些时候,我们需要显式的写出,这种情况在Java面向对象㈠ -- 封装②进行讨论。
static是静态的意思,static可以修饰成员变量和成员函数,也可以直接修饰一段代码块。用static修饰的成员可以通过类名直接调用,当然通过实例对象也可以调用。
事实上被静态修饰的成员并不依赖于任何对象,它直属于当前类,并被类的所以实例对象共享。需要注意的是,静态成员可以被非静态调用,而不能直接调用非静态。静态中不允许出现this,super关键字。
通过下面一个例子,对Java的封装进行进一步扩展。
代码中主要涉及(静态,构造,局部)代码块,还有构造函数与this的用法。
public class Demo {
private String name = "hehe";
static{
System.out.println("jingtai ...");
}
{
System.out.println("gouzhao ...");
}
public Demo(){
System.out.println("gouzhao ... hanshu");
}
public void say(){
System.out.println(name);
}
public void say(String name){
System.out.println(name);
System.out.println(this.name);
}
public static void main(String[] args) {
{
System.out.println("jubu ...");
}
new Demo().say();
new Demo().say("hao");
}
}
输出结果:
jingtai ...
jubu ...
gouzhao ...
gouzhao ... hanshu
hehe
gouzhao ...
gouzhao ... hanshu
hao
hehe
当类进行加载的时候,静态就被加入内存,分配空间,包括静态代码块会被执行,并只有一次。
每次new创建对象的时候,构造代码块和构造函数会被执行。
类的成员变量和成员函数会被分配空间,并对成员函数进行默认的初始化。
在函数体内,单独的用{}括起的代码叫做局部代码块,只被执行一次。
在函数say中,声明了局部变量name,只是声明位置是在参数列表中。这是成员变量name就不会被访问到,
这里就可以用到this,即使用当前对象的name。实际上这就是成员变量和局部变量的范围问题。
Java面向对象㈠ -- 封装的更多相关文章
- Java面向对象封装和继承
面向对象 什么是面向过程.面向对象? 面向过程与面向对象都是我们编程中,编写程序的一种思维方式. 面向过程的程序设计方式,是遇到一件事时,思考“我该怎么做”,然后一步步实现的过程.例如:公司打扫卫生( ...
- JAVA面向对象-----封装
我们日常使用的电脑主机,把cpu.内存.主板等等都封装到机箱里面去.假如没有机箱的话的出现什么问题,主机.主板全部都散落在一处,然后开机没有开机按钮,那么需要我们直接操作接跳线才能把电脑开启.这样子的 ...
- Java面向对象----封装概念
封装 信息隐藏,隐藏对象的细节 访问修饰符 public private protected 默认 属性封装的实现 方法封装的目的(隐藏方法实现细节) package com.tanlei.newer ...
- Java面向对象封装优化2_构造方法
1. 类 package cn.itcast.day06.demo05; /* 一个标准的类通常要拥有下面四个组成部分: 1. 所有的成员变量都要使用private关键字修饰 2. 为每一个成员变量编 ...
- 学习练习 java面向对象封装汽车
package com.hanqi; //汽车 public class Car { // 车牌 private String CheP; // 油箱容量 private double YouXRL ...
- java 面向对象 — 封装
- Java面向对象封装优化1_this(Python中的self)
1. 类 package cn.itcast.day06.demo03; /* 问题描述:定义Person的年龄时,无法阻止不合理的数值被设置进来. 解决方案:用private关键字将需要保护的成员变 ...
- Atitit usbQb212 oo 面向对象封装的标准化与规范解决方案java c# php js
Atitit usbQb212 oo 面向对象封装的标准化与规范解决方案java c# php js 1.1. 封装性是面象对象编程中的三大特性之一 三个基本的特性:封装.继承与多态1 1.2. 魔 ...
- java基础1.0::Java面向对象、面向对象封装、抽象类、接口、static、final
一.前言 一直以来都是拿来主义,向大神学习,从网上找资料,现在就把自己在工作中和学习中的所理解的知识点写出来,好记星不如烂笔头,一来可以作为笔记自己温习,二来也可以给走在求学之路的同学们一点参考意见, ...
随机推荐
- 关于CSS初步入门简述1
关于CSS的简介可以自行百度,本篇只考虑内容 首先关于CSS会由浅入深,写在前面的有很多不严谨,只是为了引出后文所写.不过如果谬误较大,敬请指正! 1.大部分的代码要写在之中 简单的例子: <b ...
- python之列表、字典、集合
列表 name = ["Alex","Eenglan","Eric"] print(name[0]) print(name[1]) prin ...
- ie7中ul不能嵌套div和li平级
我要讲一个忧伤的故事,本以为清晰的层次结构,ul里不能嵌套div和li平级,不然会乱乱乱! 代码: <ul class="catshow"> ...
- 谈事件冒泡(Bubble)和事件捕捉(capture)
事件的发生顺序 假设在一个元素中又嵌套了另一个元素并且两者都有一个onClick事件处理函数(event handler).如果用户单击元素2,则元素1和元素2的单击事件都会被触发.但是哪一个事件先被 ...
- 集成Visual Studio/MSBuild的开发/发布流程和 FIS3
谁不想让自己的网站速度更快?为此需要多方面的优化,但优化又会增加开发工作量.Fis3 是很不错的前端优化工具,能够让前端的优化变得自动方便,解决前述问题.Fis3是百度开发的,开源的,在国内比较六流行 ...
- 安卓开发学习经历2--《第一行代码》coolweather项目SQL语句同一个“陷阱”掉两次 注意转义字符等特殊字符正确书写 关于Id字段自增加体会
今天,在运行<第一行代码>coolweather第二阶段代码,又一次报错,还是神奇地与昨天相似,提示,city_id字段不存在,这里我有两种理解,一种是sql语句出错了,另外一种是没有获取 ...
- 基于android平台的出题软件---- 每日30题
本app共编写了3个activity,1.Mainactivity作为主界面.2.surface,用来显示随机出的题.3.showresult,用来打印所有做过的题(含结果),一个类function用 ...
- jquery对象和dom对象的相互转换
更好的学习jquery,要区分好jquery对象和dom对象的区别. 先具体说说dom.举个例子 <html> <head></head> <body> ...
- 树莓派(Raspberry Pi)日期时间不准的修正方法
在树莓派上,打date命令可以看到系统的日期时间: 后面的CST表示中国标准时间 小知识: 树莓派没有电池,断电后无法保存时间. 树莓派默认安装了NTP(Network Time Protocol)服 ...
- 闪回恢复区大小不够。报ORA-19809、ORA-19804
问题: 闪回恢复区大小不够,rman默认备份路径报错.RMAN> backup database;Starting backup at 01-DEC-14using target databas ...