Java中==与equals()
1. ==操作符
基本类型比较值:只要两个变量的值相等,即为 true;
引用类型比较引用:只有指向同一个对象时,== 才返回 true。
2. equals()方法所有类都继承了 Object,也就获得了 equals() 方法,也还可以重写。
只能比较引用类型,其作用与 == 相同,比较是否指向同一个对象
格式:obj.equals(obj2)
特殊的,当用 equals() 方法进行比较时,对类 File、String、Date 及包装类(Wrapper Class)来说,是比较类型和内容而不考虑引用的是否是一个对象。原因是在这些类中重写了 Object 类的 equals() 方法。
Java中类对象的实例化过程
如图:
1. 简单类对象的实例化过程
2. 子类对象的实例化过程
3. String 对象的创建
Java中的包
包帮助管理大型软件系统,将语义近似的类组织到包中,解决命名冲突问题。
包可以包含类和子包。
1. 关键字packagepackage 语句作为 Java 源文件的第一条语句,指明该文件中定义的类所在的包(若缺省该语句,则指定为无名包)。它的格式为:package 顶层包名.子包名,用 ‘.’ 来指明包的层次。包常用小写单词,类名首字母通常大写。
2. 关键字import关键字import用来导入其他包。
import 出现在 package 语句之后,类定义之前,可以有多个 import 语句。
import.lee.* 语句,表示导入 lee 包下所有的类,而 lee 包的子包内的类不会被导入。
import 语句不是必须,可以在类内使用其他类的全名。
3. JDK 中主要的包介绍
java.lang:包含一些 java 语言的核心类,如 String、Math、Integer、System 和 Thread,提供常用功能。
java.net:包含执行与网络相关的操作的类和接口。
java.io:包含能提供多种输入/输出功能的类。
java.util:包含一些实用工具类,如定义系统 ...
Java中的单例设计模式
设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。
单例设计模式就是采取一定的方法保证在整个的软件系统中,对某个类智能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。
如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类构造方法的访问权限设置为 private,这样,就不能用 new 操作符在类的外部产生类的对象了,只能调用该类的某个静态方法以返回内部创建的对象,静态方法只能访问类中的静态成员变量,所以指向类内部产生的该类对象的变量也必须定义成静态的。
单例设计模式 的实现方式主要有饿汉式和懒汉式。
饿汉式
12345678910class Single { // private 构造器,不能在类的外部创建该类的对象 private Single() {} // 私有的,只能在类的内部访问 private static Single onlyone = new Single(); // getSingle() 为 static,不用创建对象即可访问 pub ...
Java面向对象编程
面向对象编程(OOP:Object Oriented Programming)。
1. 面向对象三大特征面向对象三大特征分别为封装(Encapsulation),继承(Inheritance),多态(Polymorphism)。
1.1. 封装Java中的封装思想和 C++ 相同。
1.2. 继承继承关键字为 extends。 与C++ 类似。
1class Subclass extends Superclass {}
注:
子类不能直接访问父类中 private 成员变量和方法。
Java 只支持单继承,不允许多继承。即一个子类只能有一个父类,但一个父类可以派生出多个子类。
1.3. 多态
多态性是面向对象中最重要的概念,在 Java 中有两种体现。
方法的重载(overload)和重写(override);
对象的多态性:可以直接应用在抽象类和接口上。
Java 引用变量有两个类型:编译时类型和运行时类型。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。若编译时类型和运行时类型不一致,就出现多态。
在 Java 中,子 ...
Java的两种核心机制
1. JVM(Java虚拟机)
JVM(Java Virtual Machine,Java虚拟机)
JVM 内存模型
2. CC(垃圾收集)
CC(Garbage Collection,垃圾收集机制)
使用一个系统级线程,检测和回收内存。自动回收,但回收不及时。
Java中的运算符
1. 算数运算符Java中的算数运算符有 +,-,*,/,%,++,—。与C/C++相同,包括截断。
2. 赋值运算符
赋值运算符:=。
扩展赋值运算符: +=,-+,*=,\=。
扩展赋值运算符会自动把运算结果转换为当前变量的类型。
123short a = 3;a = a + 1; // 错误。a + 1 是 int 类型 不可赋值给 short 类型a += 1; // 正确。会进行自动的类型转换
3. 比较运算符Java中的比较运算符有 ==,!=,<,>,<=,>=。与C/C++相同。
4. 逻辑运算符Java中的逻辑运算符有 &&,||,!。与C/C++相同。
5. 位运算符Java中的位运算符有 &,|,^,~,<<,>>,>>>。
其中 << 与 >> 是带符号移位(移位时不考虑符号位)。
而 >>> 无符号右移,空位均补 0,注意没有 <<< 。
6. 三元运算符Java中的三元运算符形式为:(条件表达式) ...
Java中的数组
数组只能线性存储同一种类型的数据。
1. 一维数组1.1. 声明方式注意Java中声明时是没有分配内存的,所以不需要指定大小,在new的时候才指定。
12int arr1[]; // 方法一int[] arr2; // 方法二(常用)
1.2. 初始化数组一旦初始化,其长度是不可变的。
12345678// 动态初始化:在声明的时候指定数组长度,分配内存。int[] arr1 = new int[3]; // 此时会有默认值,int 类型默认值为 0,对象的默认值是 nullarr1[0] = 1;arr1[1] = 2;arr1[2] = 3;// 静态初始化:初始化时由程序猿显示指定每个数组元素的初始值,由系统决定数组的长度。int[] arr2 = new int[]{1, 2, 3};int[] arr3 = {1, 2, 3};
数组元素的引用:下标索引如 arr[2],与 C/C++ 相同。
每个数组有一个属性 length 表示其长度。
1.3. 一维数组遍历12345678910// 有一维数组 d//需要自己控制索引位置f ...
Java中的Interface(接口)
1. 什么是Interface(接口)有时必须从几个类中派生出一个子类,继承他们所有的属性和方法。
但是,Java 不支持多重继承,使用接口实现多重继承的效果。
接口是抽象方法和常量值的定义的集合。
从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。
一个类可以实现多个接口,接口也可以继承其他接口。
12public class ClassName implements Interface1, Interface2 { ... }public interface Interface3 extends Interface1 { ... }
2. 接口的特点
用 interface 来定义;
接口中所有的成员变量都默认是由 public static final 修饰的;
接口中所有的方法都默认是由 public abstract 修饰的;
接口没有构造器;
接口采用多层继承机制。
3. 接口定义举例123456public interface Runner { int ID = 1; ...
Java中的数据类型
在 java 中,数据类型分为基本数据类型和引用数据类型,其中基本数据类型有 8 种,除了这 8 种之外,其他所有的数据类型都是引用数据类型(包括 String 类型等)。
1. 基本数据类型1.1. 数值型1.1.1. 整数类型Java 中的整数类型有 byte,short,int 和 long。
Java 各整数类型有固定的表数范围和字段长度,不受具体OS的影响,以保证java程序的可移植性。整型常量默认为int型,声明long型常量须后加 ‘l’ 或 ‘L’。
类型
存储空间
表示范围
byte
1B = 8bit
$-128$ ~ $127$
short
2B
$-2^{15}$ ~ $2^{15}-1$
int
4B
$-2^{31}$ ~ $2^{31}-1$
long
8B
$-2^{63}$ ~ $2^{63}-1$
1.1.2. 浮点类型Java 中的浮点数类型有 float 和 double。
与整数类型类似,Java浮点类型也有固定的表数范围和字段长度,不受具体OS的影响。浮点型常量默认为double型,声明float型 ...