静态

每日一练

找子串出现的所有下标位置

 

package day0901;

 

import java.util.Arrays;

import java.util.Scanner;

 

public class Test1 {

    public static void main(String[] args) {

        System.out.print("输入字符串");

        String s = new Scanner(System.in).nextLine();

 

        System.out.print("输入子串");

        String find = new Scanner(System.in).nextLine();

 

        int[] a = find(s,find);

        System.out.println(Arrays.toString(a));

    }

 

    private static int[] find(String s, String find) {

        int[] a = new int[s.length()];

        int index = 0;

        int i = 0;

        while (true)

        {

            index = s.indexOf(find,index);

            if(index == -1) break;

            a[i++] = index;

            index++;

        }

        return Arrays.copyOf(a,i);

    }

}

猜字母

 

StringBuilder

Delete(start,end)

 

charAt()

setCharAt(I,c)

 

package day0804;

 

import java.util.Random;

 

public class GuessLetterGame extends GuessGame {

    @Override

    public String suiji() {

        StringBuilder sb = new StringBuilder("ABCDEFGHIJKLMNOPQRSTUVWXYZ");

        for (int i=0;i<5;i++)

        {

            int j = i + new Random().nextInt(26-i);

            char t = sb.charAt(i);

            sb.setCharAt(i,sb.charAt(j));

            sb.setCharAt(j,t);

        }

        sb.delete(5,26);

        return sb.toString();

    }

 

    @Override

    public void tishi() {

        System.out.println("已经产生了5个不同的大写字母");

    }

 

    @Override

    public String bijiao(String result, String input) {

        int a = 0;

        int b = 0;

        for(int i=0;i<5;i++)

        {

            for (int j=0;j<5;j++)

            {

                if(result.charAt(i) == input.charAt(j))

                {

                    if(i==j) a++;

                    else b++;

                }

            }

        }

        return a+"A"+b+"B";

    }

 

    @Override

    public boolean caidui(String result) {

        return result.equals("5A0B");

    }

}

JVM虚拟机内存分区

STATIC静态关键字

静态属于类,不属于对象

共享数据

 

士兵计数

package day0903;

 

import java.util.Random;

 

public class Soldier {

    public int id;

    public int blood = 100;

 

    //静态士兵计数变量

    static int counts = 1;

 

    public Soldier(){

        this.id = Soldier.counts;

        ++counts;

        System.out.println("构造方法");

    }

 

    public void go()

    {

        System.out.println(id+"号 士兵前进");

    }

 

    public void ac()

    {

        if(blood == 0){

            System.out.println(id+"号士兵已经阵亡");

            return;

        }

        System.out.println(id+"号 士兵进攻");

        int d = new Random().nextInt(10);

        this.blood -= d;

        if(this.blood < 0 ) this.blood = 0;

        System.out.println("血量:"+blood);

        if (blood == 0) System.out.println(id+"号 士兵阵亡");

    }

}

工具方法

Math.sqrt()

 

Final

修饰常量:值不可变

方法:方法不能被子类重写

:不能被子类继承

 

常量:static final

final不可变

Static 节省内存,只有一个内存地址

 

常量命名习惯

全大写

单词之间加下划线

 

对象的创建过程

class A {

   int v1 = 1;

   static int v2 = 2;

   static {

}

public A() {

}

}

 

class B extends A {

   int v3 = 3;

   static int v4 = 4;

   static {

}

public B() {

}

}

 

new B()

第一次用到AB

加载父类,父类的静态变量分配内存

加载子类,子类的静态变量分配内存

父类静态变量赋值运算,和静态初始化块

子类静态变量赋值运算,和静态初始化块

创建对象

创建父类对象,父类的非静态变量分配内存

创建子类对象,子类的非静态变量分配内存

执行父类非静态变量赋值运算

执行父类构造方法

执行子类非静态变量赋值运算

执行子类构造方法