Java学习蜗牛路1

Day01+Day02

一、构造方法
用于创建对象,完成对象的初始化

二、方法的重写
子类里写一个跟父类一样的方法,直接覆盖

三、super和this
1、super:父类的(方法);
2、this:子类的(方法);方法的局部变量与类成员变量重名时,按照就近原则会指向方法局部变量,用this可以指向类成员变量;

四、抽象方法

修饰符 abstract 返回值类型 方法名 (参数列表);

抽象类

public abstract class 类名字{
	public abstract void run();
}

继承抽象类的子类必须重写父类所有抽象方法,子类必须实现父类的方法,否则子类也必须是抽象方法,但这样一切没有意义。

五、接口——公共规范标准
1、是引用数据类型
2、最重要的:抽象方法
3、接口定义格式:

public interface 接口名称

interface的编译生成的字节码文件还是.class

4、接口中可以包含的内容:
①常量
类似于成员变量,效果就是接口的常量
一旦使用final关键字,就不可改变
接口当中的常量必须赋值,因为默认赋值都是0,又不能变的话就没有意义了
命名规则:全大写,用下划线分隔
定义格式:

public static final 数据类型 常量名称 = 数据值;

②抽象方法
新建:Java class中的kind改成interface种类
定义格式:修饰符必须是固定的关键字 public abstract,修饰符可以选择性省略

③默认方法:
定义格式:

public default 返回值类型 方法名称(参数列表){方法体}

可以实现接口升级:当接口中新增了一个方法,实现类如果不更新就会报错。但是如果实现类已经投入使用,更改会很麻烦,这时候把接口里新增的方法改成默认方法,实现类就不会报错。在主函数里,创建了一个实现类对象,即使新增默认方法在实现类里没有,对象也可以调用这个方法,默认方法也可以被实现类覆盖重写。

④静态方法
定义格式:

public static 返回值类型 方法名称(参数列表){方法体}

**不能通过实现类对象调用
通过接口名称,直接调用里面的静态方法

⑤私有方法
接口中需要一个公有方法,可以解决接口中两个默认方法中有重复代码的问题,但是不能被实现类使用。
定义格式:

普通私有方法:给默认方法
private 返回值类型 方法名称(参数列表){方法体}
静态私有方法:给静态方法
private static 返回值类型 方法名称(参数列表){方法体}

5、接口的使用:
步骤1:接口不能直接使用,必须有一个实现类实现接口

public class 实现类名称 implements 接口名称{
……
}

步骤2:必须覆盖重写接口中所有的抽象方法(快捷键:Alt+回车)
步骤3:创建实现类的对象,进行使用
**注意1:如果实现类没有覆盖接口中的所有抽象方法,这个实现类自己必须是抽象类
注意2:多接口的实现类,如果接口中有冲突的默认方法,实现类中必须进行覆盖重写
注意3:如果一个子类继承了父类,还有一个接口,两个里面的方法重名,父类优先执行

6、接口中的多继承
接口可以有多个父类接口
如果两个父类接口里两个抽象方法重复,继承一个
如果两个父类接口里两个默认方法冲突,子接口必须进行默认方法的覆盖重写,并必须带default

六、快捷键
1、主函数:psvm
2、换行打印:sout
3、删除整行:ctrl+y
4、整段注释:ctrl+shift+/

七、多态
1、继承和接口是多态的前提,一个对象拥有多种形态

2、代码的体现:父类引用指向子类对象

父类对象 对象名 = new 子类名称();
接口名称 对象名 = new 实现类名称();

只有成员方法可以覆盖重写,成员变量不可以

3、访问成员变量的两种方式:
①直接通过对象名称访问成员变量:看等号左边是谁,优先用谁,没有则向上找(Object)
②间接通过成员方法访问:该方法属于谁,优先用谁,没有则向上找
编译看左边,运行看左边

4、成员方法的使用
看new的是谁,就优先用谁,没有则向上找
编译不通过(出红线)看的是左边,运行看右边

5、多态的用处
无论换成什么子类对象,创建对象时左边调用方法都不会变化

6、对象的向上转型
定义格式就是多态写法,创建一个子类对象,当做父类来看待

7、对象的向下转型
一旦向上转型为父类,就无法调用子类特有的方法
向下转型可以还原(必须本来就是子类才能还原)
格式:

子类名称 对象名 = (子类名称)父类对象;

8、instanceof关键字
可以判断是不是一个类、一个接口的实例
格式:

对象 instanceof 类型
会得到一个boolean值,用if语句判断

Day03

一、final关键字
1、代表最终的,不可改变的

2、final关键字用于修饰类
格式:

public final class 类名称{}

含义:这个类不能有任何子类,但可以有父类
final类其中所有的成员方法都不能被覆盖重写

3、final关键字修饰一个方法
这方法不能被覆盖重写
注意:对于类、方法来说,abstract关键字和final关键字不能同时使用,因为互相冲突

4、final关键字修饰一个局部变量
这变量不能进行更改,只能赋值一次
可以先创建新变量,再赋值
可以指一个对象
对于基本类型来说,不可变的是变量中的数值
对于引用类型来说,不可变的是变量的地址,地址不变,但里面的变量值可以变

5、final关键字修饰一个成员变量
用了final后必须手动赋值,否则是默认值
final成员变量,要么直接赋值(属性里直接赋值),要么通过构造方法赋值,set去掉
必须保证类中所有重载的结构方法,都会对final成员变量赋值

二、内部类
1、内部类可以直接访问外部类的成员,包括私有成员
外部类访问内部类的成员,必须建立内部类的对象
格式:

外部类名.内部类名 对象名 = new 外部类型(),new 内部类型();

2、匿名内部类
如果接口的实现类,或者父类的子类,只需要使用唯一一次,就可以用匿名内部类代替
定义格式:

1、接口名称 对象名 = new 接口名称(){
	覆盖重写所有抽象方法
};
2、方法名称(new 接口名称(){
	覆盖重写所有抽象方法
});

如果接口中有两个抽象方法,匿名内部类也需要全部覆盖重写
匿名对象在调用方法时只能使用一次,如果要调用多个方法,就要再创建一个匿名内部类的匿名对象

new 接口名称(){
	覆盖重写
}.方法名称();

匿名内部类省略了实现类/子类名称,匿名对象省略了对象名称,两者不相同

Day04

一、Object类
1、toString方法
直接打印对象,出来的是对象地址值,所以需要重写方法

在类里面的重写方法
@Override
    public String toString() {
        return "Person{" + "name='" + name + '\'' + ", age=" + age + '}';
    }

快捷键:alt+insert 选toString
看一个类有没有重写toString方法就是打印一个它的对象

2、equals方法
如果没有重写,就是对象地址值比较
getClass()获取的是类

3、Objects类
objects类中的equals方法可以容忍空指针

public static void main(String[] args) {
        String s1=null;
        String s2="1";
        System.out.println(b2);//false
    }

二、日期时间类
1、Date类

// 创建日期对象,把当前的时间
        System.out.println(new Date()); // Tue Jan 16 14:37:35 CST 2018
// 创建日期对象,把当前的毫秒值转成日期对象
        System.out.println(new Date(0L)); // Thu Jan 01 08:00:00 CST 1970

2、DateFormat类

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

把Date对象转换成String

public class DateFormatMethod {
    public static void main(String[] args) {
        Date date = new Date();
        // 创建日期格式化对象,在获取格式化对象时可以指定风格
        DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
        String str = df.format(date);
        System.out.println(str); // 2008年1月23日
    }
}

parse方法

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

把String转换成Date对象

public class Demo04DateFormatMethod {
    public static void main(String[] args) throws ParseException {
        DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
        String str = "2018年12月11日";
        Date date = df.parse(str);
        System.out.println(date); // Tue Dec 11 00:00:00 CST 2018
    }
}

3、输入出生日期计算过去多少天

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class Test {
    public static void main(String[] args) throws ParseException {
        Function();

    }

    public static void Function() throws ParseException {
        System.out.println("输入生日,格式YYYY-MM-DD");
        String birString = new Scanner(System.in).next();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date today = new Date();
        Date birthday = dateFormat.parse(birString);
        long birSecond = birthday.getTime();
        long todaySecond = today.getTime();
        long second = todaySecond - birSecond;
        if(second < 0){
            System.out.println("未出生");
        }else{
            System.out.println(second/1000/60/60/24);
        }
    }
}

4、Calender类
静态方法

public static Calender getInstance()

三、System类
1、currentTimeMillis方法
获取当前系统时间与基准时间之间的毫秒差值

2、arraycopy方法
将数组中指定的数据拷贝到另一个数组中,这个方法内包含五个参数
参数说明
四、StringBuilder类
1、StringBuilder
可变字符序列,是一个字符串的缓冲区

2、构造方法

public StringBuilder()
public StringBuilder(String str)

3、append方法
可以接收任何类型的参数,会将接收到的东西的对应的字符串添加到StringBuilder中

4、toString方法
将StringBuilder对象转化为不可变的String对象

五、包装类
将基本类型装箱后可以使用包装类中的方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值