基础知识
标识符
关键字
abstract | assert | boolean | break | byte |
---|---|---|---|---|
case | catch | char | class | const |
continue | default | do | double | else |
enum | extends | final | finally | float |
for | goto | if | implements | import |
instanceof | int | interface | long | native |
new | package | private | protected | public |
return | strictfp | short | static | super |
switch | synchronized | this | throw | throws |
transient | try | void | volatile | while |
数据类型
强类型语言
- 要求变量的使用严格符合规定,所有变量都必须先定义后才能使用
弱类型语言
JAVA数据类型
- 基本类型(primitive type)
- 数值型
- 整数类型
- byte占1个字节
- short占2个字节
- int占4个字节
- long占8个字节
- 浮点类型
- float占
- double占
- 字符类型
- char占2个字节
- 整数类型
- boolean类型
- 占1位true/false
- 数值型
- 引用类型(reference type)
- 类
- 接口
- 数组
注意:最好完全使用浮点数进行判断
// 所有的字符本质还是数字
转义字符
\t 制表符
\n 换行
boolean扩展
boolean flag = true;
if (flag==true):{}
if(flag):{}
代码要精简易读
类型转换
由于Java是强类型语言,所以要进行有些运算的时候的,需要用到类型转换
低------------------------------------------------------------------->高
byte,–>short,–>char,–>int,–>long,–>float,–>double
// 强制转换(类型)变量名 高–>低转换
// 自动转换 低–>高转换
注意点:
1.不能对布尔值进行转换
2.不能把对象类型转换为不相干的类型
3.在把高容量转换到低容量的时候,强制转换
4.转换的时候可能存在内存溢出,或精度问题
5.操作比较大的数的时候,注意溢出问题
*** byte支持范围-128~127,注意赋值溢出的问题
变量
- 每个变量都必须声明其类型
- Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域
- 每一个变量声明结束后要以分号";"结束
常量
-
定义常量
final 常量类型 常量名=常量值
例:final double PI=3.14
运算符
- 算数运算符:+,-,*,/
- 赋值运算符:=
- 关系运算符:>,<,<=,>=,!=
- 逻辑运算符
- 位运算符
- 条件运算符
- 扩展赋值运算符
Java流程控制
-
用户交互Scanner
基本语法
Scanner s = new Scanner(System.in);
Scanner语法中方法next()和nextLine()
-
if-else
-
switch多选择结构
switch(expression){
case value:
//语句
break;
case value:
//语句
break;
case value:
//语句
break;
}
-
while
-
do-while
-
for
方法
## 方法定义
方法命名规则:驼峰式命名
- 方法是解决一类问题的步骤的有序集合
- 方法包含于子类或对象中
- 方法在程序中被创建,在其他地方被引用
方法原则
一段用来完成特定功能的代码片段,定义一个方法包含以下语法:
- 修饰符
- 返回值类型
- 方法名
- 参数类型(可选)
- 实参
- 形参:用来定义参数
- 方法体:包含具体的语句,定义该方法的功能
修饰符 返回值类型 方法名(参数类型 参数名){
方法体
return 返回值
}
方法重载
-
重载:在一个类中,有相同的函数名称,但形参不同的函数
-
方法重载的规则:
- 方法名称必须相同
- 参数列表必须不同(个数不同,或类型不同,参数排列顺序不同等)
- 方法的返回类型可以相同也可以不相同
- 仅仅返回类型不同不足以成为方法的重载
-
实现理论:
- 方法名称相同时,编译器会根据调用方法的参数个数,参数类型等逐个匹配,以选择对应的方法,如果匹配失败则编译器报错
命令行传参
可变参数
- 再方法声明中,再指定参数类型后加一个省略号(…)
- 一个方法只能指明一个可变参数,它必须是方法最后一个参数.任何普通的参数必须在它之前声明.
数组
数组长度固定,定义后不可改变
元素类型必须相同
数组元素可以任意类型
数组变量是引用类型
初始化:
- 静态初始化
- 定义的时候直接赋值
- 动态初始化
- 定义时不赋值,会被默认初始化,默认值为"0"
下标合法区间[0,length-1]
- 数组的使用
- 普通的for循环
- for each循环
- 数组做方法入参
- 数组做返回值
面向对象
类:属性+方法
面向过程&面向对象
-
面向过程思想:
- 步骤清晰简单,第一步做什么,第二步~
- 面对过程适合处理较为简单的问题
-
面向对象思想
- 物以类聚,分类的思维模式
- 面向对象适合处理复杂的问题
什么是面向对象
- 以类的方式组织代码,以对象的组织数据
- 抽象:变成思想!持续学习
- 三大特性
- 封装
- 继承
- 多态
- 从认识论角度考虑是先有对象后有类.对象,是具体的事物.类,是抽象的,是对对象的抽象
- 从代码运行角度考虑是先有类后有对象.类是对象的模板.
方法的调用
类与对象的关系
- 类:一种抽象的数据类型
- 对象:是抽象概念的具体实例
构造器:
alt+insert---->constructor
- 使用new关键字,本质是在构造器
- 有参构造
封装
- 高内聚:类的内部数据操作细节自己完成
- 低耦合:仅暴露少量方法
- 属性私有,get/set
- 提高程序的安全性,保护数据
- 隐藏代码的实现细节
- 系统可维护增加了
继承
重写
- static方法属于类,它不属于实例不能重写
- final 常量;不能重写
- private方法:私有不能重写
多态
-
对象能执行哪些方法,主要看左边的类型,和右边关系不大
-
子类重写了父类的方法,执行子类的方法
-
注意事项
- 多态是方法的多态,属性没有多态
- 父类和子类,有联系(类型转换异常报错ClassCastException)
- 存在条件:继承关系,方法需要重写,父类引用指向子类对象
-
instanceof:判断实例类型是否相似
-
父类引用 指向子类的对象
-
把子类转换为父类,向上转型
-
把父类转换为子类,向下转型:强制转换
-
方便方法的调用,减少重复的代码;简洁
抽象: 封装|继承|多态
static详解
- 静态属性:加了static字段的变量变成了类的变量,可以被所有实例共享,不属于某个实例
- 静态方法:不需要new可以直接通过类调用如:Student.go();
- 静态代码块:只执行一次,比匿名代码块和构造方法优先执行.
final:修饰的类不可以被继承
抽象类
- 抽口可以多继承
- 不能new这个抽象类,只能靠子类去实现它:约束
- 抽象类中可以写普通的方法
- 抽象方法必须再抽象类中------定义了抽象类,方法必须是抽象的
- new,存在构造器?
- 存在的意义? 节省代码量,提高开发效率
接口
-
定义:就是规范,定义的一组规则,自己无法写方法约束和实现分离:面向接口编程本质是契约
-
实现:实现了接口的类,就需要重写接口中的方法.
-
interface 定义关键字
public interface UserService{
void run(String name);
}
-
-
约束
-
定义一些方法,让不同的人实现
-
接口中所有定义的方法都是抽象的 public abstract
-
public static final
-
接口不能被实例化~,接口中没有构造方法
-
implements可以实现多个接口
-
必须要重写接口中的方法