Object类、常用API

自学Java一段时间了,今天开始写博客,之后会陆续把之前的内容补发。

01.第一章:Object类_概述:

(1).java.lang.Object类:使用时不需要导包;Java中任何的"类"包含数组都继承自“Object”。
     Object类是所有引用类型的父类。
(2).Object类中定义了很多方法,给子类继承;有很多方法我们子类可以重写。

02.第一章:Object类_toString方法:

(1).toString()方法是Object类中定义的,作用:打印对象的属性。
(2).它在Object类中的默认实现打印:全名限定的类名 + "@" + 十六进制的地址(对我们来说无意义);
(3).如果我们想打印“对象的属性”就需要:重写此方法;
(4).示例代码:
     public class Student {
        private String name;
        private int age;
        public Student() {
        }

     public Student(String name, int age) {
        this.name = name;
        this.age = age;
        }
......//快捷键:alt + insert --> t  --> 回车 --> 回车
    @Override
    public String toString() {
        return "Student{" +
            "name='" + name + '\'' +
            ", age=" + age +
            '}';
        }
    }
   public class Demo {
       public static void main(String[] args) {
       Student stu = new Student();
       stu.setName("黄渤");
       stu.setAge(22);
       System.out.println(stu);    
       }
   }

(5).其它说明:Java类库中的绝大部分类(ArrayList、String、Scanner类....)
        都已经重写了:toString()方法。

03.第一章:Object类_equals方法:

1).equals方法也是Object类中定义的方法,作用:比较两个对象的所有属性;
2).equals方法在Object类中的默认实现,使用:== 判断,判断两个对象的地址是否一样(对于我们无意义);
3).我们需要重写此方法,用于:比较两个对象的所有属性值是否一样;
4).示例代码:

public class Student {
private String name;
private int age;

.....
@Override
public String toString() {
    return "Student{" +
            "name='" + name + '\'' +
            ", age=" + age +
            '}';
}

@Override//快捷键:alt + insert --> e --> next --> 回车 --> 回车 
public boolean equals(Object o) {
    if (this == o)
        return true;
    if (o == null || getClass() != o.getClass())
        return false;
    Student student = (Student) o;
    return age == student.age &&
            Objects.equals(name, student.name);
}

}

public class Demo {
public static void main(String[] args) {
Student stu1 = new Student(“孙红雷”, 18);

    Student stu2 = new Student("黄渤", 19);

    Student stu3 = new Student("黄渤", 19);

    System.out.println("自己判断:");
    System.out.println(stu2.getName().equals(stu3.getName()) &&
                        stu2.getAge() == stu3.getAge());
    System.out.println("使用equals方法:");
    System.out.println(stu2.equals(stu3));//true
    System.out.println(stu2 == stu3);//false
}

}
5).注意:Idea的快捷键会同时生成equals()和hashCode()方法,删掉hashCode()即可;

04.第一章:Object类_Objects类:

1).java.util.Objects(类):使用时要导包;作用:“对象”操作的工具类;里面包含了一些对“对象”操作的一些“静态”方法。
2).Objects类中的equals(Object obj1 , Object obj2):可以判断obj1和obj2两个对象是否“相等”,它内部也基于被判断对象内部的equals()的实现。它内部增加了“空指针的验证”,可以有效的防止“空指针异常”。
3).示例代码:

public class Demo {
public static void main(String[] args) {
Student stu1 = null;
Student stu2 = new Student(“孙红雷”,18);
System.out.println(stu1.equals(stu2));//如果stu1为null,运行时会抛出”空指针异常”
System.out.println(Objects.equals(stu1,stu2));//有效的防止:stu1为null的情况
}
}

05.第二章:日期和时间类_Date类:

1).java.util.Date(类):表示一个日期和时间,精确到毫秒;
   注意:java.sql.Date(是java.util.Date的子类),不要使用这个类,在导包时注意;
2).构造方法:
    1).Date():使用当前系统时间构造一个Date对象;
3).常用方法:
    1).public long getTime():获取从1970年01月01日开始到此Date对象所表示的时间的一个“毫秒值”;
    2).public void setTime(long m):设置此date对象为一个m毫秒值;

06.第二章:日期和时间类DateFormat类将Date转换为String:

1).java.text.DateFormat(抽象类):它可以对日期进行“格式化”。它是“抽象类”,我们可以直接使用它的子类:java.text.SimpleDateFormat(类):
2).子类SimpleDateFormat的构造方法:
    1).SimpleDateFormat(String pattern):使用一个“模式字符串”来构造一个SimpleDateFormat对象;
3).成员方法:
    1).public String format(Date date):将一个Date对象转换为String象;
4).示例代码:

public class Demo {
public static void main(String[] args) {
//1.创建一个Date对象
Date date = new Date();
System.out.println(date);//英文格式,我们看不懂
//2.创建一个SimpleDateFormat对象
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy年MM月dd日 HH:mm:ss”);
//3.将Date对象转换为String
String dateStr = sdf.format(date);
System.out.println(dateStr);//2018年08月11日 10:22:33
}
}
5).“模式”说明:
1).y : 代表“年”;
2).M : 代表“月”;
3).d : 代表“日”;
4).H : 代表“小时”;
5).m : 代表“分钟”;
6).s : 代表“秒”;

07.第二章:日期和时间类DateFormat类将String转换为Date:

    1).示例代码:

public class Demo {
public static void main(String[] args) throws ParseException {
String str = “2018-08-11”
//1.创建一个SimpleDateFormat对象
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd”);
//2.将String转换为Date
Date date = sdf.parse(str);
//3.验证结果
System.out.println(date);
}
}

08.第二章:日期和时间类练习1转换字符串的日期格式:

1).需求:将“2018-08-11”格式串转换为“2018年08月11日”格式:
2).代码实现:

public class Demo {
public static void main(String[] args) throws ParseException {
//需求:将“2018-08-11”格式串转换为“2018年08月11日”格式
String str = “2018-08-11”;//str(2018-08-11) –> Date –> str(2018年08月11日)
//1.创建一个SimpleDateFormat对象
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd”);
Date date = sdf.parse(str);
//2.将date对象转换为”yyyy年MM月dd日”的格式
SimpleDateFormat sdf2 = new SimpleDateFormat(“yyyy年MM月dd日”);
String str2 = sdf2.format(date);
//3.验证结果
System.out.println(str2);
}
}

09.第二章:日期和时间类练习2计算来到世界多少天:

1).需求:从控制台接收用户的生日,然后程序为其计算出:你来到世界一共多少天
2).代码实现:

public class Demo {
public static void main(String[] args) throws ParseException {
//需求:从控制台接收用户的生日,然后程序为其计算出:你来到世界一共多少天。
//1.从控制台接收生日
Scanner sc = new Scanner(System.in);
System.out.println(“请输入你的生日,格式:yyyy-MM-dd:”);
String strDate = sc.next();//”1992-08-11”
//2.将String转换为Date
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd”);
Date date1 = sdf.parse(strDate);
long m1 = date1.getTime();
//3.获取当前系统时间的毫秒值;
long m2 = new Date().getTime();
//4.计算差值
System.out.println(“你一共来到世界:” + ((m2 - m1) / 1000 / 3600 / 24) + ” 天”);
}
}

10.第二章:日期和时间类_Calendar(日历)类:

1).java.util.Calendar(抽象类):它是抽象类,我们可以使用它的静态方法,getInstance()来获取它的一个子类对象;
2).常用方法:
    1).public int get(int field):获取某个字段的值;
    2).public void set(int field,int value):设置指定字段的值;
    3).public void add(int field,int value):将指定的字段的值增加value。
3).示例代码:

public class Demo {
public static void main(String[] args) {
//1.获取一个Calendar的子类对象
Calendar c = Calendar.getInstance();
//2.获取年、月、日、小时、分钟、秒、星期几
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH) + 1;
int day = c.get(Calendar.DAY_OF_MONTH);
int hour = c.get(Calendar.HOUR);
int minute = c.get(Calendar.MINUTE);
int second = c.get(Calendar.SECOND);
int week = c.get(Calendar.DAY_OF_WEEK);//返回值1–7,分别代表:星期日,星期一,星期二,星期三….星期六
System.out.println(year + “-” + month + “-” + day + ” ” + hour + “:” + minute + “:” + second);
System.out.println(getWeek(week));
//将c对象设置为2019年
c.set(Calendar.YEAR,2099);
week = c.get(Calendar.DAY_OF_WEEK);
System.out.println(“2099年的今天是:” + getWeek(week));
//计算班长出生那天是星期几
c.set(Calendar.YEAR,1994);
c.set(Calendar.MONTH,6 - 1);
c.set(Calendar.DAY_OF_MONTH,1);
week = c.get(Calendar.DAY_OF_WEEK);
System.out.println(“班长出生那天是:” + getWeek(week));
//重新获取日历对象
c = Calendar.getInstance();
//计算180天后,是几月几号
c.add(Calendar.DAY_OF_MONTH,180);
System.out.println(c.get(Calendar.YEAR) + “年” + (c.get(Calendar.MONTH) + 1) + “月” + c.get(Calendar.DAY_OF_MONTH) + “日”);
}
*//查表法:获取中文的星期表示*
public static String getWeek(int w){
String[] weekArray = {“星期日”,”星期一”,”星期二”,”星期三”,”星期四”,”星期五”,”星期六”};
return weekArray[w - 1];
}
}**

11.第三章:System类_作用及常用方法:

1).java.lang.System(类):包含了一些实用的静态方法;
2).常用方法:
    1).public static void arraycopy​(Object src,//原数组
                                   int srcPos,//原数组的起始位置
                                   Object dest,//目标数组
                                   int destPos,//目标数组的起始位置
                                   int length  //复制长度
                    ):复制数组
       示例代码:

public static void main(String[] args) {
int[] arr = {1,2,34,324,32,1,432,4,31,432,452,14,215,43,421,43,5};
int[] arr2 = new int[arr.length];
System.arraycopy(arr,0,arr2,0,arr.length);
//验证
for (int i = 0; i < arr2.length; i++) {
System.out.println(arr2[i]);
}
}
2).public static long currentTimeMillis​():获取当前系统时间的毫秒值;
等同于:new Date().getTime()。
作用:计算代码的执行时间;
示例代码:
int[] arr = new int[10000000];
long start = System.currentTimeMillis();
for (int i = 0; i < arr.length; i++) {
arr[i] = i;
}
long end = System.currentTimeMillis();
System.out.println(“执行时间:” + ( end - start) + ” 毫秒”);

12.第四章:StringBuilder类_回顾String类的不可变性:

public static void main(String[] args) {
String s1 = "Hello";
s1 = "World";
System.out.println(s1);//World(改变的是s1的地址)
 //面试题
String s2 = "呵呵";
String s3 = "呵呵";
System.out.println(s2 == s3);//true-地址相同
String s4 = "呵呵";
String s5 = new String("呵呵");
System.out.println(s4 == s5);//false
System.out.println(s4.equals(s5));//true
String s6 = "呵";
String s7 = "呵";
String s8 = "呵" + "呵";//编译后就是:s8 = "呵呵";
String s9 = s6 + "呵";//产生新地址
String s10 = "呵" + s7;//产生新地址
String s11 = "呵呵";
System.out.println(s4 == s8);//true
System.out.println(s4 == s9);//false
System.out.println(s4 == s10);//false
System.out.println(s4 == s11);//true
//对String进行+操作,会很浪费空间;
String s12 = "Hello";
s12 = s12 + "World";
System.out.println(s12);

}

13.第四章:StringBuilder类_概述及常用方法:

1).java.lang.StringBuilder(类):它常用来代替字符串的"+"运算符,进行多字符串连接的。
2).当进行“字符串连接”时,使用string以及+运算符,会产生很多的垃圾,降低程序的效率,所以以后当需要进行字符串连接时,可以使用:StringBuilder类;
3).StringBuilder的工作原理:它内部有一个“缓存区(字符数组)”,当进行字符串连接时,会将新字符串添加到这个缓冲区末尾,但StringBuilder对象只有一个。
4).StringBuilder的构造方法:
    1).StringBuilder(String s):
    2).StringBuilder():
5).常用方法:
    1).public StringBuilder append(各种类型) : 将各种类型数据转换为String,并添加到当前StringBuilder对象的末尾。
6).示例代码:

public class Demo {
public static void main(String[] args) {
int[] arr = {1,2,42,43,243,532,43};
System.out.println(printArray(arr));

    String s1 = "Hello";
    s1 = s1 + 10;
    s1 = s1 + 3.14;
    System.out.println(s1);//整个过程会产生很多垃圾

    StringBuilder bld = new StringBuilder();
    bld.append("Hello");
    bld.append(10);
    bld.append(3.14);
    System.out.println(bld.length());//整个过程只有一个StringBuilder对象
    System.out.println(bld.toString());
}
//编写方法,将int[]转换为String
public static String printArray(int[] arr){
    StringBuilder s = new StringBuilder("[");
    for (int i = 0; i < arr.length; i++) {
        s.append(arr[i]);
        if(i < arr.length - 1){
            s.append(" ,");
        }else{
            s.append(" ]");
        }
    }
    return s.toString();
}

}

14.第四章:String类和StringBuilder类的区别小结:

1).String表示一个“字符串”,是“不可变的”;
    String s = "Hello";
2).StringBuilder不能表示一个字符串,它只是一个字符串的**工具类**,内部是“可变的”。
    StringBuilder bld = "Hello";//错误
    StringBuilder bld = new StringBuilder("Hello");//OK的
   当需要做“字符串连接时”,建议使用“StringBuilder”:
 String s1 = "Hello";
    s1 = s1 + 10;
    s1 = s1 + 3.14;
    System.out.println(s1);//整个过程会产生很多垃圾
    StringBuilder bld = new StringBuilder();
    bld.append("Hello");
    bld.append(10);
    bld.append(3.14);
    System.out.println(bld.length());//整个过程只有一个StringBuilder对象
     System.out.println(bld.toString());

15.第五章:包装类_概念:

  1).Java中四类八种的基本类型都对应有“包装类”:
    基本类型        包装类
------------------------------------------------------
    byte            Byte
    short       Short
    int         Integer(名字特殊)
    long            Long
    float       Float
    double      Double
    char            Character(名字特殊)
    boolean     Boolean
2).每种包装类:
    1).都可以存储一个此种类型的数据;
    2).内部都包含的大量的对此种数据进行操作的一些实用方法;

16.第五章:包装类_常见应用:

 1).将String类型转换为某种类型:
    String ageStr = "24";
    int age = Integer.parseInt(ageStr);
    System.out.println(age);
   任何的包装类(**除Character**),都有:parseXxxx(String s):
    Byte --> parseByte(String s);
    Short --> parseShort(String s):
    Integer --> parseInt(String s);
    Long --> parseLong(String s):
    ...
2).将某种类型的数据转换为String:
    int age = 24;
    String s = Integer.toString(age);
    System.out.println(s);
    任何的包装类,都有:toString(此种类型数据),可以将这种类型的数据转换为String类型;
    Byte --> toString(byte b);
    Short --> toString(short s);
    Integer --> toString(int i);

17.第五章:包装类_装箱和拆箱:

Integer intObj = new Integer(10);//这样很麻烦;
从JDK5以后:
//1.自动装箱:将基本类型转换为“包装类型”:使用方便,等同于基本类型;
Integer intObj = 10;
//2.自动拆箱:将“包装类型”自动转换为“基本类型”
int b = intObj;
-------------------------------------------------------------------------
1).自动装箱的应用:
    ArrayList<Integer> intList = new ArrayList<>();
    intList.add(10);//自动装箱
    intLits.add(5);//自动装箱
    intList.add(12);//自动装箱
    for(int i = 0;i < intList.size();i++){
        int n = intList.get(i);//自动拆箱
    }
2).意义:自动装箱和自动拆箱将“基本类型”和“包装类型”等同使用,使用起来比较方便。

学习目标总结:
01.能够说出Object类的特点
它是Java所有类的父类,包括:类库中的类,我们自己定义的类,数组
02.能够重写Object类的toString方法
1).toString()方法的作用:打印对象的属性;
2).怎么重写:
public String toString(){
return “类名 属性名 = ” + 属性 + ….;
}
03.能够重写Object类的equals方法
1).equals()方法的作用:比较两个中的所有的属性;
2).怎么重写:
public boolean equals(Object obj){
….
}
04.能够使用日期类输出当前日期
Date date = new Date();
System.out.println(date);
05.能够使用将日期格式化为字符串的方法
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd”);
String str = sdf.format(date);

06.能够使用将字符串转换成日期的方法
String str = “2018-08-11”;
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd”);
Date date = sdf.parse(str);//注意:抛异常
….
07.能够使用System类的数组复制方法
int[] arr = {1,23,4,32,43254,23};
int[] arr2 = new int[arr.length];
System.arraycopy(arr,
0,
arr2,
0,
arr.length);

08.能够使用System类获取当前毫秒时刻值
long start = System.currentTimeMillis();

long end = System.currentTimeMillis();

09.能够说出使用StringBuilder类可以解决的问题
StringBuilder是可变的,它用来做:字符串拼接;提高效率;
10.能够使用StringBuilder进行字符串拼接操作
StringBuilder bld = new StringBuilder(“[“);
for(int i = 0 ; i < arr.length ; i++){
bld.append(arr[i]);

}
11.能够说出8种基本类型对应的包装类名称
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
12.能够说出自动装箱、 自动拆箱的概念
1.自动装箱:基本类型–>包装类型
Integer intObj = 10;
2.自动拆箱:包装类型–>基本类型
int a = intObj;
intObj++;
13.能够将字符串转换为对应的基本类型
String ageStr = “24”;
int age = Integer.parseInt(ageStr);
各种数据类型.parseXxxx(String)

14.能够将基本类型转换为对应的字符串
int a = 10;
String str = Integer.toString(a);

猜你喜欢

转载自blog.csdn.net/zzz323666/article/details/81588060