jdk的工具库主要包含了9个基本组件
javac编译器,java执行器,执行字节码(.class)文件,jar打包工具,将相关的类文件打包为一个.jar包
javadoc文档生成器,jdb调试器,可以设置断点和检查变量,javah可以产生调用Java过程的c过程,或者建立可被Java调用的c过程的头文件
javap反汇编器,显示字节码文件的可访问功能和数据,显示字节码的含义
jconsole进行系统调试和监控的工具
如何学习好java,编写代码, 发现问题,解决问题,自我能力得到提升
属性注释/**提示信息*/,方法内部注释//
类注释,构造方法注释
/**
*/
字符型赋给整型会直接转化为ASCII码,(char)(82-32)会将ASCII码转为字符,布尔型的取值有true或false,也只能是true或false
浮点数常量都要使用f后缀,例如float f = 20.0f
for(String str:names){
System.our.println(str);
}
父类中没有子类的方法,调用该方法时则必须向上转型再向下转型
Animal a = new Dog();
Dog d = (Dog)a;
d.父类中没有的子类方法
抽象方法必须为public或protected,可以包含普通方法,抽象方法为abstract
接口的常量默认为public static final
接口的方法默认为public abstract
接口的方法可以用static修饰
接口的适配,实现一个接口必须实现该接口中的所有方法,因此可以用一个抽象类实现该接口,定义空接口方法,再用类继承该抽象类
接口 对象 = new 类()向上转型即可
嵌套接口,类中和接口中都可以嵌套接口
class A{
public interface D(){
}
public class d1 implements D{
}
public class d2 implements D{
}
public D getD(){
return new d2();
}
public void receive(D d){
d.方法();
}
}
A a1 = new A();
A a2 = new A();
a1.receive(a2.getD());
接口回调
调用类 接口
实现类
调用类的方法参数是接口数据类型,输出接口调用的方法,再使用时,实例化调用类对象,传递给方法不同的new实现类实例
字符串
分割字符串
String ss ="one little,tow little,three little.";
String []str = ss.split("[ ,.]");
正则
Pattern p = Pattern.compile(“ABC*");
Matcher m = p.matcher("abcdefg");
pn(m.find());
将基本数据类型转化为字符串
String.valueOf(基本数据类型);//包括char []数组
字符串格式化
String.format("%o",32);//32的八进制
String.format("%1$d,%2$s,%3$f",125,"ddd",0.25);
字符串类
StringBuilder单线程,StringBuffer多线程,比String快n倍,也可以在字符串指定位置插入字符串
常用类,包装类Boolean,Integer,Character,Number
DecimalFormat类可以快速的将数字格式化
new DecimalFormat("0.00").format(PI);//包括,###和#,##%
时间
Date date = new Date();
date.toString();
输出格式时间sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = sdf.parst(date);
获得时间细节信息
Calendar c = Calendar.getInstance();
int year = c.get(Calendat.YEAR);
随机数字和数学Math有数学的一系列静态方法,Math.pow幂次方
Random随机数,Random r = new Random();r.nextInt(2);取值[0,n)
接受用户输入
Console cons = System.console();
String username = cons.readLine("user:");
String password = cons.readPassword("password:");
或者
Scanner sc = new Scanner(System.in);
if(sc.hasNext()){
String str = sc.next();
pn(str);
}
next()不能得到带有空格的字符串,所以需要应用nextLine();
枚举
public enum E{
MON,TUE
}
E e = E.TUE;
switch(e){
case MON:
break;
case TUE:
break;
}
Error是JVM出错,用户无法处理
Exception用户可以进行处理,所有的异常都是Exception的子类
当方法用throws时,调用时,不管是否产生异常,都应采取异常处理
也可以自己抛出异常,throw new Exception("自定义异常")
自定义异常,继承Exception,重写构造方法
public 构造方法(String msg){
super(msg);
}
assert可以终止程序的执行,score必须大于等于0,不能为负数,不然会终止程序执行和发出提示信息
assert score>=0:成绩不能为负
如果switch没有break,则会执行这个case后的其他代码,而不管case是否匹配,直到遇到了break
泛型类
class A<T>{
public T indexOf(int i){
return (T)arr[i];
}
A<String> a = new A<String>();
或者new A<>();
泛型方法
public static void print(T t){
pn(t);
}
print("apple");print(123);
泛型接口
interface 接口名<类型参数列表>
class 类名<类型参数列表> implements 接口名<类型参数列表>{}
只希望接受该父类下的子类
class A<T extends Number>{}只希望接受数字
Lambda表达式,就是由接口调用函数过程
interface Ia{
void say(String msg);
}
Ia a = msg->System.out.println(msg);
a.say("hello lambda");
lambda多用于向方法传递参数,例如forEach等
java8可以向接口传递方法引用
接口 in2 = Integer::valueOf;或者Fruie::new
直接in2.接口中的方法例如interNew(int num),就可以将其转化为字符串,或者调用构造函数
集合的几种遍历方法
for(Iterator <String> iter=ll.iterator();iter.hasNext();;){
String str = (String)iter.next());
}
Iterator iter=c.iterator();
while(iter.hasNext()){
String str=iter.next();
}
for(String s:ll){
pn(s);
}
c.forEach((key,value)->pn(key);pn(value);});
Map的keySet()遍历键,values()遍历值
for(Map.Entry<String,String> entry = map.entrySet()){
pn(entry.getKey();
pn(entry.getValue());
}
注解
jvm没有定义无参构造函数就定义重载构造函数会报错,需定义
@Override这个方法必须是对父类方法的重写
@Deprecated注解不再使用的类方法,或者属性
@SuppressWarnings抑制编译器生成警告信息
@SuppressWarings(value={"已过时"})
元注解
@Target({ElementType.METHOD})
public @interface Method{}
则@Method注解表明的是方法,ElementType有多个属性有不同的含义
@Retention(RetentionPolicy.RUNTIME)运行时有效
@Documented将通过javadoc和类似的默认工具进行文档化
@Inherited
public @interface Inherite{
String inher();
}
@Inherite(inher="继承")
则应用于父类该注解时,它的子类就会应用该注解