- 通常情况下,当类名由多个单词组成时,要求每个单词首字母都要大写。当成员变量由多个单词组成时,通常要求从第二个单词起每个单词的首字母大写。当成员方法名由多个单词组成时,要求从第二个单词起每个单词的首字母大写
- Java语言中类体现为一种引用数据类型对象体现为内存空间中的一块存储区域。
- 可变长参数的使用,。
- 引用数据类型包括:类、接口类型、数组类型、枚举类型、注解类型,字符串型。
- 基本类型复制时原数据不受到影响,而引用类型则是通过复制指针,实现复制,但指针指向的是同一个对象,所以改变其中一个两个都改变;
- 当局部变量名与成员变量名相同时,在方法体中会优先使用局部变量(就近原则),若希望使用成员变量,则需要在成员变量的前面加上this.的前缀,明确要求该变量是成员变量( 重中之重)。
this关键字
除了可以通过this.的方式调用成员变量和成员方法外,还可以作为方法的返回值( 重点)。
// 自定义成员方法实现Person类型对象的获取并返回的行为
Person getPerson() {
// 返回当前调用对象本身
return this;
}
在构造方法的第一行可以使用this()的方式来调用本类中的其它构造方法( 了解)。
this 关键字代表当前对象
Java中常见的五种异常:
1) ClassCastException(类转换异常) 数据类型转换错误 多态里面,父子类转换时,为避免可用instanceof
2) IndexOutOfBoundsException(数组越界)
3) NullPointerException(空指针)
4) IllegalAccessException(访问权限异常) 这个异常的解释是“没有访问权限“,当应用程序要调用一个类,但当前的方法即没有对该类的访问权限便会出现这个异常。对程序中用了Package的情况下要注意这个异常。
5) IOException(输入输出异常)
static关键字
修饰成员变量表示静态的含义,此时成员变量由对象层级提升为类层级,也就是整个类只有一份并被所有对象共享,该成员变量随着类的加载准备就绪,与是否创建对象无关。
static关键字修饰的成员可以使用引用.的方式访问,但推荐类名.的方式。
- 在非静态成员方法中既能访问非静态的成员又能访问静态的成员。
在静态成员方法中只能访问静态成员不能访问非静态成员。(类名访问,此时没有创建对象)
- 构造方法是初始化每个对象的,所以加了static关键字的成员变量不需要在构造方法中。
public People(String name, int age/*, String country*/) {
setName(name);
setAge(age);
//setCountry(country);
}
堆区
存储的是一切new出来的对象
栈区
存储基本数据类型的值和对象引用. 每个栈中的数据( 基础数据类型和对象引用 )都是私有的,其他栈不可以访问. 栈分为三个部分 : 基本类型变量区 , 执行环境上下文 , 操作指令区(存放操作指令)
方法区
保存所有的class文件和static变量与方法
- 单例设计模式
一个类对外提供且只提供一个对象时,这样的类叫做单例类。
实现流程三步走:
• 私有化构造方法,使用private关键字修饰。
• 声明本类类型的引用指向本类类型的对象,并使用private static关键字共
同修饰。
• 提供公有的get方法负责将对象返回出去,并使用public static关键字共同
修饰。
单例设计模式的实现方式有两种:饿汉式 和 懒汉式,在以后的开发中推荐饿汉式。
/*
编程实现Singleton类的封装
*/
public class Singleton {
// 2.声明本类类型的引用指向本类类型的对象,使用private static关键字共同修饰
private static Singleton sin = new Singleton(); // 饿汉式 用得多
//private static Singleton sin = null; // 懒汉式 面试常问
// 1.私有化构造方法,使用private关键字修饰
private Singleton() {}
// 3.提供公有的get方法负责将对象返回出去,使用public static关键字共同修饰
public static Singleton getInstance() {
return sin;
//if(null == sin) {
// sin = new Singleton();
//}
//return sin;
}
}
继承的特点
• 子类不能继承父类的构造方法和私有方法,但私有成员变量可以被继承只是不能直接访问。(可以理解,构造方法和类名一样,私有方法只能在本类中使用)
• Java语言中只支持单继承不支持多继承,也就是说一个子类只能有一个父类,但一个父类可以有多个子类。
- 构造块与静态代码块( 笔试)
• 先执行父类的静态代码块,再执行子类的静态代码块。(随着类的加载使用)
• 执行父类的构造块,执行父类的构造方法体。
• 执行子类的构造块,执行子类的构造方法体。
final关键字
• final关键字修饰类体现在该类不能被继承。
- 主要用于防止滥用继承,如: java.lang.String类等。
• final关键字修饰成员方法体现在该方法不能被重写但可以被继承。
- 主要用于防止不经意间造成重写,如: java.text.Dateformat类中format方法等。
• final关键字修饰成员变量体现在该变量必须初始化且不能改变。
- 主要用于防止不经意间造成改变,如: java.lang.Thread类中MAX_PRIORITY等。
在以后的开发中很少单独使用final关键字来修饰成员变量,通常使用public static final关键字共同修饰成员变量来表达常量的含义,常量的命名规范要求是所有字母都要大写,不同的单词之间采用下划线连。
• public static final double PI = 3.14;
方法重写的原则:
• 要求方法名相同、参数列表相同以及返回值类型相同, 从Java5开始允许返回子类类型。
• 要求方法的访问权限不能变小,可以相同或者变大。
• 要求方法不能抛出更大的异常(异常机制)。
多态:父类类型 引用变量名 = new 子类类型();
在以后的开发中推荐使用多态的格式,此时父类类型引用直接调用的所有方法一定是父类中拥有的方法,若以后更换子类时,只需要将new关键字后面的子类类型修改而其它地方无需改变就可以立即生效,从而提高了代码的可维护性和可扩展型。
•该方式的缺点就是:父类引用不能直接调用子类独有的方法,若调用则需要强制类型转换。
多态的特点
• 当父类类型的引用指向子类类型的对象时,
父类类型的引用可以直接调用父类独有的方法,不可以直接调用子类独有的方法。(强制转换)
• 对于父子类都有的非静态方法来说,编译阶段调用父类版本,运行阶段调用子类重写的版本( 动态绑定)。
• 对于父子类都有的静态方法来说,编译和运行阶段都调用父类版本。
子类里面有和父类相同的静态方法不能算是真正意义上的重写:重写方法的目的是为了用多态,多态是父类引用指向子类对象,而静态方法只跟类有关系,和指向什么对象没关系,所以不是真正意义的重写,不能加@override
引用数据类型转换
• 向上转型(子类转父类,自动转)
• 向下转型(显示类型转换,父类转子类),调用子类独有的方法时。
• 转换必须发生在父子类之间,否则编译报错。
• 强转之前进行判断,避免发生类型转换异常,格式如下:
if(引用变量 instanceof 数据类型)
// 判断sr指向堆区内存中的对象是否为Circle类型,若是则返回true,否则返回false
Shape sr = new Rect(7, 8, 9, 10);
if(sr instanceof Circle) {
System.out.println("可以放心地转换了!");
Circle c1 = (Circle)sr;
} else {
System.out.println("强转有风险,操作需谨慎!");
}
显然返回的是false