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 点赞

String,权限修饰符,方法,集合的更多相关文章

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

    String String str1 = "dashu"; String str2 = "dashu"; String string = new String( ...

  2. 面向对象 继承 抽象类 接口 static 权限修饰符

    Day01 面向对象 继承 抽象类 接口 static 1.匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. 2.类的继承是指在一个现有类的基础上去构建一个新的类,构建出 ...

  3. Java学习笔记10---访问权限修饰符如何控制成员变量、成员方法及类的访问范围

    1.Java有三种访问权限修饰符,分别为public.protected.private,还有一种为缺省权限修饰符的情况,记为default.其中,可以由public和default来修饰类:这四种修 ...

  4. 章节五、2-Package包和权限修饰符

    一.Package包 为了更好的组织类,java提供了包机制,用于区别类名的命名空间. 包的作用: 1.把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. 2.如同文件夹一样,包也采用了 ...

  5. Java访问权限修饰符public protected friendly private用法总结(转载好文Mark)

    首先声明:Java中,friendly这个修饰符并没有显式的声明,在成员变量和方法前什么修饰符也不用,默认的就是friendly.为了条理清晰,分三种不同情况来总结. 一 访问权限修饰符修饰成员变量和 ...

  6. 06 面向对象:多态&抽象类&接口&权限修饰符&内部类

    多态: /* 多态(polymorphic)概述 * 事物存在的多种形态 多态前提 * a:要有继承关系. * b:要有方法重写. * c:要有父类引用指向子类对象. * 成员变量 * 编译看左边(父 ...

  7. 匿名类、包、权限修饰符_DAY10

    1:内部类(理解) (1)把类定义在一个类的内部. (2)特点:   A:内部类可以直接使用外部类的成员,包括私有.   B:外部类要使用内部类成员,必须创建对象使用.    例子: public c ...

  8. Java 访问权限修饰符以及protected修饰符的理解

    2017-11-04 22:28:39 访问权限修饰符的权限 访问修饰符protected的权限理解 在Core Java中有这样一段话“在Object类中,clone方法被声明为protected, ...

  9. day04(权限修饰符,内部类,局部内部类,匿名内部类)

    权限修饰符, Public  >protected >default > private public 公共权限   随便都可以访问 protected  子类可以访问权限  (子类 ...

随机推荐

  1. python基础知识0-2

    # !/usr/bin/env python # 提示输入用户名和密码 # 验证用户名和密码#     如果错误,则输出用户名或密码错误#     如果成功,则输出 欢迎,XXX! import ge ...

  2. Jmeter之逻辑控制器/定时器

    Jmeter逻辑控制器 更新中 线程组->添加->逻辑控制器->XX控制器 1.仅一次控制器 使用场景:线程数为1,登录1次,循环浏览N次. 如果,登录账号参数化,线程数为M时,登录 ...

  3. Rust 优劣势: v.s. C++ / v.s. Go(持续更新)

    Rust 发展速度比 C++ 强很多.如果去翻 open-std 的故纸堆,会发现 C++ 这边有很多人(包括标准委员会的人)提了有用的提案,但后来大多不了了之或经历了非常长的时间才进入标准. > ...

  4. 26-Perl 包和模块

    1.Perl 包和模块Perl 中每个包有一个单独的符号表,定义语法为:package mypack;此语句定义一个名为 mypack 的包,在此后定义的所有变量和子程序的名字都存贮在该包关联的符号表 ...

  5. 浅读vue-router源码,了解vue-router基本原理

    项目中使用vue-router的时候,会进行以下操作(可能具体不是这么写的,但是原理一样): 定义映射关系routes: 定义router实例的时候传入vue和参数{routes...}: 定义vue ...

  6. python 列表反转

    反转: 将原列表反转,返回None: li = [1, 2, 3]li.reverse()print(li)# [3, 2, 1]1234不改变原列表,返回反转后的新列表: li = [1, 2, 3 ...

  7. 1、传统身份验证和JWT的身份验证

    1.传统身份验证和JWT的身份验证 传统身份验证:       HTTP 是一种没有状态的协议,也就是它并不知道是谁是访问应用.这里我们把用户看成是客户端,客户端使用用户名还有密码通过了身份验证,不过 ...

  8. HTML学习记录和总结

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明. 作者:struct_mooc 博客地址:https://www.cnblogs.com/stru ...

  9. 记录:初入Java环境部署踩坑

    1.在部署环境之前,先确定大佬们用的哪几种软件,然后依次下载,安装,IDEA, JDK, Tomcat, Maven.    什么是JDK?    JDK是 Java 语言的软件开发工具包,主要用于移 ...

  10. curl命令用法

    curl命令是一个功能强大的网络工具,它能够通过http.ftp等方式下载文件,也能够上传文件,同时支持HTTPS等众多协议,还支持POST.cookies.认证.从指定偏移处下载部分文件.用户代理字 ...