疯狂JAVA——第五章 面向对象(上)
5.1类和对象
构造器是一个类创建对象的根本途径,如果一个类没有构造器,这个类通常无法创建实例。通过new关键字来调用构造器,从而返回该类的实例。
类名:每个单词首字母大写,其他字母小写,单词之间不要有分隔符。
成员变量名:第一个单词的首字母小写,后边的每个单词的首字母大写,其他字母全部小写,单词之间不要有分隔符。
构造器没有返回值,这是java语法的规定,如果构造器定义了返回值类型(包括void),编译时不会出错,但java会把这个所谓的构造器当成普通方法使用。
类和数组一样,类也是一种引用类型,分成两部分,一部分在栈内存中,一部分在堆内存中。java程序不允许直接访问堆内存中的对象,只能通过该对象的引用来操作对象。
类定义里边也可以生成自己的对象,比如下边的:
public class Dog
{
public void jump()
{
System.out.println("正在执行jump方法");
}
public void run()
{
Dog d=new Dog();
d.jump();
System.out.println("正在执行run方法");
}
}
为什么类定义里边还可以在生成自己的对象?
答:类定义只是声明这个类而已,就是对类的行为的一个描述,而不是去执行它。new只是生成对象,调用的构造函数,而不会调用其他的函数。所以只能在类定义的成员函数中生成自己的对象,而不能new一个成员变量,因为这样会造成无限循环,如果想生成一个成员变量,可以在外边声明一个,然后再函数里边new然后赋值。
一个没有使用static修饰的成员变量和方法都必须要用对象来调用,所以上边要先生Dog的一个对象,然后调用jump,我们也可以直接用自己的这个对象调用jump,就是用this来调用,当然这个this也可以省略掉。
5.2.2方法的参数传递机制
java里边的参数传递方式只有一种:值传递。所谓值传递就是将实际参数的副本传给方法。java对引用类型的参数传递,一样采用的是值传递方式。但是这个时候的改变会保留下来,因为虽然是值传递,但是传递进去的副本是地址,对堆内存地址里边的内容修改,这样就会改变我们的操作。
5.4隐藏和封装
private——当前类访问权限
default——包访问权限——————即没有修饰符
protected——子类访问权限
public——公共访问权限
如果一个java类的每个实例变量都被使用private修饰,并为每个市里边来那个都提供了public修饰的setter和getter方法,那么这个类就是符合JavaBean规范的类,因此,JavaBean总是一个封装良好的类。
import可以省略包名;而使用import static则可以连类名都省略。
5.5深入构造器
构造器最大的用处就是在创建对象的时候执行初始化。当创建一个对象的时候,系统为这个对象的实例变量进行默认初始化,这种默认初始化把所有的基本类型的实例变量都设为0或false,把所有引用类型的实例变量设为null。
构造器的调用只能用new关键字,但使用new就会重新创建一个新的对象,所以当我们想用自己的构造器的时候可以使用this关键字来调用相应的构造器。
5.6.2重写父类的方法
“两同两小一大”——
两同:方法名相同,形参列表相同
两小:子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等
一大:子类方法的访问权限应比父类方法大的访问权限更大或相等。
解释一下一大:这是因为向上转型及java程序设计维护的原因
例:假设一个父类A的方法public void set(),这个方法被子类B重写以后变成了void set()。假设其他包中的对象c调用方法为
get (A a)
{
a.set();
}
如果此时传入的是B类的对象,但权限不够,这将造成错误,所以——子类方法的权限应比父类方法的访问权限更大或相等。
子类中定义与父类中同名的实例变量并不会完全覆盖父类中定义的实例变量,它只是简单的隐藏父类中的实例变量,所以在分配内存的时候,父类和子类中的实例变量都会分配内存空间。
this和super都不能出现在static修饰的方法中。this和super不会同时出现(因为二者在构造器中都会要求出现在第一行)
5.7多态
java引用变量有两个类型:一个是编译时类型,一个是运行时类型。编译时类型由声明该变量时实用的类型决定,运行时类型由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,就可能出现所谓的多态。
instanceof——用于判断前面的对象是否是后面的类,或者子类、实现类的实例。如果是,返回true,如果不是,返回false。
5.9初始化块
初始化块是java类里出现的第四种成员(前面依次是成员变量、方法和构造器)。
初始化块的修饰符只能是static,使用static修饰的初始化块被称为静态初始化块。
先执行初始化块或者实例变量时指定的初始值,再执行构造器里指定的初始值。
实际上初始化块是一个假象,使用javac命令编译java类后,该java类中的初始化块会消失——初始化块中的代码会被“还原”到每个构造器中,且位于构造器所有代码的前面。
疯狂JAVA——第五章 面向对象(上)的更多相关文章
- 疯狂JAVA——第六章 面向对象(下)
6.1包装类 java为了照顾程序员的传统习惯,所以提供了八种基本数据类型.但也带来不方便,例如所有引用类型都继承自Object类,都可当做Object类型变量使用.但基本数据类型的变量就不可以.如果 ...
- java 第五章
java 第五章 while 循环语句 语法:while(循环条件){ //循环操作 循环条件自加: } while循环结构的特点:先判断,在执行. while 的执行步骤 (1) 声明 ...
- [Effective Java]第五章 泛型
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 疯狂java学习笔记之面向对象(八) - static和final
一.static: 1.static是一个标识符: - 有static修饰的成员表明该成员是属于类的; - 没有static修饰的成员表明该成员是属于实例/对象的. 2.static修饰的成员(Fie ...
- 自学Java第五章——《面向对象的基本特征》
面向对象的基本特征: 1.封装 2.继承 3.多态 6.1 封装 1.好处: (1)隐藏实现细节,方便使用者使用 (2)安全,可以控制可见范围 2.如何实现封装? 通过权限修饰符 面试题:请按照可见范 ...
- 疯狂java学习笔记之面向对象(五) - 封装、继承、多态
一.封装: 封装的概念: - 合理的隐藏:隐藏不想被外界操作的Field.方法.构造器 - 合理的暴露:一般就是希望给别人调用的方法 e.g:显示器(按键暴露出来操作,但实际的东西/细节方法被隐藏起来 ...
- 自学Java第五章——《面向对象基础》
5.1 类与对象 1.类:一类具有相同特性的事物的抽象描述. 对象:类的一个个体,实例,具体的存在. 类是对象的设计模板. 2.如何声明类? [修饰符] class 类名{ 成员列表:属性.方法 ...
- 疯狂java学习笔记之面向对象(一) - 定义类、方法、构造器
Java面向对象 1.定义类 2.创建对象.调用方法 类和对象: 某一类对象的概念定义. 比如:人类 - 抽象出来的概念(不特指某个人) 对象 - 在类的概念下产生的一个实例,它就是一个对象了. ja ...
- Java基础学习(三)—面向对象(上)
一.理解面向对象 面向对象是一种思想,是基于面向过程而言的,就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节:这种思想是将数据作为第一位,而方法或者说是 ...
随机推荐
- 【android】 adb logcat命令查看并过滤android输出log
cmd命令行中使用adb logcat命令查看android系统和应用的log,dos窗口按ctrl+c中断输出log记录. logcat日志中的优先级/tag标记: android输出的每一条日志都 ...
- redis在PHP中的基本使用案例(觉得比较实用)
源地址 http://www.t086.com/article/4901
- C/C++基础----类
IO类属于不能被拷贝的类型,因此只能通过引用来传递.同时读取和写入操作都会改变流的内容,所以接收的是普通引用. 类内的友元声明仅仅指定了访问的权限,需要在友元声明之外再专门对函数进行一次声明. 可变数 ...
- java反射例子
一.field.setAccessible()方法: setAccessible方法是干什么用的呢让我们来看一段代码吧: public class User { private String name ...
- 大家都对vertical-align的各说各话
原文地址:http://www.blueidea.com/tech/web/2008/5892.asp 最近几天仔细研究了一下vertical-align这个属性,结果让我大吃一惊,这个很“资深”的C ...
- python logging 日志模块的配置和使用
import logging logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(filename)s[line:%(line ...
- javascript控制滚动条的位置,获取控件的位置
一.如下是定位鼠标在视窗中的位置,先定位视窗和页面直接的距离. function getMousePoint() { var point = {x:0,y:0}; // 如果浏览器支持 pageYOf ...
- PHP 弹出文件下载 原理 代码
/** * @author default7<default7@zbphp.com> * @description 演示PHP弹出下载的原理 * * @param $file_n ...
- (转)Win7 64位系统下 Retional rose 2003 安装及破解
网上关于Retional rose 2003安装和破解的文章比较多,这里,我结合自己的亲身体验,和大家分享一下win7 旗舰版 64位系统下Retional rose 2003(下面简称rose200 ...
- API网关Kong系列(一)初识
最近工作需要,加上国内Kong的文章相对缺乏(搜来搜去就那么两篇文章),而且官方文档在某些demo上也有一些过时的地方,遂提笔记录下这些,希望能有帮助. 先随大流介绍下KONG(主要参考官网): 官方 ...