对象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 block
static {
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 reference
TimePrinter 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(, ic);
t.start();
} }

匿名内部类

// 定义了一个匿名类,它继承 object 类;
// 调用匿名类的 getClass() 方法
new Object{}.getClass();

静态内部类

当内部类不需要引用外部类的字段时,可将内部类定义成为 static 的

public class OutClass{
static InnerClass{
...
}
}

《Java核心技术》 -- 读书笔记 ② - 类 | 对象 | 接口的更多相关文章

  1. Effective Java读书笔记--类和接口

    1.使类和成员的可访问性最小化不指定访问级别,就是包私有.protected = 包私有 + 子类一般private不会被访问到,如果实现了Serializable,可能会泄露.反射.final集合或 ...

  2. java 核心技术卷一笔记 6 .2接口 lambda 表达式 内部类

    6.2 接口实例 6.2.1 接口与回调 在java.swing包中有一个Timer类,可以使用它在到达给定的时间间隔时发出通告,假如程序中有一个时钟,就可以请求每秒钟获得一个通告,以便更新时钟的表盘 ...

  3. Effective Java2读书笔记-类和接口(一)

    第13条:使类和成员的可访问性最小化 设计良好的模块的模块与设计不好的模块区别在于,设计良好的模块会隐藏所有的实现细节,把它的API与他的实现清晰地隔离开来.然后模块之间只通过API通信. 信息隐藏之 ...

  4. java 核心技术卷一笔记 6 .1.接口 lambda 表达式 内部类

    6.1.2 接口不是类,不能实例化一个接口:但是可以声明接口的变量:Comparable x;    接口变量必须引用实现了接口的类对象:x = new Employee(); 检查一个对象是否属于某 ...

  5. Java核心技术读书笔记02

    第四章 对象和类 类之间的关系 最常见的三种关系 依赖("uses-a") Order依赖Account类看信息 聚合("has-a") Order包含多个It ...

  6. java 核心技术卷一笔记 6 .1接口 lambda 表达式 内部类

    6.1 接口不是类,是对类的一组需求的描述,这些类需要遵守接口描述的统一格式进行定义.例如:Arrays类中sort方法(可以对对象数组进行排序)前提是对象所属的类必须实现了Comparable 接口 ...

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

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

  8. Java核心技术-读书笔记

    基本语法 Java中的所有函数都属于某个类的方法 Java没有任何无符号的int.long.short 或 byte 类型 浮点数值不适用于无法接受舍入误差的金融计算中,比如2.0-1.1不会输出想要 ...

  9. Effective Java2读书笔记-类和接口(五)

    第21条:用函数对象表示策略 这一条其实也没说啥,就是策略模式.碰到这种场景时,定义一个策略接口,然后不同策略子类实现它,主类包含这个接口的引用就可以了. 第22条:优先考虑静态成员类 嵌套类是指被定 ...

随机推荐

  1. Django中类视图的简介及使用

    类视图 1 类视图引入 以函数的方式定义的视图称为函数视图,函数视图便于理解.但是遇到一个视图对应的路径提供了多种不同HTTP请求方式的支持时,便需要在一个函数中编写不同的业务逻辑,代码可读性与复用性 ...

  2. React之状态(state)与生命周期

    很多时候,我们的页面数据是动态的.所以,我们需要实时渲染页面: 一.用定时函数setInterval() 组件(输出当前时间): index.js: 这样每隔1秒页面就会重新渲染一次,这样传进去的时间 ...

  3. DBSCAN聚类︱scikit-learn中一种基于密度的聚类方式

    一.DBSCAN聚类概述 基于密度的方法的特点是不依赖于距离,而是依赖于密度,从而克服基于距离的算法只能发现"球形"聚簇的缺点. DBSCAN的核心思想是从某个核心点出发,不断向密 ...

  4. python中封装

    封装 引子 从封装的本身意思去理解,封装就是用一个袋子,把买的水果.书.水杯一起装进袋子里,然后再把袋子的口给封上,照这样的理解来说,封装=隐藏,但是,这种理解是片面的 ## 如何封装 在python ...

  5. Office for Mac

    前情 真的用不惯Mac上的pages,所以就找Mac版的office.找了一个发觉不对,安装总是出错,当时也没有太大的需求,就把这事搁置了下来.今天要写技术文档的时候才终于下决心要把office下再下 ...

  6. “App Store加载失败,使已购页面再试一次”解决方案

    问题描述: 用A账户登陆App Store,下载了Xcode.还没有下载完就需要更换账户 更换账户 找到App Store界面上部的商店,选择注销,然后再登陆. 账户更换完毕,讲道理来说应该是可以下载 ...

  7. JAVA多线程----用--取钱问题1

    “生产者-消费者”模型,也就是生产者线程只负责生产,消费者线程只负责消费,在消费者发现无内容可消费时则睡觉.下面举一个比较实际的例子——生活费问题. 生 活费问题是这样的:学生每月都需要生活费,家长一 ...

  8. 线性回归 Linear regression(3) 线性回归的概率解释

    这篇博客从一种方式推导了Linear regression 线性回归的概率解释,内容来自Standford公开课machine learning中Andrew老师的讲解. 线性回归的概率解释 在Lin ...

  9. 每天一个linux命令(文件操作):【转载】find 命令概览

    Linux下find命令在目录结构中搜索文件,并执行指定的操作.Linux下find命令提供了相当多的查找条件,功能很强大.由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时 ...

  10. UVA11401 Triangle Counting

    题意 输入\(n\),输出有多少种方法可以从\(1,2,3,\dots,n\)中选出3个不同的整数,使得以他们为三边长可以组成三角形. \(n \leq 10^6\) 分析 参照刘汝佳的题解. 按最大 ...