对象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核心技术》 -- 读书笔记 ② - 类 | 对象 | 接口相关推荐

  1. effective java 读书笔记——类和接口

    上周因为准备考试等一堆原因,没空看书,今天补上一点. 类和接口是java程序设计语言的核心,它们也是java语言的基本抽象单元,java语言提供了很多强大的基本元素,供程序员设计类和接口,这一章讲的是 ...

  2. java核心技术读书笔记—继承

    继承 1 类.超类及子类 1.1 定义子类 在java中,使用关键字extends进行继承,具体实现方式如下,这里Manager表示子类,Employee表示超类,下面所示关系是类Manager继承于 ...

  3. Java核心技术读书笔记01

    Volume I Chapter 1  An Introduction to Java  • 1.1 Java as a Programming Platform • 1.2 The Java 'Wh ...

  4. java核心技术读书笔记1

    数据类型 整型 int 存储要求:4byte 取值范围:-2147483648 -- 2147483647(超过20亿) short 存储要求:2byte 取值范围:-32768 -- 32767 l ...

  5. java核心技术读书笔记(第二天:基本程序设计结构)

    java基本程序设计结构

  6. java虚拟机读书笔记 第三章 垃圾收集器和内存分配策略

    java虚拟机读书笔记 第三章 垃圾收集器和内存分配策略 GC需要完成的三件事情:哪些内存需要回收.什么时候回收.如何回收 垃圾回收器在对堆进行回收前,首先要确定那些对象存活,哪些对象已经死去,判断的 ...

  7. Core Java 8 读书笔记-Networking编程

    Core Java 8 读书笔记-Networking编程 作者:老九-技术大黍 原文:Core Java 8th Edition 社交:知乎 公众号:老九学堂(新人有惊喜) 特别声明:原创不易,未经 ...

  8. IEnumeratorTItem和IEnumerator Java 抽象类和普通类、接口的区别——看完你就顿悟了...

    IEnumerable 其原型至少可以说有15年历史,或者更长,它是通过 IEnumerator 来定义的,而后者中使用装箱的 object 方式来定义,也就是弱类型的.弱类型不但会有性能问题,最主要 ...

  9. Java泛型教程–示例类,接口,方法,通配符等

    泛型是Java编程的核心功能之一,它是Java 5中引入的.如果您使用的是Java Collections ,并且版本5或更高版本,则可以肯定使用了它. 在集合类中使用泛型非常容易,但是它提供了比仅创 ...

最新文章

  1. 【组队学习】【32期】李宏毅机器学习(含深度学习)
  2. 会员管理scrm系统精细化运营更好促进成交
  3. 重磅 | 中国工程院提出新一代智能制造
  4. 程序世界的秘密(上)
  5. python如何实现通知_ExASIC: 用python实现一个通知机器人
  6. 站立会议-2014-04-14
  7. 聚合报告90%参数说明
  8. Stringbuffer的线程安全是怎么实现的
  9. Dreamweaver 8 jquery 代码提示
  10. 第九章 DirectX 输入和声音(下)
  11. HikariPool-1 - Connection is not available, request timed out after 6000ms
  12. Cisco Packet Tracer 思科模拟器三层交换机配置
  13. html5添加音波波形图,wavesurfer.js绘制音频波形图的实现
  14. 联想微型计算机快捷键,联想笔记本电脑快捷键大全
  15. 「WAYZ维智」:全国最具价值的室内外混合定位感知网络 | 百万人学AI评选
  16. MaxEnt运行错误
  17. 闪光桐人の实习日记(2023年2月20-24日)
  18. 【Keepass】配置好keepassnatmsg插件、keepassxc-browser扩展后,出现Failed to save to the specified file未将对象引用设置到对象
  19. js 下载Base64格式数据图片(兼容主流浏览器)
  20. 视图 setVisibility 用法

热门文章

  1. angularJS1.6.3个人理解(后续更新4.4.7)
  2. select2,利用ajax高效查询大数据列表(可搜索、可分页)
  3. Hoshin Kanri在丰田的应用
  4. 如何在linux当中,大量的添加用户
  5. “10%时间”:优点和缺点——敏捷海滩会议上Elizabeth Pope的报告
  6. 1.1机器学习基础-python深度机器学习
  7. Spring的beans标签下可以有其他标签
  8. 前端开发利器—FIDDLER 转
  9. .net 实现微信公众平台的用户信息获取
  10. php 默认是几进制数,以0x开头的是多少进制?