什么是多态?

同类型的对象,执行同一个行为,会表现出不同的行为特征

多态的常见形式

父类类型 对象名称=new 子类构造器

接口 对象名称=new 实现类构造器

多态成员访问特点

方法调用:编译看左边,运行看右边

变量调用:编译看左边,运行看右边(多态侧重行为多态)

多态的前提

有继承/实现关系;有父类引用指向子类对象,有方法重写

多态的优势:

优势:在多态形式下,右边对象可以实现解耦合,便于扩展和维护

定义方法的时候,使用父类型作为参数,该方法就可以接收这父类的一切子类对象,体现出多态的扩展性与便利

多态下会产生的一个问题:

多态下不能使用子类的独有功能

自动类型转换(从子到父):子类对象赋值给父类类型的变量指向

强制类型转换(从父到子):必须进行强制类型转换:子类 对象变量=(子类)父类类型的变量

作用:可以解决多态下的劣势,可以实现调用子类独有的功能

注意:如果转型后的类型和对象真实类型不是同意中类型,那么在转换的时候就会出现ClassCastException

java建议强制转换前使用instanceof判断当前对象的真实类型,再进行强制转换

变量名 instanceof 真实类型

判断关键字左边的变量指向的对象的真实类型,是否是右边的类型或者是其子类类型,是则返回true,反之

内部类:

内部类就是定义在一个类里面的类,里面的类可以理解成(寄生),外部类可以理解成(宿主)

内部类的使用场景、作用

当一个食物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整的结构又职位外部事物提供服务,那么整个内部的完整结构可以选择使用内部类来设计

内部类通常可以方便访问外部类的成员,包括私有的成员

内部类提供了更好的封装性,内部类本身就可以用private protected等修饰,封装性可以做更多控制

静态内部类

什么是静态内部类?有static修饰,属于外部类本身

他的特点和使用与普通类是完全一样的,类有的成分它都有,只是位置在别人里面而已

public class Outer{

//静态成员内部类

public static class Inner{

}

}

静态内部类创建对象的格式:

格式:外部类名.内部类名 对象名=new 外部类名.内部类构造器;

范例:Outer.Inner in=new Outer.Inner();

成员内部类

匿名内部类:

本质上是一个没有名字的局部内部类,定义在方法中,代码块中

作用:方便创建子类对象,最终目的为了简化代码编写

格式:

Employee  a=new Employee(){

public void work(){

}

}

a.work;

特点总结:

匿名内部类是一个没有名字的内部类

匿名内部类写出来就会产生一个匿名内部类对象

匿名内部类的对象类型相当于是当前new的那个类型的子类类型

匿名内部类的作用?

方便创建子类对象,最终目标为了简化代码编写

package d6_innerclass_anonymous;public class Test2 {public static void main(String[] args) {Swimming s=new Swimming() {@Overridepublic void swim() {System.out.println("学生快乐的自由泳");}};go(s);}//学生  老师  运动元可以一起参加比赛public static void go(Swimming s){System.out.println("开始");s.swim();System.out.println("结束");}
}
class Student implements Swimming{@Overridepublic void swim() {System.out.println("学生快乐的自由泳");}
}
interface Swimming{void swim();
};

匿名内部类在开发中的真实使用场景:

给按钮绑定点击事件

Object类的作用:

一个类要么默认继承了Object类,要么间接继承了Object类,Object类是java中的祖宗类

Object类的方法是一切子类都可以直接使用的,所以我们要学习Object类的方法

Object类的常用方法:

public String toString()    默认是返回当前对象在堆内存中的地址信息:类的权限名@内存地址

public Boolean equals(object o):默认是比较当前对象与另一个对象的地址是否相同,相同则返回true,不同返回false

问题引出:

开发中直接输出对象,默认输出对象的地址其实都是毫无意义的

开发中输出对象变量,更多的时候是希望看到对象的内容数据而不是对象的地址信息

toString存在的意义

父类toString()方法存在的意义就是为了被子类重写,以便返回对象的内容信息,而不是地址信息!

可以快捷键生成

Object的toString方法的作用是什么?

默认是打印当前对象的地址

让子类重写,以便返回子类对象的内容

Object的equlas方法:

public Boolean equals(Object o)  默认是比较当前对象与另一个对象的地址是否相同,相同返回true,不同返回false

直接比较两个对象的地址是否相同完全可以用==替代equals

想要比较内容就需要重写一个equals方法

@Override
public boolean equals(Object o) {//判断是否是同一个对象比较,如果是返回trueif (this == o)return true;if (o == null || getClass() != o.getClass()) return false;Studet studet = (Studet) o;return sex == studet.sex && age == studet.age && Objects.equals(name, studet.name);
}

object的equals方法的作用是什么?

默认是与另一个对象比较地址是否一样

让子类重写,以便比较2个子类对象的内容是否相同

Objects

Objects类与Object还是继承关系,Objects类才是JDK1.7开始之后才有的

官方在进行字符串比较时,没有对象自己的equals方法,而是选择了Objects的equals方法来比较两个对象

Objects的equals方法比较的结果是一样的,但是更安全,不会出现空指针异常

Objects的常见方法

public static boolean equlas(Object a,Object b)   比较两个对象的,底层会先进行非空判断,从而可以避免空指针异常。再进行equals比较

public static boolean isNull(Object obj)               判断变量是否为null,为null返回true,反之false

源码分析:

public static boolean equlas(Object a,Object b){

return (a==b)||(a!=null&&a.equlas(b));

}

Objects.isNull(对象名);

对象进行内容比较的时候建议使用什么?为什么?

建议使用Objects提供的equals方法

比较的结果是一样的,但是更安全

StringBuilder概述:

StringBuilder是一个可变的字符串类,我们可以把它看成是一个对象容器

作用:提高字符串的操作效率,如拼接,修改等

StringBuilder构造器

public StringBuilder()    创建一个空白的字符串对象,不包含任何内容

public StringBuilder(String str)    创建一个指定字符串内容的可变字符串对象

String类拼接字符串原理图

解析:创建s1时,字符串常量池中添加"a"

创建s2时,字符串常量池中添加"b",并且在堆内存中创建一个对象,new StringBuilder(),在        通过toString添加到String中

StringBuilder内存图

为什么拼接、反转字符串建议使用StringBuilder?

String:内容是不可变的,拼接字符串性能

StringBuilder:内容是可变的,拼接字符串性能好,代码优雅

定义字符串使用String

拼接、修改等操作字符串使用StringBuilder

package d11_api_stringbuilder;public class StringBuilderDemo2 {public static void main(String[] args) {int[] arr1=null;System.out.println(arr1);int[] arr2={10,28,39,76};System.out.println(toString(arr2));}
/*1.定义方法接受任意整形数组,返回数组内容格式*/public static String toString(int[] arr){if(arr!=null){//2.开始拼接内容StringBuilder sb = new StringBuilder("[");for (int i = 0; i < arr.length; i++) {sb.append(arr[i]).append(i==arr.length-1?"":",");}sb.append("]");return sb.toString();}else{return null;}}
}

Math类

包含执行基本数字运算的方法,Math类没有提供公开的构造器

如何使用类中的成员呢?看类的成员是否都是静态的,如果是,通过类名就可以直接调用

package d11_api_stringbuilder;public class StringBuilderDemo3 {public static void main(String[] args) {//1.取绝对值:返回正数System.out.println(Math.abs(-10.7));//10//2.向上取整:5System.out.println(Math.ceil(4.000007));//5//3.向下取整:4System.out.println(Math.floor(4.99999));//4//4.求指数数次方System.out.println(Math.pow(2.3,4.6));//5.四舍五入System.out.println(Math.round(4.499999));System.out.println(Math.round(4.500001));//四舍五入System.out.println(Math.random());}
}

System类概述:

System的功能是通用的,都是直接用类名调用即可,所以System不能被实例化

Syste,类的常用方法

public static void exit(int status)     终止当前运行的Java虚拟机,非零表示异常终止

public static long currentTimeMillis()   返回当前系统的时间毫秒值形式

public static void arraycopy(数据源数组,起始索引,目的地数组,起始索引,拷贝个数) 数组拷贝

import java.util.Arrays;public class d12_system {public static void main(String[] args) {System.out.println("程序开始");//System.exit(0);//1.计算机认为时间有起源:long time = System.currentTimeMillis();System.out.println(time);long startTime = System.currentTimeMillis();//进行时间的计算。性能分割for (int i = 0; i < 10000; i++) {System.out.println("输出..."+i);}long endTime = System.currentTimeMillis();System.out.println((endTime-startTime)/1000.0+"s");/*arraycopy(Object src,int srcpas* ,Object dest,int desPas,int length)* */int[] arr1={10,20,30,40,50,60};int[] arr2=new int[arr1.length];System.arraycopy(arr1,3,arr2,2,3);System.out.println(Arrays.toString(arr2));System.out.println("程序结束...");}
}

BigDecimal作用

用于解决浮点型运算精度失真的问题

创建对象BigDecimal封装浮点型数据(最好的方式是调用方法)
public static BigDecimal valueOf(double val):包装浮点数成为BigDecimal对象

BigDecimal的作用是什么?

解决浮点型运算精度失真问题

BigDecimal的对象如何获取?

BigDecimal b1=BigDecimal.valueOf(0.1);

BigDecimal必须解决精度运算,如果进行10/3的运算,会报错,需要做取整 操作

学习java第12天相关推荐

  1. Java程序猿的JavaScript学习笔记(12——jQuery-扩展选择器)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  2. Java学习之路12——GUI编程

    组件:窗口.弹窗.面板.文本框.列表框.按钮.图片.监听事件.鼠标.键盘事件 一.简介 GUI的核心开发技术:Swing AWT. 弊端: 页面不美观 需要jre环境 学习的必要性 可以写出自己心中想 ...

  3. Java架构师笔记-你必须掌握学习Java需要掌握哪些技能

    闲来无事,师长一向不(没)喜(有)欢(钱)凑热闹,倒不如趁着这时候复盘复盘.而写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,希望可以给大家一些经验,能让大家更好学习和使用Jav ...

  4. 大学学了java可以做点什么_学习Java的,大学毕业一般从事些什么工作?

    展开全部 我这是拷贝的,62616964757a686964616fe59b9ee7ad9431333332643361不过也就差不多了,说实话,java的东西太多了.还是要到工作的时候慢慢用的,学好 ...

  5. 学习Java需要达到的25个目标

    本文将告诉你学习Java需要达到的25个目标希望能够对你的学习及找工作有所帮助.对比一下自己你已经掌握了这25条中的多少 条了呢? 1.你需要精通面向对象分析与设计(OOA/OOD).涉及模式(GOF ...

  6. 学习 Java 8 - 函数式接口 Lambda

    学习 Java 8 - 函数式接口 Java 8 引入了函数式接口的概念.函数式接口其实就是只包含一个抽象方法的普通 Java 接口.在没有引入函数式接口之前,我们通常使用内部类和匿名类来实现类似的功 ...

  7. getvalue函数怎么使用_Java中的构造函数——通过示例学习Java编程(14)

    作者:CHAITANYA SINGH 来源:通过示例学习Java编程(14):Java中的构造函数-方家话题 构造函数是用来初始化新创建的对象的代码块.构造函数类似于java中的实例方法(Instan ...

  8. Java:计算机编程语言Java的简介、编程环境/工具、如何学习Java之详细攻略

    Java:计算机编程语言Java的简介.编程环境/工具.如何学习Java之详细攻略 目录 Java的简介 1.Java的工作原理--基于Eclipse等编程Java语言→定义Java类→Java虚拟机 ...

  9. python网络编程视频教程_Java网络开发视频教程 – 一站式学习Java网络编程视频教程 全面理解BIO(无密)...

    Java网络开发视频教程 – 一站式学习Java网络编程视频教程 全面理解BIO(无密) 全面理解BIO/NIO/AIO 网络层编程,是每一个开发者都要面对的技术.课程为解决大家学习网络层知识的难题, ...

最新文章

  1. DataGrid中添加背景
  2. 面试官问,为什么建议MySQL列属性尽量用 NOT NULL ?
  3. CPP函数调用的方法
  4. linux内核的I2C子系统详解4——i2c-s3c2410.c文件中的adapter、algorithm
  5. 百度下拉词框优化推广该如何利用及优化推广?
  6. Laravel响应宏原理
  7. 简单理解:类目、SPU、SKU
  8. 白话图解机器学习里的Regularization正则化
  9. 打印机如何取消打印任务
  10. JavaSE就业班四----数据库Oracle和JDBC
  11. 树莓派 博通BCM2835芯片手册
  12. echarts X轴文字竖向排列 ,一行两字竖向排列或旋转角度排列
  13. 基于Matlab对大米计数的研究
  14. 非凡十年,且看临工重机的“数智化”之变!
  15. 黄金思维圈,看透问题本质的利器,成功者必备工具
  16. iPhone Plus手机的分辨率到底是多少,是1080×1920还是1242×2208?
  17. WinCE流驱动基础知识小结
  18. idea插件,在idea中听云音乐
  19. Hudi--mor表 VS cow表
  20. blogger_如何在博客中添加推文并调试基本JavaScript:为什么Twitter.com/JavaScript/Blogger JSONP Widget停止工作?...

热门文章

  1. pip安装的模块cmd及VsCode中可以使用,PyCharm中不能使用
  2. 找不到工作怎么办?常为工作担忧?可光担忧并没有怎么用
  3. 预测房价:回归问题——R语言
  4. Nexus 5刷机无限重启问题解决
  5. MySQL创建、更改数据表(CREATE TABLE语句)
  6. 如何下载MyBatis呢?
  7. python特征点匹配_从特征点检测返回图像中的匹配值
  8. 动态规划解决硬币找零问题
  9. Matlab——GUI初涉
  10. 参数估计:点估计和区间估计