java常识
- Java编程语言的主要特性
- 纯面向对像
- 简单VS复杂
- 代码开放性
- 代码安全性
- 垃圾回收(GC)
- 跨平台
- 编译型语言和解释型语言的特点
- 编译型语言(c、c++)
源文件 – 编译器–> 可执行文件 运行可执行文件 –> 机器指令 - 解释型语言 (javascript 、perl)
文本文件 —解释器-> 直接翻译成机器指令
- 编译型语言(c、c++)
- Java语言的运行机制
- 先编译,后解释(java)
.java源文件 – 编译(javac Stu.java) –> .class字节码文件 (字节码)– jvm解释执行(java Stu) –> 真正的机器指令 Write Once , Run Anywhere(一次编写到处运行)
- 先编译,后解释(java)
- JRE (Java Runtime Environment) Java运行时环境
JRE = JVM(Java Virtual Machine) Java虚拟机+解释器 - JDK(Java Development Kit) Java开发工具包
JDK = JRE + 工具(编译器、调试器、其他工具……) + 类库 - JAVA_HOME
表示的是Java的安装目录
如:D:\Program Files (x86)\Java\jdk1.7.0 - CLASSPATH
是用来指示编译器和JVM去哪个目录寻找.class文件如:. - PATH
是在命令行上输入Java命令时,用来指示操作系统去哪个路径下找Java 的相关程序。往往会把PATH变量配成Java的安装路径/bin目录 - 什么是变量?如何声明变量,如何给变量赋值
变量概念是在内存中开辟的空间,用于存储数据,并取名
a)程序运行在内存中
b)程序的核心是处理数据
c)在内存中存储数据的单元(容器)
d)内存中:内存地址——>不好记——>取别名——>变量 - 公开类的特点?
1、如果一个类是公开类,.java文件名字与公开类名字一致
2、一个.java文件只应该有一个公开类 - 什么命令编译和执行java程序
编译:javac Stu.java或者javac java源文件名
执行:java stu 或者java 类名
匿名对象
- 没有名字的对象
- 使用场景:
- 当对象只使用一次的时候
- 作为实参传递
- 好处
- 使用完成可以即时被回收,提高内存使用效率
面向对象(OOP)
- 三大特征
- 封装
- 继承
- 多态
封装
- 概述:隐藏对象的属性和实现细节,仅对外提供公共访问方式
- 对应代码就是:将成员变量私有化(用
private
修饰);向外提供公共的set方法(setter)和get方法(getter)
- 对应代码就是:将成员变量私有化(用
好处:
- 提高代码安全性
- 提高代码的复用性
- 有助于建立个系统之间的松耦合关系,提高系统独立性
- 松耦合关系
强内聚(模块的功能尽量在模块内部独立完成,不让外面干预),弱耦合(提供给外部尽量少的方法调用)
private
- 私有的 访问权限修饰符
- 可以修饰成员(成员变量和成员方法)
- 被private修饰的成员只能在本类中才能访问
- this(句柄)关键字
- this这个的意思,是一个代词,指代一类东西
- this在java中指代的就是本类对象的引用
- 具体指代的是哪一个对象呢?哪一个对象调用就指代哪一个
- 生成setter和getter
- 在代码区域单击右键–source–Generate Getters and Setters
static关键字
- static静态。被static修饰的成员叫做类成员,随着类的加载而加载
- static修饰成员变量,该变量就是静态变量
- static修饰成员方法,该变量就是静态方法
- 作用:共享数据
- 调用方式:
- 类名.静态成员(标准用法)
- 对象.静态成员(语法不错,但是不推荐)
- 注意:
- 静态方法只能调用静态,不能调用非静态
- 常用于工具类中
- 局部变量不能使用static
- 非静态方法是万能的,静态和非静态都可以
- 为什么?结合静态的生命周期分析
- static方法中不能使用this
- 静态的内容存在于方法区的静态区
main方法
- public static void main(String[] args)
- public 访问权限,公共的,访问权限最大,因为main方法需要被JVM访问
- static 静态的,属于类成员,随着类加载。因为main被JVM访问,不需要创建对象
- void 无返回值
- main 这个是方法名,只有该方法名能被jvm识别成入口,切记不能更改
- String[] args 参数,类型为字符串数组。用来接收用户输入的数据
- ArrayIndexOutOfBoundsException 数组索引越界
11.30
代码块
- 用{}括起来的内容
- Java中有一下代码快
- 局部(普通)代码块:方法内部,用{}表示作用:限制局部变量的生命周期
- 构造(动态)代码块:类中方法外,用{}表示作用:用来初始化成员变量(如果构造方法中相同的数据初始化,就可以将相同的初始化语句放在该代码块中)执行次数:每调用一次构造就被执行一次
- 静态代码块:类中方法外,用static{}表示 作用:用来进行类的初始化 执行次数:只会被执行一次
- 同步代码块
- 静态代码块 > main > 构造代码快 >构造方法(执行顺序)
this的另一个用法
- this(…)调用本类的构造方法
- this(…)放在构造方法中可执行代码的第一行
继承
- java中用关键字
extends
实现继承 - class 子类 extends 父类
- 子类又叫派生类,父类又叫基类、超类
- 注意:
- java类与类之间只支持单继承,不支持多继承,但是可以多重继承
- 私有(private)成员不能被继承
- 构造方法不能被继承,但子类构造会默认调用父类的无参构造
- 怎么调用?通过super()调用。记住:子类构造可执行代码的第一行默认有super();
- 为什么会有super():因为子类需要使用父类的数据,而父类的数据需要通过父类的构造方法初始化
- 继承的好处:
- 提高代码的复用性
- 提高代码的维护性
- 让类与类之间产生了关系,是多态的前提
- 继承的弊端:
- 打破了代码的封装性
- 增强了代码的耦合性
- 注意
- 不能为了步伐功能而继承
- 什么时候使用继承呢?继承中类之间体现的是:”is a”的关系。
super(…)
- 继承关系的初始化:分层初始化
- 先初始化父类,再初始化子类
- java中最基本的单元是类,初始化就是对类的成员变量初始化
- 默认初始化
- 显示初始化
- 构造初始化
方法的重写(Override)
- 子类中出现了和父类一模一样的方法声明,也称为方法的覆盖,方法的重写
- 注意:
- 私有方法不能被复写
- 子类复写的方法访问权限不能低于父类
- 静态方法复习也必须是静态方法
12.01
- final最终的意思
- 修饰类 该类为最终类,不能被继承
- 修饰变量 该变量变常量, 只能被赋值一次
- 修饰成员变量的时候怎么赋值呢?
- 在构造方法执行完之前赋值即可。但是建议定义时候就赋值
- 静态常量static final 数据类型 常量名:只能在定义的时候赋值
- 修饰成员方法;该方法不能被子类复写
- 注意
- final修饰基本数据类型的变量是该变量的数据值不能改变
- final修饰引用数据类型的变量是该变量的地址值不能改变
单例设计模式
作用:
解决对象共享同一内存地址- 步骤:
- 1、将构造方法私有化
- 2、定义并初始化一个私有对象
- 3、定义一个方法,将该私有对象提供一个公共的访问方法
- 代码
- public class Dog{
- private static final Dog dog = new Dog();
- private Dog(){
- //ToDo Auuto….
- }
- public static Dog getInstance(){
- return dog;
- }
- }
多态
- 某以事物,在不同时刻表现出来的不同状态
- 如何实现?
- 有继承或实现关系
- 有方法的复写(非必要)
- 有父类引用指向子类对象
- 成员访问特点:
- 成员变量:编译看左,运行看左
- 成员方法:编译看左,运行看右
- 静态方法:编译看左,运行看左
- 好处:
- 提高了代码的维护性(由继承保证)
- 提高了代码的扩展性(由多态保证)
- 弊端:
- 不能访问子类特有的成员
- 如何访问?
- 使用多态的转型(向下转型)访问
- 向上转型:从子类到父类 Fu fu = new Zi();
- 向下转型:从父类到子类 Zi zi = (Zi)Fu();
抽象类
- java中用abstract表示抽象,可以修饰类、方法
- java中没有方法体的方法就是抽象方法,就用abstract修饰
- 有抽象方法的类为抽象类,用abstract修饰
- 抽象类不一定有抽象方法
- 抽象类不能被实例化,但是有构造方法。构造方法在这里仅仅初始化数据
- 如何才能访问抽象类的成员?通过多态的特征让子类进行实例化
- 抽象类的子类:
- 要么是抽象列
- 要么是重写抽象类中的所有抽象方法
- 抽象类的成员特点:
- 成员变量可以是变量也可以是常量
- 成员方法可以是抽象也可以是非抽象
- 有构造方法,但是不能实例化
- abstract不能和一下关键字共存
- private
- static
- final
接口
- java中用interface表示接口
- 格式:interface 接口名 {}
- 类与借口的关系是实现关系,格式 class 类名 implements 借口名{}
- 借口中成员的特点:
- 成员变量只能是静态常量 用public static final修饰
- 成员方法必须是抽象方法, 用public abstract 修饰
- 没有构造方法,也不能被实例化。可以通过多态让实现类进行实例化