疯狂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基础学习(三)—面向对象(上)
一.理解面向对象 面向对象是一种思想,是基于面向过程而言的,就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节:这种思想是将数据作为第一位,而方法或者说是 ...
随机推荐
- 使用纯生js操作cookie
前段时间做项目的时候要使用js操作cookie,jquery也有相应的插件,不过还是觉得纯生的js比较好,毕竟不依赖jq. //获得coolie 的值 function cookie(name) { ...
- O(n)空间复杂度,打印杨辉三角形的前n行
做小米的笔试题,给出一个整数n,求出它在杨辉三角形中第一次出现的行号. 想了半天,只能暴力法,从第1行开始找,一直找到第n行,若找得到则返回行号,若找不到则返回n+1(因为第n+1行第2列肯定是n). ...
- springMVC学习(11)-json数据交互和RESTful支持
一.json数据交互: json数据格式在接口调用中.html页面中较常用,json格式比较简单,解析还比较方便. 比如:webservice接口,传输json数据. springMVC进行json交 ...
- Unity3D SerialPort处理
using UnityEngine; using System.Collections; using System; using System.Threading; using System.Coll ...
- vcenter修改用户密码的方法
https://192.168.x.x:9443登录,必须用administrator@vsphere.local登录,不能用root用户登录. 主页-系统设置- Single Sing-On-用户和 ...
- 本地管理表空间和字典管理表空间的特点,ASSM有什么特点
字典管理表空间(Dictionary-Managed Tablespace简称DMT),8i以前包括以后都还可以使用的一种表空间管理模式,通过数据字典管理表空间的空间使用. Oracle使用两个字典来 ...
- css border
CSS border用于设置HTML元素(如div)的边框,包括边框的宽度.颜色和样式.本文章向码农介绍CSS border边框属性详细内容,感兴趣的码农可以参考一下. CSS 边框即CSS bord ...
- 使用HTML引用标签来分隔Ticket回复
今天在查看Ticket的时候,发现如何和客户之间有很多个来回,Ticket的Correspondence就会很长很长,虽然我们有自己的Breakline,但是由于客户回复邮件时,添加的用于分隔旧信息和 ...
- blktrace未公开选项网络保存截取数据
本文链接地址: blktrace未公开选项网络保存截取数据 我们透过blktrace来观察io行为的时候,第一件事情需要选择目标设备,以便分析该设备的io行为.具体使用可以参考我之前写的几篇:这里 这 ...
- Web of Science数据库中文献相关信息下载与保存
1. Web of Science 数据库(https://apps.webofknowledge.com/): a. 所在网络必须由访问 该网站的权限. b.建议使用web of Science的核 ...