• 第52节:String,权限修饰符,方法,集合


    标题图

    String

    String str1 = "dashu";
    String str2 = "dashu";
    String string = new String("dashu");
    System.out.println(str1 == string);
    // 结果为 false
    

    面试题目:这个语句创建了多少个对象?

    new String("dashu");
    

    这个答案为1或者2,因为如果"dashu"这个字面值如果在常量池中已经出现过,那么就只创建一个对象,如果没有出现过就会创建两个对象,new的出现一定会有一个对象被创建,所有确保有一个对象被创建.

    String str1 = "dashu";
    String str2 = "da" + "shu";
    System.out.println(str1 == str2);
    // 结果为 true
    

    为啥str1 == str2相等,是因为在编译的时候已经为"dashu"字面值,已经拼接好了,所以进行比较时,就会相等.

    String str1 = "dashu";
    String str2 = "da";
    String str3 = str2 + "shu";
    System.out.println(str1 == str3);
    // 结果为 false
    

    原理是通过stringbuilder的拼接方法,然后在调用toString()方法.

    String中有一个intern()方法,它返回的是常量池中字面值的地址,如果在常量池中没有这个字面值,就会把这个字面值先加到常量表后,返回这个字面值的地址.

    把上面的代码添加intern()试试:

    String str1 = "dashu";
    String str2 = "da";
    String str3 = str2 + "shu";
    System.out.println(str1 == str3.intern());
    // 结果为 true
    

    权限修饰符

    class Chirld{
     public void publicMethod(){
      // public为任何地方都可以通过子类的对象进行访问
     }
     protected void protectedMethod(){
      // protected为私有方法,只能在子类中进行访问
     }
     private void privateMethod(){
      // private为只能在本来进行访问,除了子类可以调用,其他都不可以进行访问这个方法
     }
    }
    
    public Father extends Chirld{
     public static void main(String[] args){
      new Father().publicMethod();
      new Father().protectedMethod();
     }
    }
    

    实例方法是什么呢?不用static添加修饰的方法就是了,访问实例方法,只能通过创建对象进行访问.

    什么是类方法呢?就是用static添加修饰的方法就是了,访问这个方法可以通过创建对象进行访问,也可以通过类名进行调用进行访问.

    方法

    方法的重载:方法名一样,参数名不一样

    重载的出现就是为了解决操作同种方法的动作,但是类型不同的功能需求.

    public Father extends Chirld{
     public static void main(String[] args){
      publilc void add(int a){
       System.out.println(a+1);
      }
      publilc void add(long b){
       System.out.println(b+1);
      }
     }
    }
    

    方法的重载为编译时的多态

    // 
    class GuoWang{
     public void add(){
      System.out.println("GuoWang");
     }
    }
    // 
    public class DaShu extends GuoWang{
     public void add(){
      System.out.println("DaShu");
     }
     public static void main(String[] args){
      // 变国王
      GuoWang gw = new DaShu();
      gw.add();
     }
    }
    // DaShu
    

    方法的多态,复写父类的方法.方法的参数不一样为重载,一样为复写.

    变量的介绍格式: 变量类型 + 变量名

    变量的作用是用来存储信息的容器

    集合

    集合也是容器,把拥有相同类型的变量存储起来的,集合类型 + 集合名字.

    Collection
    -> List -> ArrayList LinkedList
    -> Set -> hashSet treeset
    Map
    -> hashmap
    -> treemap
    

    举例:

    // 源码
    public interface List<E> extends Collection<E>{
     int size();
     boolean isEmpty();
     ....
    }
    
    public interface Collection<E> extends Iterable<E>{
     int size();
     boolean isEmpty();
     ...
    }
    

    集合中的常用方法:

    Collection<E>

    size():返回类型为int.
    isEmpty():返回类型为boolean.
    contains(Object):返回类型为boolean.
    iterator():Iterator<E>
    toArray():Object[]
    toArray(T[]):T[]

    add(E):返回类型为boolean
    remove(Object):返回类型为boolean
    containsAll(Collection<?>):返回类型为boolean
    addAll(Collection<? extends E>):返回类型为boolean
    removeAll(Collection<?>):返回类型为boolean
    retainAll(Colleciton<?>):返回类型为boolean
    clear():返回类型为void
    equals(Object):返回类型为boolean
    hashCode():i返回类型为int

    spliterator():Spliterator<E>
    stream():Stream<E>
    parallelStream():Stream<E>

    default Stream<E> stream(){
     return StreamSupport.stream(spliterator(), false);
    }
    

    接口的定义:public abstract 返回类型 方法名(参数),从jdk1.8开始可以实现方法了,用default修饰.

    interface Student{
     void go();
     default void dohomework(){
      System.out.println("dohomework");
     }
    }
    // 实现接口
    public class Dashu implements Student{
     public static void mian(String[] args) throws Exception{
     new Dashu().dohomework();
     }
     @Override
     public void go(){}
    }
    

    这个特性的引入是为了扩展接口中的方法

    源码:

    public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E>
    
    public class ArrayList<E> extends AbstractList<E>
    implements List<E>,RandomAccess,Cloneable,java.io.Serializable
    
    Collection<T>接口 -> AbstractCollection<E>
    List<T>接口 -> AbstractList<E>
    

    往后余生,唯独有你
    简书作者:达叔小生
    90后帅气小伙,良好的开发习惯;独立思考的能力;主动并且善于沟通
    简书博客: https://www.jianshu.com/u/c785ece603d1

    结语

    • 下面我将继续对 其他知识 深入讲解 ,有兴趣可以继续关注
    • 小礼物走一走 or 点赞
  • 相关阅读:
    C# 反射 通过类名创建类实例
    c#委托把方法当成参数
    PPT美化大师
    以Outlook样式分组和排列数据项
    使用windows服务和MSMQ和进行日志管理(解决高并发问题)
    springboot配置filter
    filter 中用spring StopWatch 监控请求执行时间
    spring计时工具类stopwatch用法
    Spring异步任务处理,@Async的配置和使用
    注解用法详解——@SuppressWarnings
  • 原文地址:https://www.cnblogs.com/dashucoding/p/9721786.html
Copyright © 2020-2023  润新知