2019-7-8 [JavaSE] 多态及应用 instanceof运算符 类型转换 UML-泛化 实现 依赖 关联 字符串比较 API合集 compareTo() 源码

本文主要是介绍2019-7-8 [JavaSE] 多态及应用 instanceof运算符 类型转换 UML-泛化 实现 依赖 关联 字符串比较 API合集 compareTo() 源码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1.多态
    • 特征:
  • 2.多态应用
    • 接口
    • 参数
  • 3.instanceof运算符
  • 4.类型转换
    • 实例:
  • 5.UML之类图
    • 1.泛化
    • 2.实现
    • 3.依赖
    • 4.关联
  • 6.字符串
    • 6.1 String类
    • 6.2 字符串比较:
  • 7.API
    • compareTo() 源码:
  • 8.编写:多态与inof比较
  • 9.编写:参数多态 员工回家
  • 10.注意

1.多态

在这里插入图片描述
在这里插入图片描述

特征:

1.重写;
2.父类引用 指向 子类的对象;
接口引用 指向 实现类的对象。

2.多态应用

class Base{int n;public void f() {System.out.println("base_f");}
}
class Sub1 extends Base{int m;public void f() {System.out.println("sub1_f");}public void method() {}
}
class Sub2 extends Base{int x ;public void f() {}public void function() {}
}
public class TestDemo {public static void main(String[] args) {Base sub1 = new Sub1();sub1.f();System.out.println(sub1.n);//多态:子类独特的特征和行为不能使用。
//		sub1.method();}
}

接口

interface Info{public void af();
}
class InfoImpl1 implements Info{public void af() {System.out.println("info1 _ af");}public void ff() {}
}
public class TestInfo {public static void main(String[] args) {Info info1 = new InfoImpl1();info1.af();//多态:实现类独特的特征和行为不能使用。
//		info1.ff();}
}

参数

3.instanceof运算符

在这里插入图片描述

4.类型转换

在这里插入图片描述

实例:

class Pet{private String name;public Pet(String name) {this.name = name;}public String getName() {return name;}public void eat() {System.out.println("吃");}
}
class Dog extends Pet{public Dog(String name) {super(name);}public void eat() {System.out.println("吃骨头");}public void run() {System.out.println("小狗跑了");}
}
class Cat extends Pet{public Cat(String name) {super(name);}public void eat() {System.out.println("吃鱼");}public void play() {System.out.println("小猫去玩了");}
}
5.类型转换实例:
由下向上转换
class PetHospital{//看病                                  父类类型           向上类型转换public void treatment(Pet pet) {// Pet pet = new Dog(); System.out.println("给" + pet.getName() + "看病");pet.eat();4.instanceof的使用实例:if(pet instanceof Dog) {//是Dog ,true, 不是 falseDog dog = (Dog)pet;dog.run();}else {Cat cat = (Cat)pet;cat.play();}}}
public class TestHospital {public static void main(String[] args) {Dog wangwang = new Dog("旺旺");PetHospital hos = new PetHospital();hos.treatment(wangwang);Cat xiaohua = new Cat("小花");hos.treatment(xiaohua);=}
}

5.UML之类图

类:
第一部分:类名;
第二部分:属性访问修饰符:  -  private默认#  protected+  public   

第三部分:方法
在这里插入图片描述

1.泛化

   继承:父类和子类。语法:extends 

2.实现

   接口和实现类:语法:implements 

在这里插入图片描述

3.依赖

  使用关系。语法:局部变量

4.关联

  拥有的关系。语法:成员变量
对象的数目:一对一:   1 ..1 一对多:   1 .. * 多对多:    * .. *
聚集 : 强关联。整体和局部,局部离开了整体可以独立存在。语法: 局部类 作为整体类的成员变量。组合: 强聚集。整体和局部,局部离开了整体不能独立存在。

在这里插入图片描述

6.字符串

在这里插入图片描述

6.1 String类

String:字符串类。 不可变类(一旦对象创建了 ,字符序列不能更改)。
内存存储:
在这里插入图片描述

//创建一个字符串String s1 = "hello";  // "hello"存在方法区的常量池// (2)     堆String s2 = new String(); // 空串String s3 = new String("hello");// 参数 作为字符序列 创建的一个字符串s3String s4 = null;String s5 = new String("tom");/** 底层:JDK8.0字符串表示* private final char value[] = new char[5]; // {'h','e','l','l','o'};* 不可变:private :私有  ,类外不能访问*        final: 对象不能更改*        没有提供公共的访问方式修改元素的值。  */

6.2 字符串比较:

在这里插入图片描述

		String s1 = "hello";String s2 = "hello";String s3 = new String("hello");String s4 = new String("hello");String s5 = "tom";//== 判断地址System.out.println(s1 == s2);// trueSystem.out.println(s3 == s4);// falseSystem.out.println(s1 == s3);// falseSystem.out.println(s1 == s5);// false

7.API

在这里插入图片描述

.	// String不可变String s1 = "hello";//1. 连接字符串System.out.println(s1.concat("tom"));//"hellotom"s1.concat("tom");System.out.println(s1);// "hello"s1 = "hellotom";System.out.println(s1);// "hellotom"//2. 字符串长度System.out.println(s1.length());//5 //3. 字符序列是否相等,区分大小写System.out.println("hello".equals("hello"));System.out.println("hello".equals("Hello"));// false//4. 不区分大小写 Yes ,YES ,yesSystem.out.println("hello".equalsIgnoreCase("Hello"));//true //5. 大写转换System.out.println("HeLLo".toUpperCase());//HELLO//6.小写转换System.out.println("HeLLo".toLowerCase());//hello//  位置// 索引           01String s = "hellotomtomabcabc";// 7 获得参数字符串  在 当前字符串中 第一次出现的位置索引System.out.println(s.indexOf("tom"));// 5System.out.println(s.indexOf("xyz"));// -1 不存在返回-1 // 8 获得参数字符串  在 当前字符串中 最后一次出现的位置索引System.out.println(s.lastIndexOf("tom"));// 8// 9. 获得指定位置的一个字符System.out.println("hello".charAt(0));// 'h'// 10. 取子串//  "helloabctom"//   从起始位置截取  到 字符串末尾System.out.println("helloabctom".substring(8));// tom// 11. 从起始位置 取到 终止位置的前一位 [起始位置,终止位置)System.out.println("helloabctom".substring(5, 8));// abc.String s = "	h	e	l	lo	";//12.去除 前后 空格System.out.println(s.trim());//"h	e	l	lo"]//13.替换:第二个参数替换第一个参数System.out.println(s.replace("l", "abc"));//"	h	e	abc	abco	"//去除所有空格System.out.println(s.replace("	", ""));//"hello"//14.是否已参数字符开头,是则trueSystem.out.println("hello.java".startsWith("he"));//true//15.是否已参数字符结尾,是则trueSystem.out.println("hello.java".endsWith("java"));//true//比较字符串的大小/** 规则:* 	 当前字符串  等于  参数字符串  结果  :0* 		           大于			     :正数*  	           小于			     :负数*  比较ASCII码值,字母表里靠前的小,靠后的大,输出的是前减后的答案*  */System.out.println("ab".compareTo("ab"));//0System.out.println("ab".compareTo("abc"));//-1System.out.println("ad".compareTo("ab"));//2System.out.println("ae".compareTo("ab"));//3System.out.println("ab".compareTo("ad"));//-2System.out.println("中国".compareTo("中国"));//0//17.str 转换成 char数组String str = "abc";//'a','b','c'char [] crs = str .toCharArray();for(char cr : crs){System.out.println(cr);}//18.按照指定参数字符串  将当前字符串分割  成一个String[]String sg = "aa bb cc dd ee";String [] sgs = sg.split(" ");for (String ss : sgs) {System.out.println("元素是" +ss);}//元素是aa//元素是bb//元素是cc//元素是dd//元素是ee//19.返回参数字符串  在当前字符串中是否存在 ,存在trueSystem.out.println("hello".concat("he"));//20.构造器String str1 = new String(new char[] {'a','b','c'});System.out.println(str1);//abc//21.从参数char[]创建一个字符串对象String str2 = String.copyValueOf(new char[]{'x','y','z'});System.out.println(str2);//xyz//    从参数char[]创建一个字符串对象                    ,从哪,几个str2 = String.copyValueOf(new char[] {'a','b','c','d'}, 1, 2);System.out.println(str2);// "bc"// 22 返回字符串对象对应的 常量池中存储的那个字符串常量对象String str3 = new String("hello");System.out.println(str3.intern());// "hello"

12.trim()
将String两端的空白字符删除后,返回一个新的String对象。如果没有改变发生,则返回原String对象。例子如下:

strNew = "          I am a lucky string.            ";  
System.out.println(strNew.trim()); //trim,输出:I am a lucky string.  

13.replace()
String replace(char oldChar, char newChar),从这个函数原型中就可以看出就是将String中的oldChar替换成newChar啦。是全部替换哦,例子如下:

System.out.println(str.replace('a', 'A'));        //replace,输出:I Am A lucky string.  

14.startsWith()
boolean startsWith(String prefix)判断是否以prefix开头,是返回true,反之,则返回false

15.boolean endsWith(String suffix)
判断是否以prefix结尾,是返回true,反之,则返回false

16.compareTo()
public int compareTo(String anotherString),按字典顺序比较两个String的大小哦。字典顺序是说a<b<c,返回值有三种可能:1,0,-1分别表示大于,等于,小于。例子如下:

1.if (str.compareTo("I am a unlucky string.") > 0) {   //compareTo(),Output:I am smaller  
2.    System.out.println("I am bigger");  
3.} else {  
4.    System.out.println("I am smaller");  
5.}  

compareTo() 源码:

public int compareTo(String anotherString) {int len1 = value.length;int len2 = anotherString.value.length;int lim = Math.min(len1, len2);char v1[] = value;char v2[] = anotherString.value;int k = 0;while (k < lim) {char c1 = v1[k];char c2 = v2[k];if (c1 != c2) {return c1 - c2;}k++;}return len1 - len2;
}

17.toCharArray()
将String转换成一个char数组,例子如下:

1.dst = str.toCharArray(); //toCharArray()  
2.System.out.println(dst);   //output:I am a lucky string.  

18.见上
19.contains()
boolean contains(CharSequence s),判断源String中是否含有s。包含则返回1,不包含则返回0。关于什么是CharSequence,本文不赘述,请自行百度。例子如下:

1.if (str.contains("lucky")) {//contains(),
//Output:<span style="font-family: 
//Arial, Helvetica, sans-serif;">I contain lucky word</span>  
2.    System.out.println("I contain lucky word");  
3.} else {  
4.    System.out.println("I don't contain lucky word");  
5.}  

20.见上
21.见上
22.intern()
为每一个唯一的字符序列生成且仅生成一个String引用。什么意思呢?就是说某一个字符序列已经存在的话,那么就返回该字符序列对应的引用,例子如下:

1.System.out.println(str3 == str4);//输出:false  
2.str4 = (str1 + str2).intern();   //重点:intern()  
3.System.out.println(str3 == str4);//输出:true  

8.编写:多态与inof比较

在这里插入图片描述

class Pet{private String name;public Pet(String name) {this.name = name;}public String getName() {return name;}public void eat() {System.out.println("吃");}
}
class Dog extends Pet{public Dog(String name) {super(name);}public void eat() {System.out.println("吃骨头");}public void run() {System.out.println("小狗跑了");}
}
class Cat extends Pet{public Cat(String name) {super(name);}public void eat() {System.out.println("吃鱼");}public void play() {System.out.println("小猫去玩了");}
}
class PetHospital{//看病                                  父类类型           向上类型转换public void treatment(Pet pet) {// Pet pet = new Dog(); System.out.println("给" + pet.getName() + "看病");pet.eat();if(pet instanceof Dog) {//是Dog ,true, 不是 falseDog dog = (Dog)pet;dog.run();}else {Cat cat = (Cat)pet;cat.play();}}}
public class TestHospital {public static void main(String[] args) {Dog wangwang = new Dog("旺旺");PetHospital hos = new PetHospital();hos.treatment(wangwang);Cat xiaohua = new Cat("小花");hos.treatment(xiaohua);}}

9.编写:参数多态 员工回家

在这里插入图片描述

/*** 练习:参数多态* 员工乘坐不同的交通工具回家*/
abstract class TrafficTool{public abstract void run();
}
class Car extends TrafficTool{public void run() {System.out.println("汽车行驶中");}
}
class Tube extends TrafficTool{public void run() {System.out.println("地铁行驶中");}
}
class Employee{private String name;public Employee(String name) {this.name = name;}public void goHome(TrafficTool tool) {System.out.println(this.name + "回家了");tool.run();}
}
public class TestTrafficTool_exam {public static void main(String[] args) {Employee aibiancheng = new Employee("艾编程");Car car = new Car();aibiancheng.goHome(car);Employee aixuexi = new Employee("艾学习");Tube tube = new Tube();aixuexi.goHome(tube);}
}

10.注意

1.抽象类主要是提供模板的作用
2.接口的访问修饰符只能是默认和pubic类型
2.接口与抽象类的异同点:
相同点:都不能创建对象;都可以定义抽象方法;普通的子类或实现类 必须重写父类或者父接口中的所有抽象方法(抽象类除外)
不同点:语法不通;念不同;设计不同
3.多态里,子类赋值给父类类型
4.多态里,由上向下转换类型,需要使用强转
5.instanceof 判断输进来的是否是设定的类型,是则返回true,不是就返回false
6.重写是一个方法,而且是实例方法
7.除了重写都看数值运算符的左边
8.重写一般都是在同一个类里的
9.运行时多态是看数值运算符的左边,因为它是重写
10.编译器能确定的才会被存在常量池中
11.== 这个符号比较的是地址
12.String是不可变类
13.对象一旦创建,字符序列绝对不能更改

这篇关于2019-7-8 [JavaSE] 多态及应用 instanceof运算符 类型转换 UML-泛化 实现 依赖 关联 字符串比较 API合集 compareTo() 源码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/282685

相关文章

Spring LDAP目录服务的使用示例

《SpringLDAP目录服务的使用示例》本文主要介绍了SpringLDAP目录服务的使用示例... 目录引言一、Spring LDAP基础二、LdapTemplate详解三、LDAP对象映射四、基本LDAP操作4.1 查询操作4.2 添加操作4.3 修改操作4.4 删除操作五、认证与授权六、高级特性与最佳

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

SpringBatch数据写入实现

《SpringBatch数据写入实现》SpringBatch通过ItemWriter接口及其丰富的实现,提供了强大的数据写入能力,本文主要介绍了SpringBatch数据写入实现,具有一定的参考价值,... 目录python引言一、ItemWriter核心概念二、数据库写入实现三、文件写入实现四、多目标写入

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle

SpringSecurity JWT基于令牌的无状态认证实现

《SpringSecurityJWT基于令牌的无状态认证实现》SpringSecurity中实现基于JWT的无状态认证是一种常见的做法,本文就来介绍一下SpringSecurityJWT基于令牌的无... 目录引言一、JWT基本原理与结构二、Spring Security JWT依赖配置三、JWT令牌生成与

Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

《Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码》:本文主要介绍Java中日期时间转换的多种方法,包括将Date转换为LocalD... 目录一、Date转LocalDateTime二、Date转LocalDate三、LocalDateTim

如何配置Spring Boot中的Jackson序列化

《如何配置SpringBoot中的Jackson序列化》在开发基于SpringBoot的应用程序时,Jackson是默认的JSON序列化和反序列化工具,本文将详细介绍如何在SpringBoot中配置... 目录配置Spring Boot中的Jackson序列化1. 为什么需要自定义Jackson配置?2.

Java中使用Hutool进行AES加密解密的方法举例

《Java中使用Hutool进行AES加密解密的方法举例》AES是一种对称加密,所谓对称加密就是加密与解密使用的秘钥是一个,下面:本文主要介绍Java中使用Hutool进行AES加密解密的相关资料... 目录前言一、Hutool简介与引入1.1 Hutool简介1.2 引入Hutool二、AES加密解密基础

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

SpringBoot实现微信小程序支付功能

《SpringBoot实现微信小程序支付功能》小程序支付功能已成为众多应用的核心需求之一,本文主要介绍了SpringBoot实现微信小程序支付功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录一、引言二、准备工作(一)微信支付商户平台配置(二)Spring Boot项目搭建(三)配置文件