JavaSE
Java基础
标识符和关键字
- Java所有的组成部分都需要有名字,类名,变量名以及方法名都被称为标识符 ,所有的标识符都应该以英文字母(a-z,A-Z),美元符($),或者下划线(_)开头
- 首字母之后可以是字母,美元符下划线或数字的任何字符组合
- 不能使用关键字作为标识符
- 标识符是大小写敏感的
- 可用使用中文命名,但是不建议
下面的标识符是合法的:
myName,My_name,Points,$points,_sys_ta,OK,_23b,3
下面的标识符是非法的:
#name,25name,class,&time,if
Java 9规定:不允许单独使用下划线作为分隔符。
Java 的关键字加上goto const true false nulll 一共有53个关键字和保留字,都不能作为Java的标识符。
Java数据的类型
- 基本类型
- 引用类型
注意 - 其中float需要float需要这样来声明 float = 0.1f;float是有限,离散,舍入误差,大约,接近但不等于,因此最好不要用浮点数进行 == 这样的确定是否相等的操作,会有精度的损失,可以采用BigDecimal数学工具类;
- String是引用类型,不是基本类型;
- Java和C不同的是,Java采用Unicode编码,范围是 0-65536;
- 布尔类型的初始值为false
- 在C语言中,char类型占一个字节,在Java中char类型占2个字节。
- 比较字符串时最好使用str.equal()方法进行比较
注意点
上图中,false的原因是因为两个字符串在不同的对象中,因此为false,而后一个没有对象,在同一片内存中,因此为true;
类型转换
类型转换主要有两种类型转换
byte只有128位
数字间是可以用下划线间隔的,更加方便阅读数字
变量
分为实例变量和局部变量
- 局部变量直接就可以使用
- 实例变量必须通过对象来调用
- 加上了static即成为了类变量,跟类一起出现消失,可以直接通过类调用
常量
运算符
尤其应该注意一下位运算
<< 左移一位即 原数*2 ; 左移三位即原数 *2 *2 *2 是次方的关系
<< 右移则同理
插入一个idea的快捷键
ctrl+D 复制当前行到下一行
关于注释时的参数
- @author 作者名
- @version 版本号
- @since 指明需要最早的jdk版本
- @param 参数名
- @return 返回值情况
- @异常抛出情况
输入
Java使用Scanner对象进行输入操作
1 |
|
关于next()和nextLine()
next()会以空格结束,而nextLine()以enter结束,所以可以输入带空格的字符串
输入单个字符 char c = sc.next().charAt(0);
增强for循环
增强for循环主要用于输出,因为它没有下表,不方便操作数据
1 |
|
方法
重载
熟记重载的规则
可变参数
可变参数的使用
其实本质就是数组
数组
数组和C语言类似,就是声明时有所不同
Java的内存
数组三种初始化
即有
- 静态初始化
- 动态初始化
- 隐式初始化
特殊点: 布尔型的初始为false;
Java里数组可以通过 shuzuname.length 来直接获得长度;
多维数组
声明
1 |
|
多维数组的其他部分皆于C语言相同,此处不再赘述;
Arrays类
toString()方法
.sort() 排序方法 默认为升序;
.fill() 填充方法 参数可以填(数组名,起始点,终止点,待填充的数字) 若不填起始点,终止点则会全部填充
面向对象
本质:以类的方式组织代码,以对象的组织(封装)数据
三大特性
-
封装
-
继承
-
多态
类和对象
emmm…这部分没啥写的
关于静态方法: 静态方法可以直接调用,非静态方法必须将类实例化后才能通过对象调用此方法
引用传递
即传参时传递一个对象 相当于指针,在方法中是可以改变参数的
构造器
默认有一个无参的,在new对象时就是调用,自己写了有参的之后需要把无参的构造方法加上,不然会损失无参构造.
封装
只需要记住.属性私有(private)
则需要getter和setter方法
1 |
|
如果是private非静态属性依旧需要new一个对象才能访问
继承
java只有单继承:简单的理解 一个儿子一个爸爸,一个爸爸多个儿子
所有的类都是继承了object类的
继承之后,子类可以直接调用父类的方法,即使是没有static
私有的方法是无法被继承的,即通过super也调不了,如上图所示就会报错
在new子类的时候,也调用了父类的无参构造,在这里 super();是隐藏代码
父类的构造器必须在子类构造器的第一行,这里不写也没有关系,反正都是隐藏代码
super的注意点
- super调用父类的构造方法,必须在构造方法的第一位
- super必须只能出现在子类的方法或者构造方法中
- super和this不能同时调用构造方法
和 this 比较
- 代表的对象不同
this:本身调用者这个对象
super:代表父类对象的应用 - 前提
this没有继承也可以使用
super:只能在继承关系下才能使用 - 构造方法
this();本类构造
super();父类的构造;
多态
方法的重写
重写都是方法重写和属性无关
如上图,static方法是无法被重写的,相当于两个方法,这时候能调什么方法都看左边是什么类型
重写后一般会有@override注释
并且重写只能是public方法,如果是私有方法,则会出现如上图所示的报错
关于重写
- 需要有继承关系,子类重写父类的方法
- 方法名必须相同
- 修饰符:范围可以扩大但不能缩小 publci > Protected >defalt>private
- 抛出的异常:范围可以被缩小,但不能扩大:ClassNotFoundException -->Exception
- 子类的方法和父类必要一致,方法体不同
对象能执行那种方法主要看左边是什么类型和右边关系不大 要想调用,可以强制转换
如上图:强制转换(上向下)就可以调用了
多态注意事项
- 多态是方法的多态,属性没有多态
- 父类和子类,有联系 类型转换异常 ClassCastException
- 存在条件:继承关系,方法需要重写,父类引用指向子类对象 Father f1 = new Son();
不可以重写的
- static 方法,属于类,它不属于实例
- final常量
- private方法
instanceof关键字
instanceof关键字就是用来判断子父类的关系的,值得注意的是再上图中Object是student new出来的所以在Teacher 那里依然是false
static 详解
简单的来说就是
-
非可以调静
-
静不可以调非
-
main函数也是静,所以不可以直接调用非静的方法
关于代码块
以下顺序是代码执行的顺序
- 静 只执行一次
- 匿名
- 构造方法
构造方法竟是最后执行的,令人震惊
抽象类
接口
-
接口中的所有定义方法都是抽象的public abstract
-
在接口中常量都是public static final前缀
-
类可以实现接口implements
-
实现了接口中的类,就必须实现接口中的方法
-
接口可以实现多就继承
例如
1 |
|
内部类
成员内部类
1 |
|
内部类可以获得外部类的私有属性
一个Java类中可以有多个class类,但是只能有一个public class类(这不叫内部类)
静态内部类
局部内部类
匿名内部类
异常
最大就是throwable
1 |
|
finally可以不要,一般用于处理关闭IO流的相关操作
idea快捷键 ctrl+alt+T try catch包裹代码
自定义异常
JavaSE结束,后面开始Java多线程和注解反射