java入门
卸载JDK
- 删除java的安装目录
- 删除环境变量 java_home
- 删除path下关于java的目录
- 查看java -version
安装JDK
- 下载JDK8
- 修改安装路径
- 配置环境变量
- 配置JAVA_HOME,地址为jdk地址
- 配置path变量
- 检查 java -version
HelloWorld
java文件后缀为java
文件名和类名需保持一致,且首字母大写
public class hello{
public static void main(String[] args){
System.out.print("Hello,World!");
}
}
打开命令行
- javac hello.java 编译文件,文件夹中出现.class文件
- java hello 运行文件
IDEA安装
安装了旗舰版,用教育邮箱领了license
操作
- psvm public static void main
- sout System.out.println
Java基础
注释
Java中的注释有三种
- 单行注释 //
- 多行注释 /* */
- 文档注释 /** */
标识符
数据类型
Java是强类型语言:要求变量的使用要严格符合规定,所有变量先定义后使用
Java类型分为两种类型:基本类型和引用类型
long类型在数字后加L
float类型在数字后加F
字符char用单引号,字符串string用双引号
浮点数 有限 而且是离散的
最好完全避免使用浮点数进行比较
类型转换
类型 高-----------低
double float long int (short,char,byte)
强制转换
高 → 低
自动转换
低 → 高
数字可以用下划线分割
变量
局部变量
实例变量
类变量: static
常量
final 修饰符
运算符
整数型运算有long结果为long,无long都为int
字符串连接问题
包机制
包的作用相当于文件夹
一般利用公司域名倒置作为包名
DOC注释
Java流程控制
用户交换Scanner
Scanner s = new Scanner(System.in);
通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据
next()以空格为结束符
nextline()以enter为结束符
用完Scanner要记得关掉
scanner.close();
顺序结构
选择结构
- if单选
- if双选
- if多选
- 嵌套的if
- switch多选择
反编译 java -----class(字节码文件) -----反编译(IDEA)
项目结构 -------找到class文件
循环结构
- while循环
- do…while循环
- for循环
- 增强型for循环:主要用来数组
Java方法
方法的定义
方法包含一个方法头和一个方法体
修饰符 返回值类型 方法名 (参数类型 参数名){
方法体
return 返回值;
}
return 0;//终止方法
Java都是值传递
方法的重载
方法的重载规则
- 方法名称必须相同
- 参数列表必须不同(个数不同、或类型不同、参数排列顺序不同等)
- 方法的返回类型可以相同也可以不同
- 仅返回类型不同不足以成为方法的重载
可变参数
在方法声明中,在指定参数类型后加一个省略号(…)
一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。
递归
递归是一种思想的学习,基数太大不建议使用
Java数组
数组声明创建
数组变量声明
int[] num;//首选
int num2[];
Java语言中使用new操作符来创建数组
dataType[] arrayRefVar = new dataType[arrySize];
获取数组长度 arrays.length
Java内存分析
堆:存放new的对象和数组
栈:存放基本变量类型
方法区
数组初始化
- 静态初始化:创建+赋值
- 动态初始化:先创建后赋值
- 默认初始化
数组的四个基本特点
- 长度是确定的,数组一旦创建,大小不可改变
- 元素必须类型相同
- 其元素可以是任何数据类型
- 数组变量属引用类型,数组也可以被看成对象。数组本身就是对象,对象是在堆中的,数组就在堆中
数组使用
- For-Each循环:array.for
- 数组作方法入参
- 数组作返回值
增强for循环,在不需要下标时适用
多维数组
看成数组的数组
Arrays类
学会看源码
我的arrays.toString有问题
稀疏数组
面向对象编程
Java的核心思想就是OOP
OOP 面向对象编程
属性+方法 = 类
宏观上面向对象,微观上面向过程
面向对象的本质就是:以类的方式组织代码,以对象组织数据
对象是具体的,类是抽象的
三大特性
- 封装
- 继承
- 多态
Static
静态方法可以直接调用,非静态方法需要实例化后再调用
值传递和引用传递
Java都是值传递
引用传递:对象,本质还是值传递
类与对象的关系
一个项目应该只存在一个main方法
创建对象
new
一个类中:属性+方法
this 代表当前类
构造器
一个类即使什么都不写,也会存在构造器
类中的构造器也叫构造方法,是在进行创建对象的时候必须要调用的。且有两个特点:
- 必须和类的名字相同
- 必须没有返回类型,也不能写void
构造器作用:
- 使用new关键字,本质是在调用构造器
- 构造器一般用来初始化值
定义了有参构造后需要显示的定义一个无参构造
Alt + Insert 自动生成构造器
内存分析
方法和引用对象在栈中,new的东西在堆中
封装
设计追求:“高内聚,低耦合”
属性私有 get/set
继承
extends:子类继承父类,就会拥有父类的全部方法(修饰符为public)
Java中类只有单继承,没有多继承
Super
调用父类构造器,必须要在子类构造器第一行(默认调用父类)
方法重写
父类的引用指向子类
//方法的调用只和左边,定义的数据类型有关
A a = new A();
a.test();//A
B b = new A();
b.test();//B
override 重写
非静态方法才能重写
重写需要有继承关系,子类重写父类的方法
- 方法名必须相同
- 参数列表必须相同
- 修饰符:范围可以扩大但不能缩小 public>Protected>Default>private
- 抛出的异常:范围可以缩小但不能扩大
多态
多态注意事项:
- 多态是方法的多态,属性没有多态
- 父类和子类,有联系
- 存在条件:继承关系,方法需要重写,父类引用指向子类对象
方法不能重写的情况
- static 方法属于类,不属于实例
- final 常量
- private方法
instanceof
System.out.println(x instanceof y);
static
静态代码块>匿名代码块>构造函数
静态导入包
抽象类
abstract
抽象类的所有子类都必须要实现他的抽象方法,除非子类为抽象类
Java中类只能单继承,但接口可以多继承
接口
接口:只有规范,作用是约束和实现分离
关键字 interface
implement 实现接口
接口中的所有定义其实都是抽象的
异常机制
Error通常是灾难性的错误
Exception通常是可以被程序处理的
异常处理机制
- 抛出异常
- 捕获异常
异常处理五个关键字:
try、catch、finally、throw、throws
Ctrl + Alt + T