一、文档注释(/*注释内容/)
package com.bianyiit.cast;
/**
* 这是一个生产手机的演示文档*/
public class DemoApi {
public static void main(String[] args) {
Factory factory = new Factory();
factory.prodece(new XiaoMiPhone());
factory.prodece(new RedNotePhone());
factory.prodece(new PupperNotePhone());
}
}
/**工厂:生产手机*/
class Factory{
public void prodece(Phone p){
p.run();
}
}
abstract class Phone{
public abstract void run();
}
/**小米手机的生产方法*/
class XiaoMiPhone extends Phone{
@Override
public void run() {
System.out.println("正在生产小米手机...");
}
}
/**红米手机的生产方法*/
class RedNotePhone extends Phone{
@Override
public void run() {
System.out.println("正在生产红米手机...");
}
}
/**紫米手机的生产方法*/
class PupperNotePhone extends Phone{
@Override
public void run() {
System.out.println("正在生产紫米手机...");
}
}
如何生成一个类似JavaApi的文档
步骤1:添加指定的/**这是一个生产手机的演示文档*/的注释内容
步骤2:右击xxx.java,然后点击File Path确定,选择xxx.java进入目录
步骤3:双击路径,然后全部取消,输入cmd进入dos命令行
步骤4:输入javadoc Demo.java生成注释文档
步骤5:点击index.html打开和查看你生成的API文档
注意:如果输入javadoc 类名.java显示字符串的不可映射字符,那么我们需要进入file path目录,然后找到你的xxx.java文档,右击编辑,点击另存为,将编码格式改为ANSI编码就没有任何问题了
二、Java中的第一个API–object类
object类是所有类的父类(根类/超类),object中的所有方法子类都可以使用
JavaAPI1.6的解释文档
object的一个方法(clone())
package com.bianyiit.demo;
public class Demo_Clone {
public static void main(String[] args) {
Son s=new Son("小明",15);
/*源码分析:public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}*/
System.out.println(s.toString());
try {
Son s1= (Son) s.clone();
System.out.println(s1);
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}
class Son extends Object implements Cloneable{
String name;
int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Son(String name, int age) {
this.name = name;
this.age = age;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
@Override
public String toString() {
return "Son{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
//输出结果:
Son{name='小明', age=15}
Son{name='小明', age=15}
object的四个常用方法
toString()
package com.bianyiit.demo;
public class Demo_toString {
public static void main(String[] args) {
Person p1 = new Person("陈翔",21);
System.out.println(p1.toString()); //打印的是全类名地址com.bianyiit.demo.Person@1b6d3586
//为了直接输出对象,输出的是数据而不是地址值,那么就要重写object的toString()方法
//总结:为什么要重写toString();
//原因:如果不重写,调用的是object的toString();而它打印的是全类名地址值
//重写之后的toString()输出结果:Person{name='陈翔', age=21}
}
}
class Person{
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
equals()
package com.bianyiit.demo;
import java.util.Objects;
public class Demo_Equals {
public static void main(String[] args) {
Person p1 = new Person("陈翔",21);
Person p2 = new Person("陈翔",21);
/*if(p1.equals(p2)){
System.out.println(p1.equals(p2)); //这里的equals()比较的是两个对象的地址值是否相等,如果想比较两个对象的值是否相等
//必须重写object类中的equals();
}else{
System.out.println(p1.equals(p2));*
}*/
System.out.println(p1.equals(p2));
//总结 ==号和equals()方法的区别
/*==在比较基本数据类型的时候比较的是具体的值,而在比较引用数据类型的时候比较的是地址值
* 而object的equals()比较的是两个对象的地址值是否相等,如果想比较两个对象的值是否相等,需要重写object里面的equals()*/
}
}
class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
/* @Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}*/
@Override
public boolean equals(Object obj) {
Person person = (Person) obj;
if (this.name.equals(person.name) && this.age == person.age) {
return true;
} else {
return false;
}
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
hashcode()
package com.bianyiit.demo;
public class Demo_HashCode {
public static void main(String[] args) {
Person p1 = new Person("陈翔",21);
System.out.println(p1.hashCode()); //输出的是地址值
Person p2 = new Person("陈翔",21);
System.out.println(p2.hashCode()); //输出的是地址值
System.out.println(p1==p2); //比较的是地址值
System.out.println(p1.equals(p2)); //重写了object里面的toString()--->比较的是对象具体的属性值是否相等
}
}
//输入结果:
460141958
1163157884
false
true
getClass()
package com.bianyiit.demo;
public class Demo_GetClass {
public static void main(String[] args) {
Person p1 = new Person("陈翔",21);
Class<? extends Person> aClass = p1.getClass();
System.out.println(aClass);
//获取字节码文件对象
}
}
//输入结果:class com.bianyiit.demo.Person
三、Java中的第二个API–System类
package com.bianyiit.demo;
import java.util.Scanner;
public class Demo_System {
public static void main(String[] args) {
new Scanner(System.in); //System.in代表输入
//返回以毫秒为单位的当前时间 从1970年1月1日0时0分0秒开始计算--->当前时间的毫秒值
System.out.println(System.currentTimeMillis());
//System.out.println(); //System.out代表输出
//数组的复制
int[] srcArray={1,2,3,4,5};
//源数组打印
for (int i = 0; i < srcArray.length; i++) {
System.out.print(srcArray[i]+"\t");
}
System.out.println();
int[] descArray=new int[srcArray.length];
System.arraycopy(srcArray,0,descArray,0,srcArray.length); //复制的方法
//遍历descArray
for (int i = 0; i < descArray.length; i++) {
System.out.print(descArray[i]+"\t");
}
System.out.println();
//手动终止虚拟机
int i=1;
for(;;){
System.out.println(i);
i++;
if(i==10){
System.exit(0);
//break;
//break只是结束循环,循环后面的程序还能继续运行,而System.exit(0)是结束了整个虚拟机,后面的程序不能再执行
}
}
//System.gc(); ---运行垃圾回收器
}
}
//输出结果:
1573554853459
1 2 3 4 5
1 2 3 4 5
1
2
3
4
5
6
7
8
9
四、Java中的第三个API–Date类
package com.bianyiit.demo;
import java.util.Date;
public class Demo_Date {
public static void main(String[] args) {
System.out.println(new Date().toString()); //美国人看的懂的时间 Tue Nov 12 15:46:02 CST 2019 CST东八区
System.out.println(new Date().toLocaleString()); //中国人看的懂的时间 2019-11-12 15:46:02
System.out.println(System.currentTimeMillis()); //毫秒值
for (int i=0;i<=1000000;i++){}
Date d=new Date();
d.setTime(15735442L);
System.out.println(d.toLocaleString()); //中国人看的懂得时间
System.out.println(new Date().getTime()); //毫秒值
}
}
//输出结果:
Tue Nov 12 18:32:11 CST 2019
2019-11-12 18:32:11
1573554731550
1970-1-1 12:22:15
1573554731555
五、Java中的第四个API–DateFarmat类
package com.bianyiit.demo;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Date;
public class Demo_DateFormat {
public static void main(String[] args) throws ParseException {
//日期的格式化类(抽象类,不能创建对象)
DateFormat d1 = DateFormat.getInstance(); //不是getDateInstance()
//创建一个日期对象
Date d2 = new Date();
//格式化一下日期对象 从日期对象---字符串
System.out.println(d1.format(d2));
//解析 字符串---日期对象
String s="19-11-12 下午4:45";
System.out.println(d1.parse(s).toLocaleString());
}
}
//输出结果:
19-11-12 下午6:35
2019-11-12 16:45:00
六、Java中的第五个API–SimpleDateFarmat类(开发中常用的超级格式化日期类)
package com.bianyiit.demo;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo_SimpleDateFormat {
public static void main(String[] args) throws ParseException {
//创建一个日期类
Date d1 = new Date();
//创建一个超级格式化对象类(无参构造)
System.out.println(new SimpleDateFormat().format(d1));
//(有参构造)
System.out.println(new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒").format(d1));
//解析字符串---生成日期类
String s="2019年11月12日 16时51分52秒";
System.out.println(new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒").parse(s).toLocaleString());
/*总结:1.解析的时候,每一个单独的日期连接符要跟格式化给定的连接符要一致 2.给定的数据个数没有限制*/
}
}
//输出结果:
19-11-12 下午6:36
2019年11月12日 18时36分52秒
2019-11-12 16:51:52