一.package:
1.作用:避免类名的冲突
2.同包中的类不能同名的
3.类的全称:包名.类名
4.建议:包名所有字母都小写
二.import:
1.同包中的类可以直接访问,不同包中的类不能直接访问
2.不同包中的类访问有两种方式:
(1)先import声明类再使用类——>建议
(2)类的全称——>太繁琐
如:(1)import java.util.Scanner;
Scanner scan=new Scanner(System.in);
int a= scan.nextInt();
(2)java.util.Scanner scan=new java.util.Scanner(System.in);
int a= scan.nextInt();
三.访问控制修饰符:
1.public:公共的,任何类
2.protected:受保护的,本类、子类、同包类
3.默认的:什么也不写,本类、同包类
4.private:私有的,本类
数据(变量)私有化,行为(方法)公开化
注意:(1)类的修饰可以使用public和默认方式
(2)protected和private访问修饰符是不可以修饰类的,类中成员的访问修饰如上4种都可以。
四.static:静态的
1.静态变量
(1)由static修饰的
(2)属于类的,存储在方法区中,只有一份
(3)常常通过类名点来访问
(4)何时用:所有对象所共享的数据(图片、音频、视频)
2.成员变量:
(1)实例变量:没有static修饰的,属于对象的,存储在堆中的
有几个对象就有几份
通过对象名点来访问
(2)静态变量:由static修饰的,属于类的,存储在方法区中
只有一份
通过类名点来访问
栈:局部变量
堆:new出来的对象(包括实例变量)
方法区:.class字节码文件(包括方法、包括静态变量)
3.静态方法
(1)由static修饰的
(2)属于类的,存储在方法区中,只有一份
(3)常常通过类名点来访问
(4)静态方法没有隐式的this传递,
静态方法中不能直接访问实例成员
(5)何时用:方法的操作仅与参数相关而与对象无关
4.静态块
(1)属于类的,在类被加载期间自动执行,
因为类只被加载一次,所以静态块也只执行一次
(2)何时用:加载/初始化静态资源(图片、音频、视频等)
package oo.day05;
public class StaticDemo {
public static void main(String[] args) {
Eoo o1=new Eoo();
o1.show();//a=1,b=1
Eoo o2=new Eoo();
o2.show();//a=1;b=2
Eoo o3=new Eoo();
o3.show();//a=1;b=3
System.out.println(Eoo.b);//建议类名来访问,不建议对象名来访问
System.out.println(o1.a);
Foo.test();
Foo o4=new Foo();
o4.show();
Goo o5=new Goo();
Goo o6=new Goo();
}
}
class Goo{
static {//只执行一次
System.out.println("静态块");
}
Goo(){
System.out.println("构造方法");
}
}
class Foo {
int a;//实例变量
static int b;//静态变量
void show() {//有this
System.out.println(a);//this.a
System.out.println(b);//Foo.b
}
static void test() {//没有this
// System.out.println(a);
System.out.println(b);
}
}
class Eoo{
int a;
static int b;
Eoo(){
a++;
b++;
}
void show() {
System.out.println("a="+a);
System.out.println("b="+b);
}
}
结果如图:
五.final:最终的——>单独应用的几率很小
1.修饰变量:变量不能改变
2.修饰方法:方法不能被重写
3.修饰类:类不能被继承
六.static final常量:应用率高
1.必须声明同时初始化
2.通过类名来访问,不能被改变
3.建议:常量名所有字母都大写,多个单词用下划线分隔
4.编译器在编译时将常量直接替换为具体的值,效率高
5.某个数据永远不会改变,并且还经常使用