《Java核心技术》 -- 读书笔记 ② - 类 | 对象 | 接口
对象vs对象变量
“对象” 描述的是一个类的具体实例,他被java虚拟机分配在 "堆" (Heap)中。
“对象变量” 为一个对象的引用(对象变量的值=记载着具体对象的位置/地址),他被分配在 "栈" (Stack) 上。
Date birthday = new Date();
birthday - 即为对象变量,他被分配在 Stack 上,初始化的Date对象被分配在 Heap 中,如图:
方法的隐式参数
在Java中,通常将 this 关键字称为方法的隐式参数。例如
public class Employee{private double salary;public void raiseSalary(double byPercent){double raise = this.salary * byPercent /100; this.salary += raise;}}
final 实例域
表示该实例应在其所在类的构造函数中赋值且之后是不可变的。例如定义常量。
static 关键字的用法
1. static + variable : 定义一个属于类的变量,无论有多少个该类的实例对象,这个static变量的值均一样(指向同一个实例域)。
public class Employee{private static int uniqueCode = 12345;}
所有employee对象的 uniqueCode 都指向同一个实例域。所以他们的值都相等 =1;
2. static + final + variable: 通常用于定义常量:
public class Math {...priave static final PI = 3,1415926;... }
3. 静态方法 - 直接通过 class.function() 的方式调用
4. 工厂方法 - 通过getXXXInstance()的方式返回对象
5. Main 方法
初始化块
可以分为:
1.静态初始化块
2.对象初始化块
他们的执行顺序是根据定义的先后顺序,依次执行。例如
public class Employee{private static int nextId;private int id;// static init blockstatic {Radom radom = new Radom(); nextId = radom.nextInt(10000);}// object init block {id = 1;}}
包 (package)
目的: 保证类的唯一性;存放相同功能的一群类。
Jar (java 归档文件包)
使用 zip 格式压缩来组织文件目录以及子目录
-----
派生类调用父类的方法 super.fuc();
注意: supper 是一个关键字而不是对象。
object:所有对象的超类
hashcode() - 该方法默认情况下返回内存地址;String类型是特例他的返回值是由String的字符串值生成的。因此,当s1="OK", s2="OK"时,s1.hashcode() 等于 s2.hashcode()
泛型数组列表 - ArrayList<T>
// 定义1 ArrayList<Employee> employeeList = new ArrayList<Employee>();// 定义 2 ArrayList<Employee> employeeList = new ArrayList<>();
两种定义均可,第二种为简写形式。
在定义ArrayList是,可以传递“capacity”指定大小,这么做只是分配给数组列表,一次性存储这么多对象的“潜力”,实际上在定义的还没有没有分配空间。
ArrayList.Set(int index, T obj); //设置某位的值-覆盖原值
ArrayList.Add(int index, T obj); //添加值-原来的值后移
使用 @SuppressWarning(“Uncheck”) 来接受类型转换的警告。
pulic class Test{private ArrayList findQueryResult(){...}@SupperssWaring("Uncheck")ArrayList<Employee> list = this.findQueryResult(); }
枚举类
枚举类型实际上是一个类、他的常用发放有
valueof - 设置枚举实例的值。 Size s = Emum.valueof(Size.Class, "SMALL");
toString - 返回实例的字符串值
values - 返回全部枚举值的数组
ordinal - 返回枚举常亮的位置
反射
获取Class对象的三种方式:例如:
1. Employee.Class
2. e.getClass()
3. Class.forClass("Employee")
常用方法:
class.getName() 返回类名(完全名称,包括包名)
class.newInstance() 构造对象 : Employee e1 = Class.forClass("com.xxx.Employee").newInstance();
接口
接口定义了一系列的“行为准则”,类如果要实现(implements)接口,必须要实现接口中的所有方法。
接口中的方法默认为 “public”的,所以不必显示生命为public。
接口中的域(字段),默认为public static final
内部类
使用内部类的三种情况:
1. 访问类中的域以及数据,包括私有的域和数据。
2. 对所属包中的其他类隐藏。
3. 多用匿名方法,视线回调函数。
一、编译器在编译内部类中是,会为其添加一个对于她的外部类的引用引用,我们将它称之为“out”, 例如:
public class TalkingClock{private bool beep;private int interval;public TalkingClock(int interval, bool beep){this.interval=interval;this.beep=beep;}...public class TimePrinter(){public printTime(){if (beep){Date now = new Date();System.out.println("current is : " + now);}}}}
注: 内部类会在编译的时候修改内部类默认的构造器,如下,并且在调用的时候将外部类传递进去
public class TimePrinter(){public TimePrinter(TalkingClock tc){outer = tc;} } // pass outer object referenceTimePrinter tp = new TimePrinter(this)
二、当内部类定义为 Public 时,可以创建和引用内部类,语法如下:OuterClass.InnerClass
TalkingClock tc = new TalkingClock(10000, true); tc.TimePrinter tp= tc. new TimePrinter();
局部内部类
顾名思义,在方法的内部定义的类。注:不能用修饰符【public,private】修饰它。举例:
public class OutClass{public void start(){class innerClass{... } InnerClass ic = new InnerClass();Timmer t = new Timer(10000, ic);t.start();}}
匿名内部类
// 定义了一个匿名类,它继承 object 类; // 调用匿名类的 getClass() 方法 new Object{}.getClass();
静态内部类
当内部类不需要引用外部类的字段时,可将内部类定义成为 static 的
public class OutClass{static InnerClass{...} }
转载于:https://www.cnblogs.com/atuotuo/p/6675964.html
《Java核心技术》 -- 读书笔记 ② - 类 | 对象 | 接口相关推荐
- effective java 读书笔记——类和接口
上周因为准备考试等一堆原因,没空看书,今天补上一点. 类和接口是java程序设计语言的核心,它们也是java语言的基本抽象单元,java语言提供了很多强大的基本元素,供程序员设计类和接口,这一章讲的是 ...
- java核心技术读书笔记—继承
继承 1 类.超类及子类 1.1 定义子类 在java中,使用关键字extends进行继承,具体实现方式如下,这里Manager表示子类,Employee表示超类,下面所示关系是类Manager继承于 ...
- Java核心技术读书笔记01
Volume I Chapter 1 An Introduction to Java • 1.1 Java as a Programming Platform • 1.2 The Java 'Wh ...
- java核心技术读书笔记1
数据类型 整型 int 存储要求:4byte 取值范围:-2147483648 -- 2147483647(超过20亿) short 存储要求:2byte 取值范围:-32768 -- 32767 l ...
- java核心技术读书笔记(第二天:基本程序设计结构)
java基本程序设计结构
- java虚拟机读书笔记 第三章 垃圾收集器和内存分配策略
java虚拟机读书笔记 第三章 垃圾收集器和内存分配策略 GC需要完成的三件事情:哪些内存需要回收.什么时候回收.如何回收 垃圾回收器在对堆进行回收前,首先要确定那些对象存活,哪些对象已经死去,判断的 ...
- Core Java 8 读书笔记-Networking编程
Core Java 8 读书笔记-Networking编程 作者:老九-技术大黍 原文:Core Java 8th Edition 社交:知乎 公众号:老九学堂(新人有惊喜) 特别声明:原创不易,未经 ...
- IEnumeratorTItem和IEnumerator Java 抽象类和普通类、接口的区别——看完你就顿悟了...
IEnumerable 其原型至少可以说有15年历史,或者更长,它是通过 IEnumerator 来定义的,而后者中使用装箱的 object 方式来定义,也就是弱类型的.弱类型不但会有性能问题,最主要 ...
- Java泛型教程–示例类,接口,方法,通配符等
泛型是Java编程的核心功能之一,它是Java 5中引入的.如果您使用的是Java Collections ,并且版本5或更高版本,则可以肯定使用了它. 在集合类中使用泛型非常容易,但是它提供了比仅创 ...
最新文章
- 【组队学习】【32期】李宏毅机器学习(含深度学习)
- 会员管理scrm系统精细化运营更好促进成交
- 重磅 | 中国工程院提出新一代智能制造
- 程序世界的秘密(上)
- python如何实现通知_ExASIC: 用python实现一个通知机器人
- 站立会议-2014-04-14
- 聚合报告90%参数说明
- Stringbuffer的线程安全是怎么实现的
- Dreamweaver 8 jquery 代码提示
- 第九章 DirectX 输入和声音(下)
- HikariPool-1 - Connection is not available, request timed out after 6000ms
- Cisco Packet Tracer 思科模拟器三层交换机配置
- html5添加音波波形图,wavesurfer.js绘制音频波形图的实现
- 联想微型计算机快捷键,联想笔记本电脑快捷键大全
- 「WAYZ维智」:全国最具价值的室内外混合定位感知网络 | 百万人学AI评选
- MaxEnt运行错误
- 闪光桐人の实习日记(2023年2月20-24日)
- 【Keepass】配置好keepassnatmsg插件、keepassxc-browser扩展后,出现Failed to save to the specified file未将对象引用设置到对象
- js 下载Base64格式数据图片(兼容主流浏览器)
- 视图 setVisibility 用法
热门文章
- angularJS1.6.3个人理解(后续更新4.4.7)
- select2,利用ajax高效查询大数据列表(可搜索、可分页)
- Hoshin Kanri在丰田的应用
- 如何在linux当中,大量的添加用户
- “10%时间”:优点和缺点——敏捷海滩会议上Elizabeth Pope的报告
- 1.1机器学习基础-python深度机器学习
- Spring的beans标签下可以有其他标签
- 前端开发利器—FIDDLER 转
- .net 实现微信公众平台的用户信息获取
- php 默认是几进制数,以0x开头的是多少进制?