Static静态

JAVA中Static的相关内容

Static的中文意思是静态,什么是静态?

静态就是:

      如果一个成员变量使用了static关键字,那么这个变量不再属于对象自己,而是属于所在的类,多个对象共享同一份数据,这就是类的静态变量

      用static修饰的成员方法同理这就是类的静态方法

注意事项

  1. 静态只能访问静态,静态不能访问非静态。 因为在内存当中,先有的静态内容,后有的非静态内容,先人不知道后人,后人知道先人。

  2. 静态方法中不能用this。 因为this代表当前对象,通过谁调用的方法,谁就是当前对象,但是静态和对象没关系。

关于静态有一种特殊使用方法:静态代码块

public class 类名称 {
    static {
        // 静态代码块的内容
    }
} 

特点:当第一次用到本类时,静态代码块执行唯一一次。当类中某一些只会用到唯一一次的代码,就可以使用静态代码块,无需再将这些代码写成一个方法,然后调用方法执行,静态代码块自己会执行。

 


 

关于静态还有很多需要深入了解的知识,这里只是浅显的讲了一下常用的东西,静态最主要的就是属于类而和创建的对象无关

String字符串

String字符串

String字符串的特点

  1. 字符串的内容永不可变 。 重点
  2. 正是因为字符串不可变,所以字符串可以共享使用。
  3. 字符串效果相当于是char[] 字符数组,但是底层原理是byte[] 字节数组。

关于字符串内容永不可变

String str = “Hello”;
str实际上是对“Hello”的引用,”Hello”才是在堆中被创建的字符串对象,里面存的的字符串内容是Hello,而str则存放的是Hello这个字符串对象的地址。

当出现这种情况时:str = “world”;
原本Hello那个字符串的内容并没有改变,只是在堆中新创建了一个world的字符串对象,而str成了world的引用,存放的是world这个字符串对象的地址。
所以字符串内容是永不可变的,你感觉到的变了其实是引用地址的改变。


创建字符串的常见方式(3+1种)

三种构造方法

  1. public String(); 创建一个空白字符串,不含有任何内容。

  2. public String(char[] array); 根据字符数组的内容,来创建对应的字符串。

  3. public String(byte[] array); 根据字节数组的内容,来创建对应的字符串。

一种直接创建

String str = “Hello”;


String类中常用的一些方法

与转换相关的方法

public char[] toCharArray(); 将当前字符串拆封为字符数组作为返回值。

public byte[] getBytes(); 获得当前字符串底层的字节数组。

public String replace(CharSequence oldString,CharSequence newString);将所有出现的老字符串替换为新字符串,返回替换之后的结果字符串。CharSequence意思就是说可以接收字符串类型。游戏中的关键字屏蔽可以用这种方法

与比较相关的方法

==用于字符串的比较是对对象的地址进行比较,如果要对内容进行比较,可以用下面两个方法。

public boolean equals(Object obj); 参数可以是任何对象,只有参数是一个字符串并且内容相同才会返回true,否则返回false。

“Hello”.equals(str);
注意:这样写比str.equals(“Hello”)好,因为str.equals(“Hello”)可能会抛出空指针异常,str是一个变量,而”Hello”.equals(str)不会抛出这个异常,因为“Hello”是一个常量,永远不会空指针。

public boolean equalsIgnoreCase(String str);忽略大小写进行字符串比较

str = “ABC”;
“abc”.equalsIgnoreCase(str) = true;

与获取相关的一些方法

public int length(); 获取字符串中字符的个数,拿到字符串长度。

public String concat(String str); 将当前字符串和参数字符串拼接成为返回值新的字符串。

public char charAt(int index); 获取指定索引位置的单个字符。

public int indexOf(String str); 查找参数字符串在本字符串中首次出现的位置,若不存在则返回-1。

字符串的截取方法

public String substring(int index); 从参数位置开始一直到字符串末尾返回新字符串。

public String substring(int begin, int end); 从begin开始一直到end结束返回新字符串,包括begin不包括end

分割字符串的方法

public String[] split(String regex); 按照参数的规则,将字符串切割成若干部分。

split方法的参数实际上是一个“正则表达式”,如果用英文句点“.”进行切分,必须写“\\.”,因为需要转义。


基本类型与字符串类型之间的相互转换

基本类型与字符串类型之间的互相转换。

基本类型–>字符串(String):

  1. 基本类型的值 + “”。 最简单的方法,工作中常用

  2. 包装类的静态方法toString(参数),不是Object类的toString

static String toString(包装类的基本类型参数);返回一个表示指定整数的 String 对象。

  1. String类的静态方法valueOf(基本类型参数);返回参数的字符串表示形式。

字符串(String)–>基本类型:

使用包装类的静态方法parse基本类型名称(字符串)

如:Integer类:static int parseInt(String s);


关于常量池的概念

  1. 对于引用类型来说,==进行的是地址值的比较。

  2. 双引号直接写的字符串在常量池当中,new的不在池中。

    public static void main(String[] args) {
        String str1 = "a,b,c";
        String str2 = "a,b,c";
    
        char[] array = {'a', 'b', 'c'};
        String str3 = new String(array);
    
        System.out.println(str1 == str2);   //true
        System.out.println(str1 == str3);   //false
        System.out.println(str2 == str3);   //false
    }

原理

Principle



以上是对String字符串类型有关内容的一些小小整理,想要了解更多请自己查询有关知识。

Java中的接口

关于接口

接口就是多个类的公共规范。

接口是一种引用数据类型,最重要的内容就是其中的:抽象方法。

接口与父子类继承有相似之处,可以把接口中的内容交给“实现类”来实现,接口与父子类相比,更加灵活,一个“实现类”可以多实现多个接口,而在父子类中只能单继承,一个子类只有一个父类。

接口的定义格式

public interface 接口名称{
    //接口方法
}

接口中的内容
   

  • 如果是java7,那么接口中可以包含的内容有:

    1. 常量(必须使用public static final三个关键字修饰,可以省略不写,但是初学者不建议这样做,常量必须有赋值

    2. 抽象方法(有abstract关键字修饰

  • 如果是java8,还可以额外包含有:

    1. 默认方法(可以解决接口升级的问题,即已经有了接口的实现类以后,接口升级不会影响已经使用此接口的实现类
    2. 静态方法
  • 如果是java9,还可以额外包含有:

    1. 私有方法(接口中的私有方法用来作为两个方法的公有方法,解决两个方法之间代码重复的问题。但是这个方法不应该让实现类使用,应该是私有的。有普通私有方法与静态私有方法两种,分别解决多个默认方法之间代码重复的问题与多个静态方法之间代码重复的问题

接口的使用步骤
   

  1. 接口不能直接使用,必须有一个“实现类”来“实现”接口。

       格式:

public class 实现类名称 implements 接口名称 {
       //....
}
  1. 接口的实现类必须覆盖重写(实现)接口中所有的抽象方法,如果实现类没有全部覆盖重写,那么实现类必须是抽象类。

  2. 创建实现类的对象,进行使用。

实现类可以多实现多个接口

注意事项:
   

  1. 如果实现类实现的多个接口中,有重复的抽象方法,那么只需要覆盖重写一次即可。

  2. 如果实现类实现的多个接口中,有重复的默认方法,那么实现类必须要对重复的默认方法覆盖重写

  3. 一个类如果直接父类中的方法与接口中的默认方法产生了冲突,优先使用父类当中的方法,父类的优先级大于接口

接口与接口之间也可以多继承

注意事项:
   

  1. 多个父接口当中的抽象方法如果重复,没关系,因为在子接口当中本就要覆盖重写实现抽象方法。

  2. 多个父接口当中的默认方法如果重复,那么子接口必须进行默认方法的覆盖重写,而且必须要带着default关键字。


更多接口的详细信息可以咨询查找。

ArrayList

Array与ArrayList的区别

数组的长度不可以发生改变,但是ArrayList的长度是可以随意变化的

关于ArrayList

对于ArrayList来说,用一个尖括号代表泛型。

泛型:就是装在集合当中的所有元素,全都是统一的一种类型。

注意:泛型 只能 是引用类型,不能 是基本类型(byte,short,int,long,float,double,boolean,char)

如果想创建一个基本类型的ArrayList

可以使用基本类型所对应的“包装类”

基本类型 包装类(引用类型)
byte Byte
short Short
int Integer
Long Long
float Float
double Double
Boolean Boolean
char Character

ArrayList的常用方法

public boolean add(E e); 向集合当中添加元素,参数的类型和泛型一致

public E get(int index); 从集合当中获取元素,参数是索引编号,返回值就是对应位置的元素

public E remove(int index); 从集合当中删除元素,参数是索引编号,返回值就是被删除的元素

public int size(); 获取集合的尺寸长度,返回值就是集合当中包含的元素的个数

Random

关于Random

Random类位于java.util.Random包下,可以用来生成随机序列。

有两种常用用法:

Random() 用时间作为种子产生随机序列,随机性性强,一般产生的序列不相同。

Random(seed) seed是产生随机序列的种子,只要是同一种子,每次产生的随机序列都相同。

代码举例

1.第一种方法产生随机序列

Random r = new Random();
int a = nextInt(10);

10代表产生的随机序在0到10之间(不包括10),即[0,10)。


2.第二种方法产生随机序列

Random r = new Random(10);
int a = nextInt(10);

每次产生的随机序列都相同。


具体更多用法可以查询API

Scanner

关于Scanner

Scanner的作用类似于输入函数,可以把键盘的输入传递给需要用的变量。

Scanner的使用步骤

1.导包

import java.util.Scanner;

2.创建

Scanner sc = new Scanner(System.in);

tips:System.in表示从键盘输入。

3.使用

String str = sc.next();

String str = sc.nextLine();

对于字符串,有上述两种常用用法,对于第一种,遇到空格就结束,对于第二种遇到回车才结束。

String str = sc.nextInt();

对于int类型,常用用法如上所写。


更多详细用法请查询API

请我喝杯咖啡吧~

支付宝
微信