面向对象Part2
`变量:
成员变量:又叫全局变量,定义在类中,方法外面.
1).类成员变量. 使用Static
2).实例成员变量. 没有使用Static.
局部变量:出了成员变量,其他的都是局部变量.
1).方法内部的变量.
2).方法的形参.
3).代码块中的变量.一对花括号中的变量.
---------------------------------------------------------------------------------------------------------------------
变量的初始值:
成员变量默认是有初始值的.

局部变量:没有初始值,所以必须先初始化才能使用.否则会报错尚未初始化.初始化才会在内存中开辟空间.
----------------------------------------------------------------------------------------------------------------------
变量的作用域:
变量根据定义的位置不同,也决定了各自的作用域是不同的.看{}
成员变量:在整个作用域中都有效.
局部变量:从开始定义的位置开始到紧跟着结束的{}为止.
成员变量可以先使用后定义. 局部变量必须先定义而后使用

这里的先使用后访问是眼睛中看到的先后顺序. 如果要调用System.out.println(x)则一定会访问方法doWork()
doWork没有加static修饰.访问doWork方法必须用对象去访问,在构建对象的时候 ABC s = new ABC(); 调用 s.doWork(x) String x 已经存在,在new对象ABC()存在.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
变量的生命周期: 


package:
语法: package 子包.子子包 必须把该文件作为java文件中所有代码之前.


java常见包:

全限定名称:包名+类名.
import关键字:



package在第一行, import在package下面.
可以写多个import.只能写一个package.
通配符(*) import java.until.* 引入until包下所有在该文件中使用到的类, 此时的*表示类名.
----------------------------------------------------------------------------------------------------------------------------------------------
静态导入(static import):


static成员名可以用通配符表示
import static java.until.Arrays.*;

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
封装思想:



封装setAge确保了age的安全性.
封装其实就是让有些类看不到一些类做了什么事情.所以用权限修饰符来暴露和隐藏.
private:类访问权限. 只能在本类中访问,离开本类无法访问. 可以通过间接访问. 例如:通过方法调用a, 然后将a赋值给age.访问了 private age

不写访问权限(缺省):包访问权限.只有在同一个包中才能访问.
protected:子类访问权限.同包可以访问,即使不在同一包,有继承关系也可以访问.
public:表示全局的. 可以在当前项目中任何地方访问.


如果父类仅仅暴露给子类,用protected.
JAVAbean:
不要把成员变量叫做属性,属性和字段是两种完全不同的东西.

如果操作的字段是boolean类型, 此时不应该叫getter方法,把getName编程isName.
setter方法:

每一个字段都得提供一对setter/getter.
以后使用Eclipse工具之后, getter/setter工具都是自动生成的.

This关键字: this指字段中的变量.

什么是this:
this主要存在于两个位置:
1).构造器中:
表示当前创造的对象.
如: User u1 = new User(). 如果此时打印u1,则会打印出十六进制的哈希编码地址值. 在这行代码中,编译时系统会为程序创建一个缺省的构造器.
User(){} 如果此时在缺省构造器中编写 System.out.println(this) 系统输出的值是和上文相同的十六进制哈希编码地址值. 这就说明了this在编译器中表示当前创造的对象.在这里,this表示的是当前创造的对象u1.
2).方法中:
哪一个对象调用this所在的方法,那么this就表示哪一个对象.
当一个对象创建之后,JVM会分配一个引用自身的this. 
this关键字的使用:
1).解决成员变量和参数的二义性.必须要用.
2).同类中实例方法之间的互相调用问题,在实际编写过程中我们习惯省略this.show()的this. 其实这类问题只需要想明白是谁来调用方法的就可以找到this指代的是谁.
.
3)可以把this当做参数传给另一个方法.
4)将this当做方法的返回值(链式方法编程)
5)static和this不能一起使用.
6:构造器重载时的互相调用问题
this(name) 构造器判断调用重载构造器,参数为string.
一个构造器中只能调用一个重载构造器.且必须作为构造器的第一句话. 语法格式 this(实参)通过实参的个数,数据类型判断调用哪一个重载构造器
当多个方法重载或多个构造器重载时. 我们一般是少参数调用多参数.参数越多,考虑的因素也就越多,功能更强大.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
创建对象并给对象设置初始值有两种方式:
1)先通过无参数构造器创建出一个对象,再通过对象调用相应的setter方法.
2)直接调用带参数的构造器,创建出来的对象就拥有了初始值.
通过构造器和通过setter方法都可以完成相同的功能.
给对象设置数据:
1).setter注入(属性注入)
2).构造注入

根据不同的需求和合理性选择使用构造器带参数还是getter,setter.
面向对象Part2的更多相关文章
- 面向对象 part2 属性的特性
6.1.1理解对象 创建自定义对象最简单的方式就是创建一个object实例.然后添加方法和实例 var person = new Object() person.name = "hi&quo ...
- Java学习之==>面向对象编程 Part2
一.封装 封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结 ...
- 小课堂week13 Clean Code Part2
Clean Code Part2 对象与数据结构 首先让我们进行一个严肃的思考,对象与数据结构的区别在哪里? 如下两段代码分别用数据结构和对象的方法来描述了一个Point. public class ...
- day 25 面向对象之接口、抽象类、多态、异常处理、反射、断言
复习 '''继承1.父类:在类后()中写父类们class A:passclass B:passclass C(A, B):pass2.属性查找顺序:自己 -> ()左侧的父类 -> 依 ...
- python自动化开发-[第八天]-面向对象高级篇与网络编程
今日概要: 一.面向对象进阶 1.isinstance(obj,cls)和issubclass(sub,super) 2.__setattr__,__getattr__,__delattr__ 3.二 ...
- 面向对象开发C++快速入门视频教程 C++基础加实战视频教程
课程目录: ├<C++面向对象高级开发(上)> │ ├1.C++编程简介.mp4 │ ├2.头文件与类的声明.mp4 │ ├3.构造函数.mp4 │ ├4.参数传递与返回值.mp4 │ ├ ...
- python基础——18(面向对象2+异常处理)
一.组合 自定义类的对象作为另一个类的属性. class Teacher: def __init__(self,name,age): self.name = name self.age = age t ...
- C++面向对象程序设计_Part2
目录 Composition(复合) 内存视角下的composition(复合) composition(复合)关系下的构造与析构 Delegation (委託) -- Composition by ...
- python语言(七)面向对象、异常处理
一.异常处理 python解释器检测到错误,触发异常(也允许程序员自己触发异常).程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关).如果捕捉成功则进入另外一个处理分 ...
随机推荐
- [LeetCode] Roman to Integer 罗马数字转化成整数
Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 t ...
- mysql中间件atlas配置使用
MySQL所在机器: 192.168.16.70(Master) 192.168.16.74(Slave) 192.168.16.72(atlas)注意:主从复制需要自行配置atlas配置使 ...
- java日志学习笔记
一.日志家族 Log4j一开始就很强大,在jdk自带日志系统之前,apache就曾经尝试把log4j划为java的一部分,不知为何没能成功,sun还是用了自己很弱的日志系统.为了兼容各个日志系统,ap ...
- mybatis一对多关联
这里的一对多指的是:当我们查询一个对象的时候,同时将其有关联的多方对象都查询出来. 下面以国家(Country)和部长(Minsiter)做案例 一个国家有多个部长 1.定义实体 定义实体的时候需要注 ...
- 使用bat(批处理文件类型)两步更改笔记本IP
一.背景 在南农工的第三年里,学校终于给教学区覆盖了无线网NJAUPK,这解决了我在汇贤楼教室上自习没网写web的尴尬处境!经常在9栋和汇贤楼教学区之间来回,遇见了一个大问题:宿舍里无线需要更改IPV ...
- 日历插件FullCalendar应用:(二)数据增删改
接上一篇 日历插件FullCalendar应用:(一)数据展现. 这一篇主要讲使用fullcalendar插件如何做数据的增删改,用到了art.dialog web对话框组件,上一篇用到的webFor ...
- celery使用方法
1.celery4.0以上不支持windows,用pip安装celery 2.启动redis-server.exe服务 3.编辑运行celery_blog2.py !/usr/bin/python c ...
- shell命令find
概述 find命令的工作方式:沿着文件层次结构向下遍历,匹配符合条件的文件,并执行相应的操作. 选项 -print:指明打印出匹配文件的文件名(路径).当使用-print时,'\n'作为用于分隔文件的 ...
- cent6.4使用
让centos能够上网 刚安装了时,是不能联网的,我们可以通过以下命令更改即可: cd /etc/sysconfig/network-script vi ifcfg-eth0 更改其中的ONBOOT= ...
- Z字形扫描(201412-2)
问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan).给定一个n×n的矩阵,Z字形扫描的过程如下图所示: 对于下面的4×4的矩阵, 1 5 3 9 3 7 5 ...