1、主要学习主流javaee(包含javase)
2、优势:跨平台/可移植性、安全性、面向对象、简单性、高性能、分布式、多线程、健壮性
3、运行机制:编译型与解释性
helloworld.java源程序---->javac---->字节码文件.class---->虚拟机JVM(java)---->解释执行
4、jar包:字节码文件打包,src:jdk源代码,bin存放二进制文件的目录,lib存放类库
5、(系统)环境变量的配置:Path: %JAVA_HOME%\bin; JAVA_HOME:jdk安装目录
6、开发工具:Eclipse \ IntelliJ IDE \ NetBeans
7、进行不产生舍入误差的数字(精确的运算)计算使用 BigDecimal/BigInteger
8、封装:高内聚(封装细节)、低耦合(简化外部调用)
9、JAVABean规则:提供了属性和相应的Get/Set方法,没有其他一些复杂的方法的简单的类
10、多态:继承、重写、父类引用指向子类对象,多种实现
11、抽象方法和抽象类 abstract告诉子类必须要给抽象方法提供具体的实现,通过抽象类,我们可以严格限定子类的设计,使子类之间更加通用
抽象方法无具体实现
抽象方法必须被子类实现
抽象类不能实例化,不能使用new
抽象类可以包含属性、方法、构造方法,但是构造方法不能用new来实例,只能用来被子类调用
抽象类只能用来被继承
抽象类可以包含普通方法,有具体实现
12、接口/实现类
只能定义不变的
不提供任何具体方法interface
全是抽象方法,不需要abstract修饰
规范和具体实现的分离
契约/规范
接口可以多继承 extends
访问修饰符只能是public或者默认
接口中的属性只能是常量,修饰符可以不用写
子类通过implements来实现接口中的规范
不能创建实例,但是可以用于声明引用变量类型 IPerson person=new Student();
实现类可以实现多个接口
13、面相接口编程
降低了模块间的耦合性,提高整个系统的可扩展性和可维护性
在没有写实现是要设计好接口,所以设计比较难
14、内部类
成员内部类
静态内部类 static
任意修饰符
静态成员
非静态内部类
特点
可以直接访问外部类的成员
必须寄存在一个外部类的对象里 Outer.Inner inner=new Outer().new Inner();
生成类文件:Outer$Inner.class
Outer.this.age
this.age
不能有静态方法 静态属性 静态初始化块
外部类的静态方法 静态代码块不能访问非静态内部类
匿名内部类
适用于只是用一次的类
new class(){}
无构造方法
15、字符串String和常量池
字符串常量池
先去常量池查找
new 创建新的对象
通常比较字符串使用 equals
Class文件常量池
运行时常量池
16、阅读API文档
String 类:
数组的拷贝arraycopy(object src,int srcpos,object dest,int destpos,int length)
数组的插入和删除都是拷贝
17、Arrays工具类
ToString
Sort排序
binarySearch二分查找
18、二分法检索
有序数组
折半查找 low mid high
19、包装类 :位于java.lang包
使用包装类会在堆内存生成 对象
基本数据类型和包装类对象互相转换
var a=new Integer(30);
var b=Integer.valueOf(30);
int c=b.intValue();
double d=b.doubleValue();
int x=new Integer("888");字符串包装成Integer对象
var z=x.toString();
Integer.MAX_VALUE
针对8种基本数据类型
byte Byte
boolean Boolean
short Short
char Character
int Integer
long Long
float Float
double Double
20、包装类 自动装箱和拆箱(编译器帮我们处理)
装箱:基本数据类型--自动转为--》对象 XXX.valueOf(值);
拆箱:对象--自动转为--》基本数据类型 XXX.intValue();等
包装类缓存的问题:-128~127直接从范围内取值,是同一个对象,不在范围内的==为false,equals为true
21、String 源码分析:
不可变对象(不可变字符序列)
进行String类型的比较时一定要使用 equals方法比较(比较值)
22、可变字符序列
链式调用
StringBuilder(一般使用StringBuilder)
线程不安全,效率高
StringBuffer
线程安全,效率低
Runtime.getRuntime().freeMemory();//获取系统剩余内存空间
23、时间处理相关类
位于java.util包
时间:Date
long now=System.currentTimeMillis();获取系统当前时刻毫秒数 long类型
Date d=new Date();//默认当前系统时刻
new Date(2000);//2000时刻
d.getTime()获取毫秒数
格式转换:DateFormat
一般使用实现类SimpleDateFormat
1、时间对象和字符串之间的转换
把时间对象 --》 按照“格式字符串指定的格式”转为相应的 --》字符串
DateFormat f=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//定义格式
string str=f.format(new Date(毫秒数));//按照上述定义的格式返回字符串
2、把字符串 --》 按照“格式字符串指定的格式”转为相应的 --》 时间对象
DateFormat f2=new SimpleDateFormat("yyyy年MM月dd日 hh时mm分ss秒");
Date date=df.parse(“2019年10月12日 12时12分12秒”);//throw ParseException
日期类:Calendar
一般使用实现类GergorianCalendar
提供日期计算相关功能:年月日时分秒的展示和计算
注意:月份从0开始到11代表1月到12月、星期用1-7表示,1表示星期日,2表示星期一
Calendar c=new GergorianCalendar(年,月,日,时,分,秒);
//Calendar c=new GergorianCalendar(2019,07,03,22,33,55);
如果不传参数,默认是今天的日期时间new GergorianCalendar();
int year=c.get(Calendar.YEAR);//获取年份,其他类似
获取日期:分别获取年月日时分秒