目录
需求:
解决方案 :
延伸:
静态代码块
静态代码块是无论类怎么初始化,都只会在类第一次加载的时候运行,之后再也不运行了
格式:
在 java
类中(方法中不能存在静态代码块)使用 static
关键字和{}声明的代码块
public class CodeBlock {
static{
System.out.println("静态代码块");
}
}
执行时机:
静态代码块在类被加载的时候就运行了,而且只运行一次,并且优先于各种代码块以及构造函数。如果一个类中有多个静态代码块,会按照书写顺序依次执行。后面在比较的时候会通过具体实例来证明。
静态代码块的作用:
一般情况下,如果有些代码需要在项目启动的时候就执行,这时候就需要静态代码块。比如一个项目启动需要加载的很多配置文件等资源,我们就可以都放入静态代码块中。
静态代码块不能存在任何方法体中:
对于普通方法:
由于普通方法是通过加载类,然后new出实例化对象,通过对象才能运行这个方法,而静态代码块只需要加载类之后就能运行了。
对于静态方法:
在类加载的时候,静态方法也已经加载了,但是我们必须要通过类名或者对象名才能访问,也就是说相比于静态代码块,静态代码块是主动运行的,而静态方法是被动运行的。
不管是哪种方法,我们需要明确静态代码块的存在在类加载的时候就自动运行了,而放在不管是普通方法还是静态方法中,都是不能自动运行的。
静态代码块不能访问普通变量:
这个理解思维同上,普通变量只能通过对象来调用,是不能放在静态代码块中的。
public class Test {
static int cnt = 6;
static {
cnt += 9;
}
public static void main(String[] args) {
System.out.println(cnt); // 5 所有静态代码块都执行完
}
static {
cnt /= 3;
}
}
LintCode刷题
·字符的ASCCI码
用字符串来获取得到的字符,再用string.charAT()方法取出character即可
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
String character=scanner.nextLine();
for (int i=0;i<character.length();i++) {
System.out.println((int) character.charAt(i));
}
}
}
·静态代码块的使用
延伸->代码块
加入一个静态代码块即可
public class Solution {
static {
System.out.println("Execute static code block when class is loaded");
}
}
·获取学生信息
使用静态类可以直接调用静态方法,但是用里面的其他方法得先创建此对象
public class Solution {
private static String prop1;
private static String prop2;
private static String prop3;
public Solution() {
}
public Solution(String prop1, String prop2, String prop3) {
this.prop1 = prop1;
this.prop2 = prop2;
this.prop3 = prop3;
}
public void accessInnerProp() {
System.out.println("studentName:"+staticInnerClass.studentName);
System.out.println("studentId:"+new staticInnerClass().studentId);
System.out.println("studentCourse:"+new staticInnerClass().studentCourse);
}
static class staticInnerClass {
private static String studentName = prop1;
private String studentId = prop2;
private String studentCourse = prop3;
}
}
·输出杨辉三角
用二维数组来存储杨辉三角,首先确认正常的arr[i][j]=arr[i-1][j-1]+arrr[i-1][j],再把j=0(首位),j=i(末尾)储值为1,输出即可(末位不带空格)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n =scanner.nextInt();
int[][] arr=new int[n][n];
for (int i=0;i<n;i++){
for (int j=0;j<=i;j++){
if (j==0||i==j){
arr[i][j]=1;
}else
arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
}
}
for (int i=0;i<n;i++){
for (int j=0;j<=i;j++){
if (i==j)
System.out.print(arr[i][j]);
else
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
}
·整数运算
获取到输入的两个数,运算即可
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int a=scanner.nextInt();
int b=scanner.nextInt();
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println(a/b);
}
}
·实现Pig类和Dog类的方法
重载一下方法即可
学习时间:
2021-8-19 9:00-11.45、13.30-17.00
学习产出:
刷题*6
学习博客*1