第一章 Java简介
1.1 Java介绍
(1)Java语言足够简单。
(2)Java是一门面对对象的编程语言
(3)Java是为数不多的多线程编程语言
(4)Java提供了自动的垃圾回收机制,以更好的处理垃圾空间
(5)Java避免了复杂的指针问题,而使用了使用了更加简单的引用处理来完成内存空间的匹配问题
(6)Java可以实现任意平台的移植
1.2 JDK的安装与配置
JRE包括Java虚拟机、Java核心类库和支持文件,JDK包含开发工具和编译器
1.3 第一个Java程序
Java程序分为两个操作
1.编译程序:javac Hello.java,此时会形成Hello.class文件,这就属于字节码文件
2.解释程序:java Hello
所有Java程序都有一个最为核心的单元:类
public class 类名称{}:文件名称必须与类名称保持一致,一个java文件只能有一个public class
class 类名称{}:文件名称可以与类名称不一致,但是生成的.class文件和类名一致,java文件里面可以有多个class,但是编译后会生成多个不同的.class文件
1.4 CLASSPATH环境属性
PATH:是属于操作系统路径,定义所有可执行程序的路径
CLASSPATH:是Java程序解释类文件时所使用的加载路径
CLASSPATH主要目的是定义类的加载路径
安装一些程序可能去修改已经设置好的CLASSPATH,可能导致你的程序无法正确执行,所以要进行手工修改
第二章 程序基本概念
2.1 Java注释
// 单行注释
/* … / 多行注释
/* … */ 文档注释
尽可能使用单行注释,原因:在一些开发工具里面,多行注释格式化后的效果不好
2.2 标识符与关键字
2.3 数据类型划分
基本数据类型不牵扯到内存分配问题,而引用数据类型
基本数据类型
数值型
整型:byte short int long
浮点性:float double
字符型:char
布尔型:boolean
引用数据类型:数组、类、接口
2.4 运算符
2.5 程序逻辑控制
2.6 方法的定义及使用
方法重载的时候重点是根据参数类型以及个数来区分方法
##第三章
###String类操作方法
//字符与字符串
public String(char[] value)
public String(cahr[], int offset, int count)
public char charAt(int index)
public char[] toCharArray()
//字节与字符串
public String(byte[] bytes)
public String(byte[] bytes, int offset, int length)
public byte[] getBytes()
//字符串比较
public boolean equals(String anObject)
public boolean equalsIgnoreCase(String anObject)
public booean int compareTo(String anObject)
//字符串查找
public boolean contains(String s)
public int indexOf(String str)
public int lastIndex(String str)
public boolean startWith(String prefix)
public boolean endWith(String suffix)
//字符串替换
public String replaceAll(String regex, String replacement)
public String replaceFirst(String regex, String replacement)
//字符串截取、拆分
public String substring(int begIndex)
public String[] split(String regex)
//其他方法
public String concat(String str)
public String toLowerCase()
public String toUpperCase()
public String toUpperCase()
public String trim()
public int length()
public String intern()
public boolean isEmpty()
this关键字
this调用构造方法的时候一定要放在代码的首行且一定要留有调用的出口
static关键字
在java
中主要存在4块内存空间
- 栈内存空间
- 堆内存空间
- 全局数据区
- 全局代码区
- static定义在类中作为公共属性,由
类名.变量
调用 - static方法不能直接访问static属性和方法,只能调用static属性和方法
- 非static方法没有限制
说明
- 所有非static定义的结构,必须在类已经明确产生实例化对象时才会分配内存空间,才可以使用
- 所有static定义的结构,不受实例化对象的控制,可以在没有实例化对象的情况下调用
###代码块
- 普通代码块
- 构造块 使用在类中可以限于构造函数执行
- 静态块 静态块在加载类的时候运行且只运行一次
###内部类
- 可以轻松访问外部类的私有属性
- 将内部类定义为私有的话此内部类只服务于次内部类的外部类
- static定义内部类会成为一个"外部类",并且只能调用外部类的static属性和方法
##第四章 面对对象高级知识
###继承
- 能单继承,但可以多重继承
- 私有操作属于隐式继承,其他属于显式继承(父类的私有属性还是只能在父类的方法中去访问)
- 构造方法的调用顺序是先调用父类再调用子类,注意在子类构造函数中有一个隐式的super()调用,我们可以显式调用它
###覆写
-
子类覆写父类的方法,函数名、返回值、参数类型、参数个数要一模一样(这一点是区别与重载的)
-
关于覆写方法的执行问题
- 观察实例化对象是哪个类
- 调用的方法有没有在子类中被覆写
-
被子类覆写的方法不能比父类有更严格的访问权限(但是可以父类中的私有方法,在子类中是以public形式出现的,此时子类中的方法和父类的方法是两个完全不一样的东西)
this和super的区别:super只会在父类中寻找对应的属性和方法,this会优先找本类的属性和方法,找不到再去父类找
final关键字
- final定义的类不能被继承,定义的方法不能被子类覆写
- final可以定义常量,publc static final 可以定义全局常量(常量的书写规则是全部大写)
多态性
多态性分为方法的多态和父子类对象的转换
- 对象的向上转型
A a = new B(); a.print();
目的是参数的统一,子类实例化后的父类只能调用父类中定义过的方法 - 对象的向下转型
A a = new B(); B b = (B)a; b.print()
父类可以调用子类中定义过单父类中没有定义过的方法,也就是子类特有的方法,但会带来一定的操作隐患
为了保证转型顺利通常使用instanceof判断一个对象是否是某个类的实例化对象
a instanceof A
a instanceof B
###抽象类
- 抽象类不可以直接实例化对象
- 抽象类必须以abstract定义类,抽象类中可以存在抽象方法也用abstract定义
- 抽象类必须有子类
- 抽象类中的抽象方法强制子类覆写
- 可以通过子类来完成抽象类的对象实例化操作
- 可以在抽象类中的普通方法调用抽象方法,具体根据实例化对象的子类进行相应操作
抽象类和接口的区别
- 接口中只能定义常量和抽象方法(并且内部默认常量final,方法abstract),抽象类和普通类一样
- 接口可以多重继承其他接口,抽象类可以实现多重接口
Object
Object类是所有类的父类
- toString()输出一个对象信息的方法,默认自动调用
- equals()
- hashCode()
理论上任何的简单Java类都应该覆写以上的三种方法
基本数据类型的包装类
装箱与拆箱操作
public class TestDemo {
public static void main(String args[]) {
Integer obj = new Integer(10);
int tmp = obj.intValue();
System.out.println(tmp);
System.out.println(obj);
}
}
自动装箱