疯狂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基础学习(三)—面向对象(上)
一.理解面向对象 面向对象是一种思想,是基于面向过程而言的,就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节:这种思想是将数据作为第一位,而方法或者说是 ...
随机推荐
- 学习 ASP.NET MVC
http://www.cnblogs.com/gaoweipeng/category/203080.html http://blog.csdn.net/liu_ben_qian/article/det ...
- BEGIN-2_蓝桥杯_序列求和
问题描述 求1+++...+n的值. 输入格式 输入包括一个整数n. 输出格式 输出一行,包括一个整数,表示1+++...+n的值. 样例输入 样例输出 样例输入 说明:有一些试题会给出多组样例输入输 ...
- charles只获取指定的请求的设置方法
过滤网络请求 通常情况下,需要对网络请求进行过滤,只监控指定服务器的请求.有3种办法: 方法一:在主界面的中部的 Filter 栏中输入需要过滤出来的关键字.例如我们的服务器的地址(host)是:ww ...
- Mysql-binlog的移动和归档
#!/bin/bash # To backup and archive binlogs. declare -i NUM=0 declare -i SUM=0 SUM=`/bin/ls -l mysql ...
- Hibernate inverse反转
inverse: inverse: 指定由哪一方来维护之间的关联关系 false默认,表示不放弃,是主动放 true:表示把关联关系的维护反转(放弃),对集合对象的修改不会被反映到数据库中 容易出现的 ...
- 深度学习中的Normalization模型
Batch Normalization(简称 BN)自从提出之后,因为效果特别好,很快被作为深度学习的标准工具应用在了各种场合.BN 大法虽然好,但是也存在一些局限和问题,诸如当 BatchSize ...
- QQ去除聊天框广告详解——2016.9 版
QQ聊天框广告很烦人,百度出来的一些方法早已过时,下面是博主整理出来的方法,供各位同学参考. 1.按键盘上的 Win+R 快捷键打开运行框,然后复制并粘贴 Application Data\Tence ...
- django (装饰器,母版继承,自定义,request对象,response对象)
1. 装饰器 1. def wrapper(fn): def inner(*args,**kwargs): 执行被装饰函数之前的操作 ret = fn(*args,** ...
- mac mysql中文乱码问题
God,今天看了好多资料,除了让我命令更熟练以外浪费了好多时间. 遇到的问题:写入数据库有中文的时候,显示??? 最后解决办法: 1.打开终端,输入: mysql -u root -p,然后输入mys ...
- Python Flask 多环境配置
Python里取配置文件的时候,之前是使用的ini文件和python里configparser 模块: 可参考:https://www.cnblogs.com/feeland/p/4514771.ht ...