步入Java
一、概念JDK,IDE等
- JVM(Java Virtual Machine):Java虚拟机, 真正运行Java程序的地方。
- 核心类库:Java自己写好的程序,给程序员自己的程序调用的。
- JRE(Java Runtime Environment): Java的运行环境。
- JDK(Java Development Kit): Java开发工具包(我们配置环境就是下载jdk,不同版本的开发工具包都可以用)
Java的跨平台是什么含义,Java如何实现跨平台的?
答:一次编译、处处可用。我们的程序只需要开发一次,就可以在各种安装了JVM的系统平台上(Windows,Linux,MacOS)运行
集成开发环境( IDE, Integrated Development Environment )
答:把代码编写,编译,执行等多种功能综合到一起的开发工具,可以进行代码智能提示,错误提醒,项目管理等等。常见Java的IDE工具有:Eclipse、MyEclipse、IntelliJ IDEA、Jbuilder、NetBeans等。
二、基础语法
1、类型转换:自动类型转换,表达式的自动类型转换,强制类型转换
2、逻辑运算符:
符号 | 介绍 | 说明 |
---|---|---|
& | 逻辑与 | 可用于位运算,当左右两边的条件不是布尔型,而是数字时,会进行位运算 |
| | 逻辑或 | 只要有一个为true、结果就是true |
! | 逻辑非 | 你真我假、你假我真。 !true=false 、 !false= true |
^ | 逻辑异或 | 如果两个条件都是false或者都是true则结果是false。两个条件不同结果是true |
&& | 短路与 | 判断结果与“&”一样。过程是左边为 false,右边则不执行 |
|| | 短路或 | 判断结果与“|”一样。过程是左边为 true, 右边则不执 |
3、参数传递机制:
4、方法重载:
只要是同一个类中,方法名称相同、形参列表不同(形参个数、类型、顺序,任何一个不同),那么他们就是重载的方法,其他都不管!(如:修饰符,返回值类型都无所谓)
区别 | 方法重写 | 方法重载 |
---|---|---|
方法关系 | 描述的是父类和子类(接口实现) 的方法关系 | 描述的是同一个类中多个同名方法的方法关系 |
Override 关键字 | 需要使用 @Override 关键字修饰 | 不需要 |
参数类型和参数个数 | 不能修改 | 必须修改 |
返回类型 | 只能变小或相同,不能变大 | 可修改 |
抛出异常 | 只能变小或删除,不能抛出新的或者更大的异常 | 可修改 |
权限控制符 | 只能变大,不能变小 | 可修改 |
三、面向对象
面向对象又称OOP(Object Oriented Programming) 分开来看就是:Object:对象,Oriented: 面向的,Programming:程序设计。
面向对象的三大特征: 封装,继承,多态。
构造器: 定义在类中的,可以用于初始化一个类的对象,并返回对象的地址。
- 无参数构造器(默认存在的):初始化对象时,成员变量的数据均采用默认值。
- 有参数构造器:在初始化对象的时候,同时可以接收参数为对象进行赋值。
注意: 一旦定义了有参数构造器,那么无参数构造器就没有了,如果还想用无参数构造器,此时就需要自己手写一个无参数构造器了。
成员变量和局部变量的区别:
区别 | 成员变量 | 局部变量 |
---|---|---|
类中位置不同 | 类中,方法外 | 常见于方法中 |
初始化值不同 | 有默认值,无需初始化 | 没有默认值,使用之前需要完成赋值 |
内存位置不同 | 堆内存 | 栈内存 |
生命周期不同 | 随着对象的创建而存在,随着对象的消失而消失 | 随着方法的调用而存在,随着方法的运行结束而消失 |
作用域 | 在所归属的大括号中 |
权限修饰符: 有四种作用范围由小到大(private -> 缺省 -> protected - > public ),最大范围依次是(同一个类中,同一包的所有类中,不同包的子类中,不同包的所有类中)
继承:
- 子类可以继承父类的属性和行为,但是子类不能继承父类的构造器
- 子类可以继承父类的私有成员变量和私有方法,只是不能直接访问
- 子类不能继承父类的静态成员变量和静态方法,只是可以共享使用,并非继承
- 子类中所有的构造器默认都会先访问父类中无参构造器,再执行自己的构造器(因为子类有可能会使用到父类中的数据),子类构造器的第一行语句默认都是:super(),不写也存在
多态:
同类型的对象,执行同一个方法,可以表现为不同的形态。前提:有继承/实现关系;有父类引用指向子类对象;有方法重写。
多态中成员访问特点:
- 方法调用:编译看左边,运行看右边。
- 变量调用:编译看左边,运行也看左边。(注意)
1.static关键字
静态成员变量:有static修饰,属于类、加载一次,内存中只有一份。
**静态成员方法:**有static修饰,归属于类,建议用类名访问。
注意:
- 静态方法只能访问静态成员变量和静态方法,不可以直接访问实例成员变量和实例方法。
- 实例方法可以访问静态成员变量和静态方法,也可以访问实例成员变量。
- 静态方法中是不可以出现this关键字的。
静态代码块:
格式:static{}
特点:需要通过static关键字修饰,随着类的加载而加载,并且自动触发、只执行一次。一般在类加载的时候做一些静态数据初始化的操作,以便后续使用。
构造代码块(了解,见的少):
格式:{}
特点:每次创建对象,调用构造器执行时,都会执行该代码块中的代码,并且在构造器执行前执行,一般用来初始化实例资源。
2.final关键字
- 修饰类:表明该类是最终类,不能被继承。
- 修饰方法:表明该方法是最终方法,不能被重写。
- 修饰变量:
- final修饰的变量是基本类型:那么变量存储的数据值不能发生改变。
- final修饰的变量是引用类型:那么变量存储的地址值不能发生改变,但是地址指向的对象内容是可以发生变化的。
- 常量:public static final修饰的成员变量。在编译阶段会进行“宏替换”:把使用常量的地方全部替换成真实的字面量。常用来作为信息标志和分类:UP,DOWN,LEFT,RIGHT
3.abstract抽象
使用抽象类是为了代码的复用:提供公共的实现代码,抽象出有重复部分。
- abstract可以修饰类、成员方法,类就是抽象类,方法就是抽象方法。抽象方法只有方法名,例如:
absract void brew();
,不能声明方法体 - 一个类中如果定义了抽象方法,这个类必须声明成抽象类,否则报错
- 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
- 应用:模板方法设计模式
4.interface接口
使用接口的动机是为了实现多态性:体现的是一种规范(约束)思想,注重代码的扩展性和可维护性。
JDK8之前:
- 接口中只能是抽象方法和常量,接口不能实例化,接口中的成员都是public修饰的
- 一个类可以实现多个接口,一个接口可以同时继承多个接口
JDK8之后新增的方法:
- 默认方法(实例方法):default修饰,只能实现类的对象进行调用
- 静态方法:static修饰,只能用当前接口类名调用
- 私有方法:private修饰,JDK9开始才有的,只能在接口内部被其他方法调用
- 他们都会默认被public修饰