标识符:给类或者变量类的方法属性命名都是标识符
组成必须是:字母、数组、_、$、#、-
首字母不能是数字
System.in
(输入)
System.out
(输出)
数据类型 | 占用字节 | 数据范围 |
---|---|---|
byte | 占一个字节(8bit) | -2^7(-10111 1111=127) - 2^7 (1111 1111=-128) |
short | 占两个字节(16bit) | -2^15 - 2^15-1 |
int | 占四个字节(32bit) | -2^31 - 2^31-1 |
long | 占八个字节(64bit) | -2^63 - 2^63-1 |
数据类型 | 占用字节 | 数据范围 |
---|---|---|
float | 占四个字节(32bit) | -3.410^38 - 3.410^38 |
double | 占八个字节(64bit) | -1.710^308 - 1.710^308 |
数据类型 | 占用字节 | 数据描述 |
---|---|---|
char | 占两个字节(16bit) | 采取 Unicode 编码,可以存放中文 char c = '中'; |
数据类型 | 占用字节 | 数据值 |
---|---|---|
boolean | 占1个字节(8bit) | true false |
高的数据类型赋值低的数据类型
+ - * / % ++ --
(不建议 byte,short,char 进行操作,如果一定要操作,都默认转换成 int 操作)== != > < >= <=
&& || ! & |
(返回 Boolean)& | 《 》
条件 ? 值1 : 值2
(条件成立,返回值1,否则返回值2) forEach
:(加强型 for 循环)
for(String string : array)
:for(数据类型 变量名 : 数组)
/** if else 主要用在区间段判断 switch 主要用在定值判断,switch 一般是与 break 配合使用 */ if(条件) { 条件true要执行的代码 } else if(表达式语句) { } else { 条件false要执行的代码 } switch(变量) { // 变量的数据类型:只能是byte short int 或者 enum case 值1: 操作1; ...... // String 只能是仅代表1.7与以后的版本才可以放在switch中 case 值n: 操作n; default:其他情况的操作; }
/** while 与 do while 的区别: 一般 while 能做的操作do while 也能够实现 while 可能执行0次或者多次,但是 do while 至少执行一次 */ while(条件) { 循环语句 } do{ }while(条件); /** 中断循环: break 中段本层循环,不能中断外一层 continue 中断本次循环 this 代表当前对象 */
面向过程:vc
面向对象:Java,C++
面向过程是面向对象的基础,面向对象依赖于面向过程,他们之间不存在冲突
面向对象(OO),面向对象的编程(OOP),面向对象的分析(OOS),面向对象的设计(OOD)
面向过程 → 侧重于业务流程的实现,算法的本身
面向对象 → 侧重于实现业务的事物,调用着程序的指挥官
面向对象:编程最小单位
把具有相同属性与行为的一系列事物统称为一个类。例如:动物,鱼 <・)))><<
class 类名{ 属性 数据类型 属性名; ...... 数据类型 属性名; // 行为也叫方法 返回值类型 方法名(参数列表){ 方法体 } } /** 类体:抽象的概念,具体相同属性与行为的一系列事物的总称; 类体 → 属性与行为 */
类,接口,数组
类的属性也可以称为类的成员变量,类的成员属性,域;Java 的数据类型 属性名
类的属性如果不赋值,会有默认值,基本类型默认值都与0相关,引用类型默认值都是 null
是具有特定功能的封装
返回值的类型 方法名(参数列表 形式参数){ 方法体 }
可以是 Java 的数据类型:基本类型,引用类型,void
是客观存在的,是类的实例;类是对象的模版(万物皆对象)
创建对象:类名 对象名 = new 类名();
调用对象的属性或者行为: .
代表引用
对象名.属性,对象名.行为(参数列表);
成为类的成员属性,全局变量会有默认值
默认值规则:byte,short,int,long 默认值:0
相当于操作系统里面的文件夹
包主要是为了解决开发过程中类的命名冲突问题
一般把完成特定功能的代码放在同一个包里
Java.lang
:Java 核心类包,默认都已经导入,不需要手工导入
Java.util
:Java 的工具类包
面向过程:注重程序的流程,数据结构与算法,参与者就是它本身
面向对象:注重的事物的属性与行为,参与者更多是一个指挥者
继承是单继承:一个类只能有一个直接父类,但一个父类可以有多个子类
Java 中没有多继承,但是有多重继承,所有类的顶级父类是 Object 类
在继承关系中,子类对父类的方法的重新实现
只能骗过编译器,运行会发生转换异常
修饰符:控制别的类对本类的属性与方法的访问权限
面向对象的封装,就是通过访问修饰符来控制访问权限
修饰符 | 本类 | 同包下的类(子类与非子类) | 不同包的子类 | 不同包的其他类 |
---|---|---|---|---|
public | T | T | T | T |
protected | T | T | T | F |
default | T | T | F | F |
private | T | F | F | F |
对象名 instanceof 类名:用来判断对象是否是类的实例
Object() {}
toString()
:返回类的类路径 + @+hascode对应的16进制数equals(Object obj)
:对象(Object)的比较 equals与==相同hascode()
: 返回内存地址的整数 构造:String() String(String s) String(byte s[]) String(char s[])
String s = "hello";
String s = new String("hello");
方法 | 描述 |
---|---|
boolean equals(Object anObject) |
重写了Object equals 比较字符串内容 |
boolean equalsIgnoreCase(Object anObject) |
忽略大小写比较字符串内容 |
int length() |
获取字符串长度 |
char charAt(int index) index → 0-length()-1 |
获取字符串中 index 位置的字符 |
indexOf("要查找的字符串") |
返回第一次出现要查找的字符串的位置,如果查找不到返回-1 |
indexOf("要查找的字符串",int index) |
跳过 index 位置,开始查找第一次出现要查找的字符串的位置 |
lastIndexOf("要查找的字符串") |
返回最后一次出现要查找的字符串的位置 |
lastIndexOf("要查找的字符串",int index) |
跳过 index 位置,返回最后一次出现要查找的字符串的位置 |
substring(int begin) |
截取字符串从 begin 开始到末尾 |
substring(int begin,int end) |
截取字串,从 begin 开始到 end 不包含 end |
replaceAll("原串","新串") |
把字符串中的所有原字符串替换成新串 |
split("分隔符") |
分割符把字符串分割成若干个字符,返回分割后的字符串数组 |
concat("xxx") | 相对于 "原串" + "xxxxx",字符串追加 |
Object 是 Java 的祖先类,基类,金字塔最顶端的类,最小的细胞类
如果是基本类型(byte short int long char float double boolean)
== 比较的内容(值)
如果比较是引用类型(类 接口 数组)
== 比较的是内存地址
equals 只能用于引用类型的比较
比较的时候看当前对象的类里面有没有重写 equals 方法,如果没有重写 equals 方法,默认调用 Object 里面的 equal 方法
如果重写 equals 方法,那么按照当前类中 equals 方法的逻辑进行比较
如果两个对象 equals() 返回true,那么 hashCode() 值会相同,但是两个对象 hashCode() 相同,两个对象未必能 equals() 相等
final 修饰变量:就变成常量,不可以变
final 修饰方法:就变成最终方法,不可以被重写 override
final 修饰类:类就不可以被继承 (太监类)
append()
:往字符串追加内容
insert(位置,"内容")
:往字符串指定位置追加内容
delete(int start,int end)
:删除字符串从 start 开始到 end - 1 位置上的字符串
reverse()
:让里面的内容反转
System.in
:输入流
System.out
:输出流
Scanner in = new Scanner(System.in); // 遇到空格就不往后取内容 in.next(); // 遇到换行符才不往后取内容 in.nextLine();
Java 程序垃圾是不需要程序员去手工回收,系统(JVM)在后台启动一个线程(守护线程) 每隔一定的时间,自动调用System.gc()
方法,扫描系统中长时间
未使用对象,或者对象指向null,自动回收这些对象。
调用该对象的finalize()
方法来释放占用的内容空间,当然程序员也可以手工调用System.gc()
SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类
yyyy:四位年
MM:月
dd:日
hh:12进制时
HH:24进制时
mm:分
ss:秒
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss") new SimpleDateFormat("yy年MM月dd日 HH时:mm分:ss秒 ")
基本类型的包装类里面都提供了操作该基本类型的属性与方法
基本类型 | 包装类 |
---|---|
byte | java.lang.Byte |
short | java.lang.Short |
int | java.lang.Integer |
long | java.lang.Long |
float | java.lang.Float |
double | java.lang.Double |
char | java.lang.Character |
boolean | java.lang.Boolean |
Java 数组用来存储具有相同数据类型的若干个数据的集合,数组长度不可变
一个一维数组里面每个元素都是一个一维数组
int nums[] = {1,2,3,4,5,6,7,8,9};
动态定义
申明: 数据类型[] 变量名(数组名);
初始化:数组名 = new 数据类型[length];
数据类型[] 变量名(数组名) = new 数据类型[length];
静态定义
int nums = {{1,2,3},{4,5,6},{7,8}};
ArrayIndexOutOfBoundsException
:数组下标越界异常
# 排序数字 8,7,6,3,5,2,4,1 # 首轮 7,8,6,3,5,2,4,1 7,6,8,3,5,2,4,1 7,6,3,8,5,2,4,1 7,6,3,5,8,2,4,1 7,6,3,5,2,8,4,1 7,6,3,5,2,4,8,1 7,6,3,5,2,4,1,8 # 第二轮 6,7,3,5,2,4,1,8 6,3,7,5,2,4,1,8 6,3,5,7,2,4,1,8 6,3,5,2,7,4,1,8 6,3,5,2,4,7,1,8 6,3,5,2,4,1,7,8 # 末轮 8,7,6,3,5,2,4,1
''' 首轮 max=8 index=0 ''' 8,7,6,3,5,2,4,1 ''' 第二轮 max=7 index=1 ''' 8,7,6,3,5,2,4,1 ''' 第三轮 max=6 index=2 ''' 8,7,6,3,5,2,4,1 ''' 末轮 max=1 index=7 ''' 8,7,6,5,4,3,2,1
一个方法没有方法体{}
访问修饰符 abstract
返回值类型 方法名(参数列表);
这个时候方法就必须申明为抽象方法(用关键字 abstract 修饰)
访问修饰符(default protected public)
abstract class 类名{}
比较点 | 抽象类 | 接口 |
---|---|---|
定义 | abstract class 类名{} | interface 接口名{} |
构造器 | 有 | 无 |
成员属性方法 | 有 | 无 |
常量 | 有 | 有 |
抽象方法 | 可以有,可以没有 | 有 |
继承exends | 抽象类可以继承其他类,只能单继承 | 接口只能继承接口,可以多继承 |
实现implements | 抽象类可以实现接口,可以多实现 | 接口不能实现接口 |
关系 | 抽象类是用来被继承的,与后代存在 instanceof 关系 | 接口是用来被实现的,与实现接口的类不存在任何关系 |
数组定长的定义后大小不可以变化的
方法 | 描述 |
---|---|
add(Object obj) | 追加元素 |
addAll(Collection c) | 追加另外一个集合 |
size() | 集合里面的元素个数 |
remove(Objecr obj) | 删除元素 |
removeAll(Collection c) | 删除外一个集合里面存在的所有元素 |
clear() | 清空集合 |
isEmpty() | 判断集合是否没有元素 |
iterator() | 迭代集合里面的元素 |
List 接口:有序的,可以重复的集合接口
ArrayList,LinkedList,Stack,Vector
Set:无序的,不可以重复的集合
常用实现类 HashSet,TreeSet,HashSet
去重:先调用当前对象的 hashCode 去集合里面找,如果没有相同的就会放入集合,如果有相同的继续调用 equals(),如果有 equals 就不放入,如果没有相同的就放入
Map 接口: 键值对存储
get(index,Object obj)
:在指定位置上添加元素toArray()
:把集合转换成数组指定参数或者集合的数据类型
用法
List<数据类型> list = new ArrayList();
泛型好处
子类 Error 是程序错误,不可以运行或者内存溢出,断电,程序是无法捕获的
Exception 程序运行过程中输入输出计算结果不当发生
关键字 | 描述 |
---|---|
try | 尝试运行某段代码 |
catch | 捕获异常 |
finally | 最终要执行的一段代码,在程序中用来释放资源,关闭打开的资源 特殊情况:finally 之前 try 或者 catch 中遇到 System. |
thorw | 抛出异常 |
throws | 声明异常 |
写一个类 extends Exception{}
)