当前位置:   article > 正文

Java小白学习日记 Day2

Java小白学习日记 Day2

Day 2

Java内存分配

  • 栈:方法运行时使用的内存,比如main方法运行,进入方法栈中运行
  • 堆:存储对象或数组,使用new来创建的,都存储在堆
  • 方法区:存储可以运行的class文件
  • 本地方法栈:JVM在使用操作系统功能的时候使用,和我们的开发无关
  • 寄存器:给CPU使用

方法

方法是程序中最小的执行单元, 是对代码的封装,从而使代码管理更加简易

方法的定义格式如下:

{
    //public static 表示这个方法全局有效,被整个程序所共享
    public static typename1 method(typename x,...){
        语句体;
        return variable of typename1;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 方法定义中声明的参数叫做形参,在调用时使用的参数是实参;方法被调用时,将实参的值拷贝给形参

方法的重载

在一个类中定义了多个同名的方法,这些方法的参数和返回类型不同,Java虚拟机会通过参数的不同区分不同的方法

{
    public static void fn() {
        System.out.println("Hello World");
    }

    public static int fn(int a) {
        return a;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 代码中方法的名字相同,但是参数和返回值不同,因此构成重载关系

返回数组类型

在Java中可以类比Rust语言的所有权规则,当返回方法体内部创建的数组时,其所有权发生改变,因此在方法结束时,改数组不会被清除
Java中堆上内存如果没有被指向,没有被使用就会被回收

方法的内存

方法调用时,会在栈上开辟一块空间,方法的数据上都存在这块方法帧中,当方法结束时只会释放在栈上的方法帧,如果在方法调用时,申请了一块堆空间,该空间不会被自动释放

对象(class)

JavaBean

  • 类名代表含义
  • 成员变量用private修饰
  • 提供至少两个构造方法
    1. 无参构造
    2. 带全部参数的构造方法
  • 成员方法
    • 提供每一个成员变量对应的set和get

使用new关键字初始化对象

使用new关键字创建的对象实际值都存储在堆内存上, 而在栈上有一个对对象的引用(地址),同时堆内存上还有一个类模版的地址,指向方法区

this的原理

this代表方法调用者的地址值

格式化输出

Java中可以使用 System.out.printf 进行格式化输出,类比c语言即可

//%s为占位符,会被替换为逗号后面的字符串
System.out.printf("Hello %s!", "World");
  • 1
  • 2
占位符说明占位符说明
%d格式化输出整数%o八进制输出
%s格式化输出字符串%x16进制小写输出
%f格式化输出浮点数%X16进制大写输出
%c格式化输出字符%e带指数的浮点数
System.out.printf("%7.2f", 1.13821);
  • 1

7表示会用空格补全输出为7位,.2表示保留两位小数

字符串类型(String)

在Java中要掌握的字符串类有:String, StringBuilder, StringJoiner

Stirng

  • 使用String不需要导包(import)
  • String的内容在创建后不能被更改
  • 创建String
//直接创建,系统会检查字符串在串池(堆上)有没有这个字符串,若有则复用,否则创新
String s1 = "abc";
//使用new和构建方法创建
String s2 = new String();
String s3 = new String("hello");
//传递字符数组
char[] chs = {'a', 'b'};
String s4 = new String(chs);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • String的比较
String s1 = "hello";
String s2 = "Hello";
//比较s1 and s2是否值相对
if(s1.equals(s2)) {
    System.out.println("true");
}
//使用equalsIgnoreCase比较s1 and s2忽略大小写情况下是否值相等
if(s1.equalsIgnoreCase(s2)) {
    System.out.println("`true");
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • String的索引
    使用 s.charAt(i) 返回一个char类型的值
  • 拼接String
    使用String类型变量直接与其它类型的值相加,返回一个String类型的值
  • String的截取
    substring(int begin, int end) 截取[begin, end)索引的字符串,返回类型是字符串
  • Stirng的替换
    replace(old, new) 传入旧的字符串和替换的字符串,返回类型是字符串
  • String转换为字符数组
    str.toCharArray 将字符串转换为字符数组,并返回这个数组

StringBuilder

StringBuilder可以看成一个容器,创建只会里面的内容可以变化

  • StringBuilder的作用:可以提高字符串的操作效率
  • StringBuilder的构造
    StringBuilder sb = new StringBuilder("hello");
  • StringBuilder常用的方法
    • 添加元素: sb.append("world") ;
    • 翻转字符串: sb.reverse ;
    • 获取长度: sb.length() ;
    • 转换为String: sb.toString() ;
  • StringBuilder的使用场景
    1. 翻转字符串
    2. 字符串的拼接

StringJoiner

StringJoiner也可以看成是一个容器

  • StringJoiner的作用:提高字符串的操作效率
  • StringJoiner的构造
    StringJoiner(", ","[", "]") 传入三个参数,第一个是间隔符号,第二个是开始符号,第三个是结束符号
  • StringJoiner的常用方法
    • 添加元素(只能添加字符串类型): sj.add() ;
    • 获取长度: sj.length();
    • 转换为String: sj.toString;
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/907314
推荐阅读
相关标签
  

闽ICP备14008679号