Java

入口

所有的 Java 程序由 public static void main(String []args) 方法开始执行。

  • 一个源文件中只能有一个public类
  • 一个源文件可以有多个非public类

变量

  • 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
  • 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
  • 类变量:类变量也声明在类中,方法体之外,但必须声明为static类型。

某个内容是被所有对象所共享,那么该内容就应该用静态修饰;没有被静态修饰的内容,其实是属于对象的特殊描述。

内存描述:

不同的对象的实例变量将被分配不同的内存空间, 如果类中的成员变量有类变量,那么所有对象的这个类变量都分配给相同的一处内存,改变其中一个对象的这个类变量会影响其他对象的这个类变量,也就是说对象共享类变量。 成员变量存在于堆内存中。静态变量存在于方法区中。

  • 想要实现对象中的共性数据的对象共享。可以将这个数据进行静态修饰。
  • 被静态修饰的成员,可以直接被类名所调用。也就是说,静态的成员多了一种调用方式。类名.静态方式。
  • 静态(方法,成员) 随着类的加载而加载。而且优先于对象存在 (所以静态方法只能访问静态成员,不可以访问非静态成员,静态方法中不能使用this,super关键字。因为this代表对象)

类型

计算机内存的最小存储单元是字节(byte)一个字节就是一个8位二进制数(8个bit)0~255

  • 整数类型:byte,short,int,long 考虑正负
  • 浮点数类型:float,double
  • 字符类型:char
  • 布尔类型:boolean

1
2
3
4
5
6
7
8
9
10
11
public class a {
    public static void main(String[] args) {
        int i =1;
        float a = 2;
        System.out.println(i+a);

        char p = 'f';
        String b = "fadfa";
        System.out.println(p+b);
    }
}

修饰符

访问修饰符

protected 需要从以下两个点来分析说明:

  • 子类与基类在同一包中:被声明为 protected 的变量、方法和构造器能被同一个包中的任何其他类访问;
  • 同一个包的类可以访问,其他的包的该类的子类也可以访问。
  • protected 可以修饰数据成员,构造方法,方法成员,不能修饰类(内部类除外)。

如果一个抽象类没有字段,所有方法全部都是抽象方法抽象类改写为接口

非访问修饰符

  • static 修饰符,用来修饰类方法和类变量。
  • final 修饰符,用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。
  • abstract 修饰符,用来创建抽象类和抽象方法。
  • synchronized 关键字声明的方法同一时间只能被一个线程访问
  • volatile 变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。

结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
for(int x = 10; x < 20; x = x+1) {
 System.out.print("value of x : " + x );
 System.out.print("\n");
}

String [] names ={"James", "Larry", "Tom", "Lacy"};
for( String name : names ) {
 System.out.print( name );
 System.out.print(",");
}

if( x < 20 ){
   System.out.print("这是 if 语句");
}else{
   System.out.print("这是 else 语句");
}

if(布尔表达式 1){
   //如果布尔表达式 1的值为true执行代码
}else if(布尔表达式 2){
   //如果布尔表达式 2的值为true执行代码
}else if(布尔表达式 3){
   //如果布尔表达式 3的值为true执行代码
}else {
   //如果以上布尔表达式都不为true执行代码
}


switch(expression){
    case value :
       //语句
       break; //可选
    case value :
       //语句
       break; //可选
    //你可以有任意数量的case语句
    default : //可选
       //语句
}