就是一个虚拟的用于执行bytecode字节码的“虚拟计算机”
包含java虚拟机、库函数以及运行java应用程序所必须的文件
java开发工具包,包含JRE,还增加了编译器和调试器等用于程序开发的文件。
java.math下的两个类:
BigInteger 实现任意精度的整数运算
BigDecimal 实现reny任意精度的浮点运算
Scanner键盘输出
import java.util.Scanner;
Scanner scanner=new Scanner(System.in);
String name=scanner.nextLine();
int age=scanner.nextInt();
重载overload
重载的方法,实际是完全不同的方法,只是名称相同而已
在形参类型,形参个数,形参顺序不同的情况下可以构成重载(可以区分就行)
单词:重载overload,重写loverride;
形式:重载,方法名相同,参数列表不同(个数、类型、顺序);重写,方法名、返回值、参数列表都相同;
范围:重载,是编译时的静态分派,同一个类中;重写,运行时动态分派,发生在继承的父子类中;
权限:重载,没有权限限制;重写,子类的覆写的方法权限不能比父类的访问权限小;
面向过程
适合简单,不需要协作的事物,有1,2,3,4这样步骤的程序
面向对象 object
需要很多协作才能完成
宏观上使用面向对象把握,微观处理依旧是面向过程
通过抽象创建类,通过类创建对象(某个类的对象)
类方法
public static void main(String[] args) {
Hero garen = new Hero();
garen.name = "盖伦";
//必须有一个对象才能调用
garen.die();
Hero teemo = new Hero();
teemo.name = "提莫";
//无需对象,直接通过类调用
Hero.battleWin();
}
什么是单例模式?
1. 构造方法私有化
2. 静态属性指向实例
3. public static的 getInstance方法,返回第二步的静态属性
http://how2j.cn/k/class-object/class-object-singleton/349.html
枚举enum
public enum Season {
SPRING,SUMMER,AUTUMN,WINTER
}
复制数组
System.arraycopy(a, 0, b, 0, 3);
//从a下标为0的位置复制3个数到b的下标为0开始的地方
finalize()
当一个对象没有任何引用指向的时候,它就满足垃圾回收的条件
当它被垃圾回收的时候,它的finalize() 方法就会被调用。
finalize() 不是开发人员主动调用的方法,而是由虚拟机JVM调用的。
抽象类和接口的区别
区别1:
子类只能继承一个抽象类,不能继承多个
子类可以实现多个接口
区别2:
抽象类可以定义
public,protected,package,private
静态和非静态属性
final和非final属性
但是接口中声明的属性,只能是
public
静态
final的
即便没有显式的声明
//基本类型转换成封装类型
Integer it = new Integer(i);
//封装类型转换成基本类型
int i2 = it.intValue();
数字转字符串
package digit;
public class TestNumber {
public static void main(String[] args) {
int i = 5;
//方法1
String str = String.valueOf(i);
//方法2
Integer it = i;
String str2 = it.toString();
}
}
字符串转数字
int
i= Integer.parseInt(str);
四舍五入, 随机数,开方,次方,π,自然常数
package digit;
public class TestNumber {
public static void main(String[] args) {
float f1 = 5.4f;
float f2 = 5.5f;
//5.4四舍五入即5
System.out.println(Math.round(f1));
//5.5四舍五入即6
System.out.println(Math.round(f2));
//得到一个0-1之间的随机浮点数(取不到1)
System.out.println(Math.random());
//得到一个0-10之间的随机整数 (取不到10)
System.out.println((int)( Math.random()*10));
//开方
System.out.println(Math.sqrt(9));
//次方(2的4次方)
System.out.println(Math.pow(2,4));
//π
System.out.println(Math.PI);
//自然常数
System.out.println(Math.E);
}
}
格式化输出
//使用格式化输出
//%s表示字符串,%d表示数字,%n表示换行
String sentenceFormat ="%s 在进行了连续 %d 次击杀后,获得了 %s 的称号%n";
System.out.printf(sentenceFormat,name,kill,title);
StringBuffer是可变长的字符串
append追加
delete 删除
insert 插入
reverse 反转
日期格式化输出
//调用该simpleDateFormat类 定义自己的日期输出格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh时mm分ss秒");
//对日期按照定义格式输出
System.out.println(sdf.format(d5));
//output :1995中的随机日期:Sun Feb 05 00:32:28 CST 1995
//output :1995年02月05日 12时32分28秒
//设置时间
Calendar calendar = Calendar.getInstance();
calendar.set(1995, 0, 1, 0, 0, 0);
SimpleDateFormat sdf =new SimpleDateFormat("yyyy/MM/dd HH:mm:ss" );
String str = "2016/1/5 12:12:12";
try {
Date d = sdf.parse(str);
System.out.printf("字符串 %s 通过格式 yyyy/MM/dd HH:mm:ss %n转换为日期对象: %s",str,d.toString());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
按照日期中的时间排序(小时分钟秒钟)
// 排序
//定义格式
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HHmmssSSS");
Arrays.sort(dates, (date1, date2) -> {
String format1 = simpleDateFormat.format(date1);
String format2 = simpleDateFormat.format(date2);
return Integer.valueOf(format1).compareTo(Integer.valueOf(format2));
});