banner
NEWS LETTER

JavaSE2

Scroll down

数组

静态初始化数组

  • 静态初始化数组的格式
1
2
3
4
5
6
7
8
 数据类型[] 数组名 = new 数据类型[]{元素1, 元素2, 元素3...}

int ages = new int[]{12,24,36}

//简化格式
数据类型[] 数组名 = {元素1, 元素2, 元素3...}

int[] ages = {12, 24, 36} //新学到的

“数据类型[] 数组名” 也可写成 “数据类型 数组名[] (C/C++的写法)”

数组名中存放的时数组的地址, 数组是引用数据类型

  • 数组的访问

    访问第index个数组元素:数组名[index]

    获取数组的长度:数组名.length

动态初始化数组

初始化数组时,暂不存入元素,只确定数组类型和数组的长度

1
数据类型[] 数组名 = new 数据类型[数组长度]。

数组中的值在赋值前采用默认值

Java动态初始化数组的默认值规则

  • 基本数据类型

    数据类型 默认值
    byte, short, char, int,long 0
    float, double 0
    boolean false
  • 引用数据类型

    类,接口,String, 数组等的默认值为null

静态初始化数组和动态初始化数组是独立的,不可以混用,以下写法错误:

1
int[] ages = new int[3]{1, 2, 3}; //错误写法

Java数组的内存执行原理

java程序的执行原理

Java内存分配

划分JVM虚拟机为以下区域

  • 方法区
    • 存放编译后的class文件
  • 栈内存
    • 方法运行时所进入的内存,基本变量也在这里
  • 堆内存
    • new出来的东西会放在这块内存中开辟空间
  • 本地方法栈
  • 程序奇数器

数组变量在栈内存中, 数组元素的空间在堆内存中。

多个变量指向同一个数组的问题

1
2
int[] arr1 = {1,3,6};
int[] arr2 = arr1; //arr1 和 arr2 指向同一个数组, arr2 和 arr1 都存放数组的地址
1
2
arr2[1] = 99
System.out.println(arr1[1]);// 输出99

面向对象基础

  • 一个代码文件中,可以写多个class类,但只能一个用public修饰
  • public修饰的类名必须成为代码文件名
  • 如果一个对象没有一个变量引用它,它将无法被操作,该对象成为垃圾对象。
  • Java存在自动垃圾回收机制,会自动清除垃圾对象。

this关键字

  • this就是一个变量,在方法中使用可以拿到当前对象

  • this的应用场景

    • 解决变量名称冲突问题: 区分类属性变量名和类方法的形参名

    构造器

定义了有参构造器之后,Java就不会自动生成无参构造器,此时最好自己定义一个无参构造器

封装的设计规范

合理隐藏、合理暴露

使用private隐藏属性,设定合理的get, set方法访问属性。

对象的方法根据业务需求暴露必须暴露的方法

JavaBean(实体类)

  • 是一种特殊形式的类
  • 成员变量都要私有,并且对外提供相应的get,set方法
  • 类中必须有一个公共的无参构造器(无定义有参构造器的情况下,会自动提供无参构造器) (其他构造器可写可不写)
  • 通常没有其他成员
  • 应用场景:实体类只负责数据存取,而队数据的处理交给其他类完成,实现数据和业务处理相分离。

成员变量和局部变量的区别

区别 成员变量 局部变量
位置不同 类中,方法外 常见于方法中,{}内
初始化值不同 有默认值 没有默认值,使用前必须复制
内存位置不同 堆内存 栈内存
作用域不同 整个对象 在所归属的大括号中
声明周期不同 与对象共存亡 与{}(方法调用)共存亡,随{}执行结束而结束

  • 包是分门别类管理程序的。
  • 调用其他包下程序的注意事项
    • 如果当前程序中,要调用自己所在包下的其他程序,可以直接调用。(同一个包下的类,互相可以直接调用)
    • 如果当前程序中,要调用其他包下的程序,则必须在当前程序中导包,才可以访问!导包格式:import 包名.类名
    • 如果当前程序中,要调用lava提供的程序,也需要先导包才可以使用:但是lava.lang包下的程序是不需要我们导包的,可以直接使用
    • 如果当前程序中,要调用多个不同包下的程序,而这些程序名正好一样,此时默认只能导入一个程序,另一个程序必须带包名访问。

Java常用API

String

  • 创建方式

    • 方式1(常用)
    1
    String name = "小黑"
    • 方式2 构造器

      1
      2
      3
      4
      5
      6
      7
      public String()  //创建空字符串

      public String(String original)

      public String(char[] chars)

      public String(byte[] bytes )
  • String的常用方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    public int length(), public char charAt(int index)

    public char[] toCharArray() //转换成字符数组返回

    public boolean equals(Object anObject) //判断当前字符串与另一字符串的内容是否一样

    public boolean equalsIgnoreCase(String anotherString) //判断是否内容相同,忽略大小写

    public String subString(int beginIndex, int endIndex) //截取字符串得到子串,左闭右开区间

    public String subString(int beginIndex) //截取当前位置到末尾的子串

    public String replace(CharSequence target, CharSequence replacement) //替换字符串中的值,得到新字符串

    public boolean contains(CharSequence s) //判断是否包含字符串s

    public boolean startsWith(String prefix) //判断字符串是否以prefix字符串开头

    public String[] split(String regex) //分割字符串,得到字符串数组


  • 注意事项

    • String对象是不可变的,其内容不可变。
    • 以“…”方式写出的字符串对象,会存储到字符串常量池,且相同内容的字符只会存储一份;
    • 通过new 方式创建字符串对象,没new一次都会产生一个新的对象放在堆内存中
    1
    2
    3
    4
    5
    6
    7
    8
    String s1 = "abc";
    String s2 = "abc";
    System.out.println(s1 == s2);// true

    char[] a = {'a','b',c};
    String s1 = new String(a);
    String s2 = new String(a);
    System.out.println(s1 == s2);//false
1
2
String s2 = new String("abc") ;//创建2个对象,在常量池一个,堆内存一个。
String s1 = "abc"; //创建0个对象,因为“abc”在常量池存在了
1
2
3
4
5
6
7
8
String s1 = "abc";
String s2 = "ab";
String s3 = s2 + "c";//运算结果存在堆内存中
System.out.println(s1 == s3);//false

String s1 = "abc";
String s2 = "a" + "b" +"c"; //存在编译优化机制 "a" + "b" +"c" 直接转成“abc”,以提高程序的执行性能
System.out.println(s1 == s2);//true

ArrayList(泛型类 )

  • 大小可变, 而数组定义之后长度固定

  • 构造器

    1
    2
    3
    4
    5
    ArrayList() //构造一个初始容量为10的空列表(会自动增加容量), 常用

    ArrayList(int initialCapacity) //构造执行初始容量的空列表

    ArrayList(Collection<? extends E> c) //按照集合的迭代器返回的顺序构造一个指定集合的列表
  • 常用方法: 增删改查 可以存放任意类型数据

  • 约束数据类型

    1
    2
    3
    ArrayList list = new ArrayList();// 可以存放任意不同的数据类型
    ArrayList<String> list = new ArrayList<String>();//只能存放String数据类型
    ArrayList<String> list = new ArrayList<>();//jdk1.7以上也可以这么写
其他文章
cover
experiments planning
  • 24/07/19
  • 20:26
  • 未分类
cover
第一次做排骨
  • 24/07/18
  • 21:25
  • 生活记录
目录导航 置顶
  1. 1. 数组
    1. 1.1. 静态初始化数组
    2. 1.2. 动态初始化数组
    3. 1.3. Java数组的内存执行原理
      1. 1.3.1. java程序的执行原理
      2. 1.3.2. 多个变量指向同一个数组的问题
  2. 2. 面向对象基础
    1. 2.1. this关键字
    2. 2.2. 构造器
    3. 2.3. 封装的设计规范
    4. 2.4. JavaBean(实体类)
    5. 2.5. 成员变量和局部变量的区别
    6. 2.6.
    7. 2.7. Java常用API
      1. 2.7.1. String
      2. 2.7.2. ArrayList(泛型类 )
请输入关键词进行搜索