疯狂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基础学习(三)—面向对象(上)
一.理解面向对象 面向对象是一种思想,是基于面向过程而言的,就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节:这种思想是将数据作为第一位,而方法或者说是 ...
随机推荐
- 使用scrapy框架爬取自己的博文(3)
既然如此,何不再抓一抓网页的文字内容呢? 谷歌浏览器有个审查元素的功能,就是按树的结构查看html的组织形式,如图: 这样已经比较明显了,博客的正文内容主要在div 的class = cnblogs_ ...
- 【appium】根据name定位元素
目前没有尝试成功,等成功后补充 个人建议可以尝试先用view显示的文本作为name看是否能拿到该控件,按照我个人的经验一般都是会成功的,所以我很怀疑安卓上面控件的name是否就等于text.
- Oracle RAC的机制与测试方法
Oracle RAC的机制与测试方法 标签: rac 机制 测试 2016-05-25 09:54 1150人阅读 评论(0) 收藏 举报 分类: oracle(2) 1.RAC原理 Oracle ...
- 第5章 pandas入门
pandas是专门为处理表格和混杂数据设计的,NumPy更适合处理统一的数值数组数据. pandas的数据结构: Series:Series是一种类似于一维数组的对象,它由一组数据(各种NumPy数据 ...
- 关于UC、火狐、谷歌浏览器屏蔽布局中广告的解决办法
关于UC浏览器屏蔽了广西人才网的名企.品牌.热点的logo,是因为当成广告过滤掉了,以后div的class和id不能以“ad”开头.这可能只是其中一个规则,adxxxx是可以的,不能是adXxxx, ...
- 1043 Is It a Binary Search Tree (25 分)
A Binary Search Tree (BST) is recursively defined as a binary tree which has the following propertie ...
- [UE4]射中机器人
- keras中调用tensorboard:from keras.callbacks import TensorBoard
from keras.models import Sequential from keras.layers import Dense from keras.wrappers.scikit_learn ...
- Effect
/////////////////////////////////shader source/////////////////////////////////Texture2D colorMap : ...
- fio与dd测试结果记录
以下测试基于win7内安装的vbox虚机内进行. vbox-vm挂载了7.2k disk作为本地系统盘,挂载了ssd 8G空间作为mount /mnt/data /dev/sdb 今天顺便了做个一个简 ...