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

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,