最近想学一下java基础(二)

继承

就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为

重写(Override)

方法重写 :子类中出现与父类一模一样的方法时(返回值类型,方法名和参数列表都相同),会出现覆盖效果,也称为重写或者复写。声明不变,重新实现

Java只支持单继承,不支持多继承。

abstract

使用 abstract 关键字修饰方法,该方法就成了抽象方法,抽象方法只包含一个方法名,而没有方法体。

继承抽象类的子类必须重写父类所有的抽象方法。否则,该子类也必须声明为抽象类。最终,必须有子类实现该父类的抽象方法,否则,从最初的父类到最终的子类都不能创建对象,失去意义。

抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。

理解:假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。

抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的

理解:子类的构造方法中,有默认的super(),需要访问父类构造方法。

抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。

理解:未包含抽象方法的抽象类,目的就是不想让调用者创建该类对象,通常用于某些特殊的类结构设计

抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错。除非该子类也是抽象类

final关键字

final: 不可改变。可以用于修饰类、方法和变量。
类:被修饰的类,不能被继承。
方法:被修饰的方法,不能被重写。
变量:被修饰的变量,不能被重新赋值。

#权限修饰符 在Java中提供了四种访问权限,使用不同的访问权限修饰符修饰时,被修饰的内容会有不同的访问权限,
public:公共的。
protected:受保护的
default:默认的
private:私有的

Object对象类

java.lang.Object是所有类的父类(又叫根类,超类,基类),它里面写了所有子类应该具有的共同功能,为了让所有类都可以使用这些共同功能,所有类都直接或者间接的继承Object类(能够说出Object类的特点)

根据JDK源代码及Object类的API文档,Object类当中包含的方法有11个。主要学习其中的2个:

  • public String toString():(对象在内存中看不见摸不着,所以提供方法,)把对象变成带有地址值的字符串 在我们直接使用输出语句输出对象名的时候,其实通过该对象调用了其toString()方法。
  • public boolean equals(Object obj)比较两个对象的地址值是否相等,相等返回true,否则返回false

Date类,总结:日期类,模拟日期形式的时间,可以调用getTime方法精确到毫秒,得到日期时间的时间毫秒值,其构造方法,无参数表示当前时间,有参数就有参照物时间加上方法传入时间,参照物时间为1970年1月1日0时0分0秒,中国要加多8个小时!

  • public Date():分配Date对象并初始化此对象,以表示分配它的当前时间(可以精确到毫秒)。
  • public Date(long date):分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970年1月1日00:00:00 GMT)以来的时间,可以精确到毫秒。
    巧记,构造方法,无参数表示当前时间,有参数就有参照物时间,1970年1月1日0时0分0秒
import java.util.Date;

public class Demo01Date {
    public static void main(String[] args) {
        // 创建日期对象,输出当前的时间,能够使用日期类输出当前日期!!!
        System.out.println(new Date()); // Tue Jan 16 14:37:35 CST 2018
        //用println方法打印引用数据类型的变量名或者说对象名时,系统默认不写也是写,会调用toString方法!
        System.out.println(new Date().toString()); // Tue Jan 16 14:37:35 CST 2018,跟上面是一样的
        
        // 创建日期对象,把当前的毫秒值转成日期对象,结果为指定格式带有时期时间的字符串
        System.out.println(new Date(0L)); // Thu Jan 01 08:00:00 CST 1970//
    }
}

public long getTime() 把日期对象转换成对应的时间毫秒值,可以精确到毫秒,用这个得到时间方法

DateFormat类,日期格式化,把日期格式化为指定的字符串,由于它是抽象类,所以用的是它的子类SimpleDateFormat,通过构造方法传入格式,拿到对象名调用format方法把Date对象格式化为字符串,反过来就是解析,调用的是parse方法,巧记简单,simple

java.text.DateFormat 是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换

  • 格式化按照指定的格式,把Date对象转换为String对象
  • 解析反过来就是解析,即按照指定的格式,把String对象转换为Date对象。
import java.text.DateFormat;
import java.text.SimpleDateFormat;

public class Demo02SimpleDateFormat {
    public static void main(String[] args) {
        // 对应的日期格式如:2018-01-16 15:06:38
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    }    
}

常用方法

DateFormat类的常用方法有:

  • public String format(Date date)格式化,就是把Date对象格式化为字符串,反过来就是解析
  • public Date parse(String source):反过来就是解析,把字符串解析为Date对象

请使用日期时间相关的API,计算出一个人已经出生了多少天。

思路:

1.获取当前时间对应的毫秒值

2.获取自己出生日期字符串对应的毫秒值

3.两个时间相减(当前时间– 出生日期)

代码实现:

public static void function() throws Exception {
	    //不要记,简单,Simple
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
        String birthday = "1988年04月10日";//字符串,变成时间Date类,解析p,格式化f,pf
        Date d = sdf.parse(birthday);//变成时间毫秒值
        long myTime = d.getTime();//出生时间毫秒值

        //当前时间毫秒值减去出生时间毫秒值,就是我活到现在有多久时间毫秒值
        long currentTime = new Date().getTime();

        System.out.println((currentTime-myTime)/1000/60/60/24/365);//11003天,/365,年,岁30
}

System类

java.lang.System类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作,在System类的API文档中,常用的方法有:

  • public static long currentTimeMillis():返回以毫秒为单位的当前时间。
  • public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length):将数组中指定的数据拷贝到另一个数组中。

arraycopy方法

  • public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length):将数组中指定的数据拷贝到另一个数组中。

数组的拷贝动作是系统级的,性能很高。System.arraycopy方法具有5个参数,含义分别为:

参数序号 参数名称 参数类型 参数含义
1 src Object 源数组
2 srcPos int 源数组索引起始位置
3 dest Object 目标数组
4 destPos int 目标数组索引起始位置
5 length int 复制元素个数

练习

将src数组中前3个元素,复制到dest数组的前3个位置上复制元素前:src数组元素[1,2,3,4,5],dest数组元素[6,7,8,9,10]复制元素后:src数组元素[1,2,3,4,5],dest数组元素[1,2,3,9,10]

import java.util.Arrays;

public class Demo11SystemArrayCopy {
    public static void main(String[] args) {
        int[] src = new int[]{1,2,3,4,5};
        int[] dest = new int[]{6,7,8,9,10};
        System.arraycopy( src, 0, dest, 0, 3);
        /*代码运行后:两个数组中的元素发生了变化
         src数组元素[1,2,3,4,5]
         dest数组元素[1,2,3,9,10]
        */
    }
}

StringBuilder类

在API中对String类有这样的描述:字符串是常量,它们的值在创建后不能被更改

如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间。为了解决这一问题,可使用java.lang.StringBuilder。**

构造方法

根据StringBuilder的API文档,常用构造方法有2个:

  • public StringBuilder():构造一个空的StringBuilder容器。
  • public StringBuilder(String str):构造一个StringBuilder容器,并将字符串添加进去。
public class StringBuilderDemo {
    public static void main(String[] args) {
        StringBuilder sb1 = new StringBuilder();
        System.out.println(sb1); // (空白)
        // 使用带参构造
        StringBuilder sb2 = new StringBuilder("itcast");
        System.out.println(sb2); // itcast
    }
}

常用方法,即能够说出使用StringBuilder类可以解决的问题

StringBuilder常用的方法有3个:

  • public StringBuilder append(...):添加任意类型数据的字符串形式,并返回当前对象自身。
  • public String toString():将当前StringBuilder对象转换为String对象。
  • public StringBuilder reverse():将当前StringBuilder对象里面的内容进行反转,如abc反转后变成cba

append方法

append方法具有多种重载形式,可以接收任意类型的参数。任何数据作为参数都会将对应的字符串内容添加到StringBuilder中。例如:

public class Demo02StringBuilder {
	public static void main(String[] args) {
		//创建对象
		StringBuilder builder = new StringBuilder();
		//public StringBuilder append(任意类型)
		StringBuilder builder2 = builder.append("hello");
		//对比一下
		System.out.println("builder:"+builder);
		System.out.println("builder2:"+builder2);
		System.out.println(builder == builder2); //true
	    // 可以添加 任何类型
		builder.append("hello");
		builder.append("world");
		builder.append(true);
		builder.append(100);
		// 在我们开发中,会遇到调用一个方法后,返回一个对象的情况。然后使用返回的对象继续调用方法。
        // 这种时候,我们就可以把代码通过.连在一起,像条链子,叫链式编程,如append方法一样,代码如下
		//链式编程
		builder.append("hello").append("world").append(true).append(100);
		System.out.println("builder:"+builder);
	}
}

toString方法

通过toString方法,StringBuilder对象将会转换为不可变的String对象。

发布了30 篇原创文章 · 获赞 0 · 访问量 2448

猜你喜欢

转载自blog.csdn.net/duanduan339/article/details/105529143