对java面向对象的初识
我其实一直想写点东西练练自己文笔,今天写下这篇技术类型的文章也没有一个好的格式和章法,但万事开头难,那么就从面向对象开始.
我们大部分人都知道互联网软件的存在,时刻影响了我们的现实生活,那么面向对象的编程思想就是从生活中来的,软件出现的目的就是为了描述现实世界,从而解决现实生活所需,究其一点:人的思想上刻画了现实世界,用编程语言来实现,而面向对象是最符合人的思考方式的。世界各样的事物靠分类来区别开来,有实例对象来行事特例行为,程序通过也同过类与对象来一一描叙清楚
开始来谈谈面向对象里常带有的概念:类{属性/方法},对象,初始化代码块,权限修饰符;特征(继承,多态,封装);其他涉及到(抽象,接口,单例模式.....其实这也是3大特征有关),这里面的思想贯穿整个java 的编程语言,理解起来还有靠后期慢慢在实践中领悟了。
一:类与对象
(1)类的加载顺序:程序代码在任何时候都有一个执行顺序,一个java文件从被加载到被卸载这个生命过程,总共要经历5个阶段,JVM将类加载过程分为:1
加载->链接(验证+准备+解析)->初始化(使用前的准备)->使用->卸载。但我们必须知道的是静态代码执行初始化顺序依次是:(静态变量、静态初始化块)–>(变量、初始化块)–> 构造器;如果有父类,则顺序是:父类static方法 –> 子类static方法 –> 父类构造方法- -> 子类构造方法。
(2)属性:概念主要有两个:成员变量(有的把static修饰的变量也叫成员变量,但我一般把这里的变量成为全局变量,因为他的属性数据的共享时间与共享范围和类一起,就是牛)与局部变量。从实际出发去考虑这两个存在的价值,例如:一个人带有属性有:身高,年龄,性别等自身天生就有;而他在一次去参加篮球比赛是领了球衣11号,因此,在这次运动中他获得了新的属性值,该属性值也会随着球赛的结束而消失。前者就可以定义成为成员变量,后者球号就可以只定义在打篮球时才有的属性,打篮球的功能行为可以写成此类的实例方法,当他在想打篮球是又可以领11号球衣完成行为方法。一个例子解释了成员变量,局部变量,和实例方法。由于使用的范围不一样,成员变量发在内存堆里(等类加载完了之后才算完),局部变量放在内存栈里(方法一结束就把里面的局部变量全清空,不用等类加载完)。
(3)方法:上面的内容已经解释了一种,还有补充。类方法(static修饰的方法,与类的静态属性一起同时加载,由于加载时间比实例方法早而且一直跟类一起存在,出现两种调用情况:【a】后来被调用的实例方法可以写静态方法,类方法里不能直接使用类方法,理由是已经加载还么有完不能再次被类加载,只能被调用。【b】在静态方法中只能通过new对象的方式去调用其他的类方法,我想的是这个对象引用无需加载执行任何一处的功能);介绍到了对象就可以介绍构造方法了。
(4)构造器:当创建一个无参对象时,类里都会有一个无参默认构造方法,一定要注意当new对象时不光是自己定义一个有参的构造方法,还应该把默认构造方法手动添加上去。作用:①创建对象 ②给创建的对象的属性赋值(类对象的属性赋值的先后顺序:①属性的默认初始化 ②属性的显式初始化③通过构造器给属性初始化④通过"对象.方法"的方式给属性赋值;赋值可以有四种,但类外用创建对象时给他赋值又方便又效率)
二:三大特性
(1)封装:概念很少,一句话:属性藏起来,公共方法提供其访问(开发时,记住,属性是用于存储数据的,直接被访问,容易出现安全隐患,所以,类中的属性通常被私有化,并对外提供公共的访问方法。/私有仅仅是封装的⼀一种体现形式而已)。总体好处:将变化隔离;便于使⽤用;提⾼高重用性;安全性。
封装以多种形式实现代码的复用:
a.数组⽤用于封装数据,就是⼀一个具体的实体;
b.啥事实体的问题,就是用于封装多个数据的
c.啥是对象?对象是将函数等一些内容进⾏行了封装。
d.多程序读取⼀一个配置⽂文件时,建议配置⽂文件封装成对象。
e.内部类之所以定义在内部就是为了封装。想要获取内部类对象通常都通过外部类的⽅方法来获取。这样可以对内部类对象进行控制。
f.异常就是 java 按照⾯面向对象的思想将问题进行对象封装。这样就方便于操作问题以及处理问题。
g.包是⼀一种封装形式,⽤用于封装类,想要被包以外的程序访问,该类必须 public.
h.对字符串进行了对象的封装。这样的好处是可以对字符串这种常⻅见数据进行⽅方便的操作。对象封装后,可以定义 N 多属性和行为。
i.基本数据类型对象包装类:是按照⾯面向对象思想将基本数据类型封装成了对象。好处:1:可以通过对象中的属性和行为操作基本数据。2:可以实现基本数据类型和字符串之间的转换
j.DateFormat df = new SimpleDateFormat(); 该对象的建⽴立内部会封装⼀一个默认的⽇日期格式。11-12-1 下午1:48
k.因为字符每个国家都不⼀一样,所以涉及到了字符编码问题,那么 GBK 编码的中⽂文⽤用unicode 编码解析是有问题的,所以需要获取中⽂文字节数据的同时+ 指定的编码表才可以解析正确数据。为了方便于文字的解析,所以将字节流和编码表封装成对象,这个对象就是字符流。只要操作字符数据,优先考虑使用字符流体系。
l.反射技术: 其实就是动态加载⼀一个指定的类,并获取该类中的所有的内容。而且将字节码文件封装成对象,并将字节码⽂文件中的内容都封装成对象。
我已经列举了很多,值得注意的是23种设计模式的思想会有很多会用封装的思想,自己也可以为自己的项目写一些封装代码重复用免得重复写浪费时间。贴切的说一个例子,没有封装就是人自己动手搬每一块砖,有了之后可以自己创出能扮砖的容器,一次用完了下次可以继续使用它去完成同样的事,又称封装的工具。
隐藏:权限修饰符(public private protect 缺省;package /import都会用到)
(2)继承:单继承与多接口实现的完美配合使得我们在编写程序时更灵活,为了扩展实现功能有了子承接父页的继承(extends)关系,有了血缘关系就会有高耦合的弊病,最后用了接口,发现开发中接口的解耦的能力还不够,希望能分成独立的模块去完成但他们之间彼此还是有联系的高内聚不能减少,到现在我和同事就用spring框架去完成项目,效率提高了还很少有代码的牵扯。
回来继续说,1.抽象类(abstract)被继承也能被创建对象,注意至少有一个是非私有的抽象方法,还可以使用main方法。通常是被继承又子类去实现了。2.接口(interface)只能定义抽象方法和常量,实现它的子类必须实现它的所有的方法,扩展性是多样的比单继承好,一般优先考虑。
(3)多态:体现:父类引用或者接口的引用指向了自己的子类对象。//Animal a = new Cat()。多态的弊端:当父类引用指向子类对象时,虽然提高了扩展性,但是只能访问父类中具备的方法,不可以访问⼦类中特有的方法。(前期不能使用后期产生的功能,即访问的局限性)。多态是在思想上的改变:以前一个对象只能指挥一个对象去工作,现在可以一个引用可以去调用多个对象的方法使用。
每次都很想把博文写得更完善些,更能有所得,但学习可能眼界得局限性,所以希望大家能指出我的不足之处。
对java面向对象的初识的更多相关文章
- 081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字
081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字 本文知识点:new关键字 说明:因为时间紧张,本人写博客过程中只是 ...
- 080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则
080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则 本文知识点:单一职责原则 说明:因为时间紧张,本人写博客过程中只是 ...
- 079 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 04 实例化对象
079 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 04 实例化对象 本文知识点:实例化对象 说明:因为时间紧张,本人写博客过程中只是对知 ...
- 078 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 03 创建类
078 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 03 创建类 本文知识点:创建类 说明:因为时间紧张,本人写博客过程中只是对知识点的关 ...
- 077 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 02 类和对象
077 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 02 类和对象 本文知识点:类和对象 说明:因为时间紧张,本人写博客过程中只是对知识点 ...
- 076 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 01 Java面向对象导学
076 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 01 Java面向对象导学 本文知识点:Java面向对象导学 说明:因为时间紧张,本人 ...
- 八、Java面向对象编程
Java面向对象 初识面向对象 面向过程 & 面向对象 面向过程思想 步骤清晰简单,第一步做什么,第二部做什么... 面对过程适合处理一些较为简单的问题 面向对象思想 物以类聚,分类的思维模式 ...
- JAVA面向对象
JAVA面向对象 对象 我们生活中能看到能摸到的一切事物都是对象.在程序中模拟出生活中的所有东西万物皆对象 只要是对象--属性和行为(方法) 属性 对象有什么 例如:学生有姓名.学 ...
- 理解JAVA - 面向对象(object) - 属性,方法
理解JAVA - 面向对象(object) - 属性,方法 多态的体现: 向上造型,父类接收子类对象:向上造型: 从父类角度看不到子类独有的方法:面向对象,人类认知世界的方式:生活中每天都 ...
随机推荐
- 咖啡师之路:第一日一杯Espresso
代码敲累了.产品要发布了.熬夜啊加班啊. 精神完全不在状态. 咋办--- 咋办--- 咋办---! 来一杯Espresso浓缩咖啡.各位码农,码神们的必备良品! 咖啡每天要2-3杯,不管是速溶还是现磨 ...
- html5部分相关
滚动速度属性 scrollamount 例子<marquee scrollamount="3">这个速度是3</marquee> <marquee s ...
- 转换器2:ThinkPhp模板转Django模板
前天写了个<ThinkPhp模板转Flask模板> 居然被同事鄙视了,原因是他用Django,我用Flask,为了避免被他继续安利Django的强大.我决定写一个Django模板转换器. ...
- F# 语法概览
F#和C#的语法差别 语法上,F#和C#有两个主要差别: 用缩进而非花括号分隔代码块 用空白而非逗号分隔参数 F#常见语法元素 以下是F#代码中常见的语法元素 注释 // 这是单行注释 (* 这是多行 ...
- HTML5学习笔记<五>: HTML表单和PHP环境搭建
HTML表单 1. 表单用于不同类型的用户输入 2. 常用的表单标签: 标签 说明 <form> 表单 <input> 输入域 <textarea> 文本域 < ...
- final 、finally 和 finalize()的区别
1. final 是一个关键字.可以修饰数据.方法.类. 1)final 数据:final 用来修饰一个永不改变的编译时常量,或者运行时初始化但是不希望被改变的常量.一个既是 static又是 fin ...
- 关于<context:property-placeholder>的一个有趣现象
转:http://stamen.iteye.com/blog/1926166 先来看下A和B两个模块 A模块和B模块都分别拥有自己的Spring XML配置,并分别拥有自己的配置文件: A模块 A模块 ...
- XShell连接本地Ubuntu虚拟机
VMware Workstation 安装好本地虚拟机之后,直接在虚拟机上敲命令着实不方便. 这个时候我们就需要一个远程命令工具来管理虚拟机,这里推荐使用XShell远程命令行工具 1.下载工具 直接 ...
- Oracle数据块损坏的恢复实例
测试环境:11.2.0.4 1.构建数据块损坏的测试环境 2.有备份:常规恢复坏块 3.无备份:跳过坏块 1.构建数据块损坏的测试环境 1.1 创建测试表 --Create Table t_test ...
- ucenter单点登录
首先我们先来了解下Ucenter登录步骤 1.用户登录discuz,通过logging.php文件中的函数uc_user_login对post过来的数据进行验证,也就是对username和passwo ...