内部类 与 Api

1.当  方法 中 用到 的参数 是 一个类的时候 实际类 是 一个对象 

package 类作为返回值参数;

public class Oper {
    public void useDog(Dog dog){
        dog.eat();
    }
}
//上面的是使用的 狗的方法  Dog 是一个类 但是下面 是掉方法所以传递的是 对象

package 类作为返回值参数;

public class Demotest {
    public static void main(String[] args) {
        Oper oper = new Oper();//操作类的对象
        Dog dog = new Dog();//创建狗的对象
        oper.useDog(dog);//需要狗的对象


    }
}
//把 对象 创建出来 放到 useDog()里面 

 public Dog createDog(){
        Dog dog = new Dog();
        //返回值是 类的时候  我们return 的是 对象
        return dog;
 }

2. 参数 是类的时候 需要的是对象    返回值是 类的时候 返回的是 对象

3.抽象类  作为 参数的时候 抽象类是无法创建对象的  我们可以用多态的创建 对象方式 创建  new的是子类对象 

当返回值也是抽象类的的时候 我们返回的也是 抽象类的字类对象

总结 只要是类的返回值或者参数  我们返回或者需要的就是 一个对象

4.当 接收参数 是接口类型的 或者返回值 是 接口类型的 都是需要的是

接口的 实现类的 对象

package 接口作为返回值;

public class Cat implements jump{
    @Override
    public void jump() {
        System.out.println("猫会跳");
    }
}

//实现类

package 接口作为返回值;

public class Oper {//操作类
    public void useEat(jump j){
        j.jump();
    }

    public jump getCat(){
        jump cat = new Cat();
        return cat;
    }
}
//操作类

package 接口作为返回值;

public interface jump {
    void jump();

}
//接口类

package 接口作为返回值;

public class Demotest {//测试类

    public static void main(String[] args) {
        Oper oper = new Oper();
//        jump j = new Cat();
        jump cat = oper.getCat();
        oper.useEat(cat);
    }
}
//测试类

5.内部类 

        内部类 创建格式  一个类里面 嵌套一个内部类

package 内部类;

public class outer {//外部
    
    public class inner{
        
    }
}

内部类 可以使用外部类的变量 (直接使用)

但是外部类 不可以直接使用  内部类 的东西  外部类使用内部类的需要创建对象

6.成员内部类 使用 在外界使用

        可以直接使用 

方式是: 外部类.内部类  对象名 =  new  外部对象().new 内部对象();

但是 注意 :上面这种是  内部类 是 public  的时候使用

  outer.inner inner = new outer().new inner();
        inner.use();

这样使用的:

!!!!注意 但是 正规写法 我们是不允许 上面这样创建 内部类调用对象的 我们会使用 

外部类 创建对象 然后 通过外部类的方法  在外部类方法里面调用内部类创建内部类对象 并调用内部类的方法

package 内部类;

public class outer {//外部
    private int age =10;
    private class inner{//内部类直接使用外部类 可以直接使用
        public void use(){
            System.out.println(age);
        }
    }
    //外部类使用 内部的需要创建 内部类的对象
    public void useMethods(){
        inner inner = new inner();
        inner.use();
    }
}
//上面是  内部类的创建结构


package 内部类;

public class Demotest {
    public static void main(String[] args) {
//        outer outer = new outer();
//        outer.useMethods();
//        outer.inner inner = new outer().new inner();
//        inner.use();
        outer outer = new outer();
        outer.useMethods();
    }
}


//上面是 测试类的内部结构

7.局部内部类  

        有成员变量  局部变量

package 局部内部类;

public class Outer {

    private int age=10;

    public void inner(){
        class innnerin{
//            private int age;
            public void use(){
                System.out.println(age);
            }
        }
        innnerin innnerin = new innnerin();
        innnerin.use();
    }

}

    局部内部类是放在 方法 里面的

8.匿名内部类

package 匿名内部类;

public class outer {
    //匿名内部类要求
    // 有一个接口  重写那个接口的方法
    /*
     *  new 接口(){
     *       重写接口的方法
     * }
     * */
    //匿名内部类也是局部的
    public void method() {

        new inter() {//因为这是个对象 所以可以直接new出来 然后.方法
            @Override
            public void show() {
                System.out.println("这是匿名内部类");
            }
        }.show();
        //或者我们利用多态的形式  new inter(){} 这就是 这个接口的实现类

        inter inter = new inter() {
            @Override
            public void show() {
                System.out.println("这是匿名内部类");
            }
        };

        inter.show();

    }
}

  9.匿名内部类中的应用

比如 我们 用操作实现类  来传递 接口里面 需要传递的是 一个 接口类型的 对象

接口.jump()跳高方法

传递的那个  比如是 猫 可以跳高  我们需要新建 猫的类 

而用匿名内部类 我们就可以直接 (new Jump接口(){

        重写 接口的 方法 (){

        输出 猫可以跳高了

}

})

就是 简单的 new 出来直接写方法() 简单

10.Math 数学方法

        math.数学方法

        Math.abs(-99) 绝对值  

        Math.ceil(12.33)//返回一个 大于或者等于这个数的整数

        Math.floor(12.33)// 返回一个小于 或者等于这个数的整数

        Math.max(88,99)//返回最大值 两个值的最大值  

        Math.min(88,99)//返回两个的最小值

        Math.round(12.9333)//四舍五入的取整数

        Math.random()//取值一个 [0,1) 的小数

11.System 系统类

        System.exit()//系统关闭 

        System.currentTimeMillis()//系统时间 距离1970年 1月1 号0.0分

12.Object.toString()方法 

        Ctrl+B代码找底层 跟进   参数 被那个方法用到 我们继续 那个方法 Ctrl+B

toString 的底层 就是返回一个 String 字符串  一般建议 我们重写 toString 方法

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

13.Object 的 equels 方法

@Override
    public boolean equals(Object o) {
        //把 student1 传入  this指的是 Student == o(Student1)
        if (this == o) return true;
        //若果他不是 继承于 Student下的 学生 返回  false
        if (!(o instanceof Student)) return false;
        //是的话  强制转换
        Student student = (Student) o;
        //比较 名字 跟 年龄
        return age == student.age && Objects.equals(name, student.name);
    }

重写 equals 方法

14.冒泡排序的原理

冒泡排序的原理  

相邻的 两个值  两两比较 

把最大的 向后移动

15.Array 数组   里面 有方法  

sort()    排序    ToString() 转换成字符串

16.integer

int 值的范围   min-value    max-value   最大最小值 

integer  可以转换为  String  或者将  String 转为 int

 byte   Byte    short   Short    int   Integr    long  Long    float   Float   double   Double

char   Character    boolean   Boolean

int 的包装类 

Integer i   =  Integer.Valueof("abc")

报错误  这不是 一个可以转换的数字

integer 包装类型的转换

 integer  转  String 字符串 

可以直接   ""+number  隐士转换 

或者 说  用  String.valueof()  转换成 

String  转 integr  

String  ====>转成 Integer  

i.intvalue  ===>中间 转换 

integer .parseInt()//直接转换 

拆箱  装箱  自动的

包装类 ====>转  非包装 叫 拆箱 

非包装  ========> 包装 叫 装箱 

在使用 包装类型的时候  最后先看看 是不是  null   只要是  引用类型  首先判断 不为null

日期

Date date1 = new Date(1000*60*60);
System.out.println(date1);

这个日期 就是 1970年 0时0分0 秒 一月一号 

Integer在 JAVA 内用 32 位表 示,因此 32 位能表示的最大值是 2147483647。 另外1 年 365 天的总秒数是 31536000,

2147483647/31536000 = 68.1

也就是说32 位能表示的最长时间是 68 年,而实际上到 2038年 01 月 19 日 03 时 14 分 07
秒,便会到达最大时间,过了这个时间点,所 有 32 位操作系统时间便会变 为
10000000 00000000 00000000 00000000

也就是1901年 12月 13 日 20时 45 分 52 秒,这样便会出现时间回归的现象,很多软件便会运 行异常了。

到这里,我想问题的答案已经出来了:

因为用32 位来表示时间的最大间隔是 68 年,而最早出现的 UNIX 操作系统考虑到计算
机产生的年代和应用的时限综合取了 1970 年 1 月 1 日作为 UNIX TIME 的纪元时间 ( 开始
时间 ) ,而 java 自然也遵循了这一约束。

至于时间回归的现象相信随着64 为操作系统 的产生逐渐得到解决,因为用 64 位操作
系统可以表示到 292,277,026,596年 12月 4 日 15时 30 分 08 秒,相信我们的 N 代子孙,哪
怕地球毁灭那天都不用愁不够用了,因为这个时间已经是千亿年以后了。

package 日期类;

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

public class Demo {
    public static void main(String[] args) {
        Date date = new Date();
        System.out.println(date);

        Date date1 = new Date(1000*60*60);
        System.out.println(date1);

//        System.out.println(date.getTime());

        date.setTime(1641094842827L+(1000*60*30));
        System.out.println(date.getTime());
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("YYYY年MM月DD日 HH:mm:ss");
        String format1 = simpleDateFormat.format(date);
        System.out.println(format1);
    }
}

这是日期 

首先 设置 simpleDateFormat 的返回日期的格式 

然后 把 获取 或者设置好的日期 放进去   最后输出的就是 设置的日期

SimpleDateFormat  方法

无参构造  默认的 ()  就是 默认的返回格式 

有参构造 就是 我们 需要设置 ()

YYYY 年    MM  月   DD  日    HH小时    mm分钟   ss 秒

方法对

日期工具类

创建日期工具类  让 无参构造 私有化  () 外界不可以访问

组要 日期  对象  跟 日期格式  

可以生成对应格式的日期 

把日期 创建好 需要一个格式  然后 用  parse ()  方法 来解析 成日期 

日历类Calendar 

日历类 

获取日期对象   Calendar  获取日期对象 ()

获取 日期 ===>Calendar .year 获取年 

常用方法

calendar.get(日期,年份 月份 等)

calendar.add(日期,加减多少年 月 天)

calendar.set(年月 日 随自己设置)

package 日历类;

import java.util.Calendar;

public class 获取2月天 {
    public static void main(String[] args) {
        Calendar instance = Calendar.getInstance();//创建日期对象
        instance.set(2019, 2, 1);//设置日期 为几几年 几月 几号
//        System.out.println(instance.get(instance.MONTH));
        instance.add(instance.DATE, -1);//再这个月份上 减少一天 就是 2月分的第一天 月份比实际获取的少一
        System.out.println(instance.get(instance.DATE));//输出当年的 2月份的天数
    }
}

异常

异常  就是 java 代码 运行 的时候出现错误 导致代码无法运行的原因  

异常的超类 是 throwable  

异常 会导致 代码运行 异常  

异常有  error 错误   Expection 异常  分 运行时异常  ,非运行时异常 

我们 可以 用 try  catch 处理遗产  

说白了 处理异常 就是  让 有异常的代码 可以 一直运行下去 

异常 报错的三种 方法

异常 .toString  转换成字符串 

异常.getMessage()//获取 异常的信息 

异常 .printStackTrace  异常 的原因

编译时异常 跟 非编译时异常

编译时 异常  是 告诉你  我可能有问题 并不代表 一定会出问题  异常 就是 出了 异常后 你咋解决 

有好多办法

try  Catch   与  throws 处理方法 

try  catch  才是 真正的处理  throws  处理方式 只是把 异常 向外抛出  只是 这里 不好处理  谁调用它  谁处理把 就像 帮忙一样 有时候 可以 帮你  但有时帮不了 你 这本来是你的错  你自己处理 

throws  只是 把异常 抛出  并不是 处理了 异常

自定义异常

所有的异常  都是继承于  runExpection   Expection  这两个异常 

java 只是提供了 我们平时 常见的异常  

并没有把所有的异常处理掉  所以 有的时候 我们可以自己提供 异常 

可以自定义 异常类  让这类 继承  异常的 父亲类就可以了 

package 异常;

public class Myexpection extends Exception{
    public Myexpection() {
    }

    public Myexpection(String message) {
        super(message);
    }
}


package 异常;

public class Teacher {
    int source;
    public void CheckSource(int source) throws Myexpection {
        if(source <0 || source >100){
            throw new Myexpection("输入的分数要在0-100之间");
        }else{
            System.out.println("分数正常");
        }
    }
}



package 异常;

import java.util.Scanner;

public class Demo {
    public static void main(String[] args) {
//        System.out.println("开始");
//        try {
//            int [] arr ={1,2,3,4};
//            System.out.println(arr[4]);
//        }catch (Exception e){
//            e.printStackTrace();
//        }
//        System.out.println("结束");
        Scanner scanner = new Scanner(System.in);
        int source =scanner.nextInt();
        Teacher teacher = new Teacher();
        try {
            teacher.CheckSource(source);
        } catch (Myexpection myexpection) {
            myexpection.printStackTrace();
        }
    }
}

异常 就是平时的  我们的报错 处理

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值