面向对象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解释器检测到错误,触发异常(也允许程序员自己触发异常).程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关).如果捕捉成功则进入另外一个处理分 ...
随机推荐
- jquery基本操作笔记
来源于:http://www.cnblogs.com/webcome/p/5484005.html jq和js 可以共存,不能混用: 1 2 3 4 5 6 $('.box').css('backgr ...
- FFmpeg 转码和截屏
转码 (flv转码为MP4,libx264是MP4编码格式 , -b 3000k是码率,比特率) ffmpeg -i /home/ghr/mp4/mp4.flv -vcodec libx264 -b ...
- sql server 中隐藏掉无关数据库
先贴上我实际测试的效果 方法一: Problem I have a SQL Server instance that has hundreds of databases. Navigating th ...
- 【BZOJ 2595】【WC 2008】游览计划
http://www.lydsy.com/JudgeOnline/problem.php?id=2595 斯坦纳树的例题诶...我怎么做了好长时间_(:з」∠)_ 首先这是一棵树. 状压表示状态,\( ...
- C++:通过gethostbyname函数,根据服务器的域名,获取服务器IP
本代码的编译环境为MAC,系统版本为10.11.6: #include <string.h> #include <netdb.h> #include <stdio.h&g ...
- 通过维基API实现维基百科查询功能
通过英文维基的免费API,可以实现对维基百科的搜索查询或者标题全文查询等,尝试了一下通过title实现全文查询,返回的结果是wikitext格式,暂时不知道该如何应用,所以仅实现了查询功能,可以返回最 ...
- sql查询,不在某一范围问题的新思路
新思路: A为学生表 B为中间表(学生和课程的) C为课程表 新的思路是用left join,(right join应该也可以) 查询没有选课的学生 ... C left join B on A.si ...
- JavaScript系列文章:详解正则表达式之二
在上一篇文章中我们讲了正则表达式的基本用法,接下来博主想聊聊其中的细节,今天就从正则修饰符开始吧. 正则修饰符又称为正则标记(flags),它会对正则的匹配规则做限定,进而影响匹配的最终结果.在上次的 ...
- MYSQL远程登录权限设置 ,可以让Navicat远程连接服务器的数据库
Mysql默认关闭远程登录权限,如下操作允许用户在任意地点登录: 1. 进入mysql,GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY ...
- windows多线程编程实现 简单(1)
内容:实现win32下的最基本多线程编程 使用函数: #CreateThread# 创建线程 HANDLE WINAPI CreateThread( LPSECURITY_ATTRIBUTES lpT ...