2022.07.04 java学习

1.字符串对象存在哪里

以“”方式给出的字符串对象,在字符串常量池中存储。
字符串常量池和运行时常量池逻辑上属于方法区,但是实际存放在堆内存中,因此既可以说两者存放在堆中,也可以说两者存在于方法区中。

2.String的不可变性

String name = “孙”;
String name += “悟空”;
其中"孙"和"悟空"存放在字符串常量池中,不会改变,一开始name指向常量池中的"孙",后来指向堆内存中的新对象"孙悟空"。

3.String两种不同构造方式的区别
  • 以" "方式给出的字符串对象,在字符串常量池中存储,并且相同内容只会存储一份
  • 通过构造器new对象,每new一次就会产生一个新对象,放在堆内存中
4.String常见面试题1

String s2 = new String(“abc”);
String s1 = “abc”;
第一行代码创建了两个对象,“abc"在字符串常量区中,s2指向的在堆中;
第二行代码没有创建新的对象。

5.String常见面试题2
  • 示例1
    String s1 = “abc”;
    String s2 = “ab”;
    String s3 = s2 + “c”;
    s1 == s3?
    答案是false,s1在字符串常量池,s3在堆内存中。
  • 示例2
    String s1 = “abc”;
    String s2 = “a” + “b” + “c”;
    s1 == s2?
    答案是true,因为Java存在编译优化机制,s2的常量运算会在编译时计算出来,“a”+“b”+“c"会直接转成"abc”。
6.String比较内容

equals();
equalsIgnoreCase(); 忽略大小写比较内容

7.String常用API

public int length()
public char charAt(int index)
public char[] toCharArray()
public String substring(int beginIndex, int endIndex) 包前不包后
public String replace(CharSequence target, CharSequence replacement)
public boolean contains(String target)
public boolean StartWith(String target)
public String[] split(String regex)

8.ArrayList添加元素

ArrayList list = new ArrayList();
相当于ArrayList list = new ArrayList<>();
没必要一定声明类型,这样可以添加任意类型元素。
且println(list)时,打印的不是list地址,而是其中的内容。
原因: 在println()时,会自动 调用toString()方法,而list的toString()方法重写过。

9.ArrayList泛型

只能存储引用类型,不支持基本数据类型

10.ArrayList常用方法
方法名称说明
public E get(int index)返回指定索引处元素
public int size()返回集合
public E remove(int index)删除指定索引处元素,返回被删除的元素
public boolean remove(Object o)删除指定的元素,返回删除是否成功
public E set(int index, E element)修改指定索引处元素,返回被修改的元素

remove(Object o)时,若有多个相同元素,只删除第一个

11.ArrayList遍历并删除元素

从前往后删除是错误的,需要从后往前删除。想想删除元素之后,每个元素的索引会变化的。

12.static关键字
  • static修饰成员变量表示该成员变量只在内存中存储一份,可以被共享访问、修改
13.两类成员变量(成员方法同理)
  • 静态成员变量(static修饰,属于类,内存中加载一次):常表示如在线人数信息等需要被共享的信息
    • 访问方式有两种:类名.静态成员变量(推荐),对象.静态成员变量(不推荐)
  • 实例成员变量(无static修饰,属于对象):必须用对象.实例成员变量访问
14.static内存机制

当类加载到方法区时,会同步在堆内存中开辟一块这个类的静态变量区。且只加载这一次。静态方法随着类一起加载到方法区(可访问状态),实例方法是不可访问状态,调用的时候移入栈中。

15.工具类

里面封装了一大堆静态成员方法,直接用类名访问即可。因此工具类无需创建对象,建议将工具类的构造器私有化

16.代码块概述
  • 代码块是类的5大成分之一(成员变量,构造器,方法,代码块,内部类),定义在类中方法之外。使用{}括起来的被称为代码块。
  • 主要分为两类:
    • 静态代码块:
      • 格式:static{}
      • 特点:随着类的加载而加载,并且自动触发,只执行一次
      • 使用场景:在类加载的时候做一些静态数据的初始化
    • 构造代码块:
      • 格式:{}
      • 特点:每次创建对象,调用构造器执行时,都会执行该代码块中的代码,并且在构造器执行前执行
      • 初始化实例资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值