1:static关键字
(1)静态的意思。可以修饰类的成员(成员变量和成员方法);
(2)静态成员的特点:
A:随着类的加载而加载,生命周期最长。
B:优先于对象存在。
}
C:被所有的对象所共享。
D:比非静态成员多了一种访问方式。可以通过类名直接调用。建议用类名.调用
(3)什么时候需要使用static修饰呢?
当类中的成员需要被所有对象共享时,用static修饰。不需要被共享时,就不用static修饰。
简单说:共性用static修饰,特性不用static修饰。
(4)注意事项
A:静态方法只能访问静态成员的。
B:静态方法中不能使用this,super关键字。
C:main是静态的。
**格式如下:
public static void main(String[] args){//new String[0]
}
***由于它被jvm调用,所以权限要足够大,所以用public权限修饰符。
***为了jvm可以不用创建对象直接调用它,所以用static修饰。
***void jvm不需要任何返回。但是方法体结尾默认有return;
***main jvm只认识这个名字。
***String[] 有可能需要传入参数。
***args 字符串数组的名字,只要符合标识符的命名规则可以随便起。
2:代码块
(1)局部代码块 控制变量的生命周期{int x}
(2)构造代码块 每创建一次对象就执行一次。
(5)静态代码块
1 //普通代码块:在方法或语句中出现的{}就称为普通代码块。普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行”
2 //构造块:直接在类中定义且没有加static关键字的代码块称为{}构造代码块。构造代码块在创建对象时被调用,每次创建对象都会被调用,并且构造代码块的执行次序优先于类构造函数。
3 /静态代码块:在java中使用static关键字声明的代码块。静态块用于初始化类,为类的属性初始化。每个静态代码块只会执行一次。由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行。
//如果类中包含多个静态代码块,那么将按照"先定义的代码先执行,后定义的代码后执行"。
//注意:1 静态代码块不能存在于任何方法体内。2 静态代码块不能直接访问静态实例变量和实例方法,需要通过类的实例对象来访问。
类中加载流程?
静态代码块--构造代码块--构造方法。
public void method() {
{
int x = 10;
System.out.println(x);
}
}
class Person{
{
System.out.println("你好");
}
}
Person p = new Person();
3:静态的应用
工具类ArrayTool
因为使用的都是class文件。所以你应该先编译ArrayTool,然后在编译ArrayToolDemo,最后执行ArrayToolDemo。
但是如果引用的工具类特别多的情况下,这样就很麻烦,所以java提供好的方式:只编译ArrayToolDemo即可。
(其实它首先在classpath下找ArrayTool.class,如果没有,接下来在当前类下找ArrayTool.class文件。
如果还没有,它就会找ArrayTool.java文件,并且进行编译。如果都没有,就报错。)
制作工具说明书:代码中有文档注释,用javadoc解析。
javadoc -d myAPI -author -version ArrayTool.java
-d 后面跟目录
ArrayTool.java 源代码文件
javadoc: 错误 - 找不到可以文档化的公共或受保护的类。
改用public修饰一下即可
4:API(Application programming Interface):应用程序编程接口。
JavaAPI:java的帮助文档。
5:设计模式
java中有23种设计。
单例设计模式:保证类在内存中只有一个对象。
如何保证类在内存中只有一个对象呢?
(1)控制类的创建,不让其他类来创建本类的对象。private
(2)在本类中定义一个本类的对象。Single s;
(3)提供公共的访问方式。 public static Single getInstance(){return s}
单例写法两种:
(1)饿汉式 开发用这种方式。
class Single{
private Single(){
}
private static Single s = new Single();
public static Single getInstance(){
return s;
}
}
(2)懒汉式 面试写这种方式。多线程的问题?
class Single {
private Single(){}
private static Single s;
public static Single getInstance(){
if(s==null){
s = new Single();
}
return s;
}
}
(3)第三种格式
class Single {
private Single() {}
public static final Single s = new Single();//final是最终的意思,被final修饰的变量不可以被更改
}
class Single{
private int num = 10;
private static Single s = new Single();
private Single(){
}
public static Single getInstance(){
return s;
}
public void setNum(int num){
this.num = num;
}
public int getNum(){
return this.num;
}
}
class SingleDemo {
public static void main(String[] args) {
Single s = Single.getInstance();
Single s1 = Single.getInstance();
//System.out.println(s==s1);
s.setNum(10);
s1.setNum(20);
System.out.println(s.getNum());
System.out.println(s1.getNum());
}
}
(1)静态的意思。可以修饰类的成员(成员变量和成员方法);
(2)静态成员的特点:
A:随着类的加载而加载,生命周期最长。
B:优先于对象存在。
}
C:被所有的对象所共享。
D:比非静态成员多了一种访问方式。可以通过类名直接调用。建议用类名.调用
(3)什么时候需要使用static修饰呢?
当类中的成员需要被所有对象共享时,用static修饰。不需要被共享时,就不用static修饰。
简单说:共性用static修饰,特性不用static修饰。
(4)注意事项
A:静态方法只能访问静态成员的。
B:静态方法中不能使用this,super关键字。
C:main是静态的。
**格式如下:
public static void main(String[] args){//new String[0]
}
***由于它被jvm调用,所以权限要足够大,所以用public权限修饰符。
***为了jvm可以不用创建对象直接调用它,所以用static修饰。
***void jvm不需要任何返回。但是方法体结尾默认有return;
***main jvm只认识这个名字。
***String[] 有可能需要传入参数。
***args 字符串数组的名字,只要符合标识符的命名规则可以随便起。
2:代码块
(1)局部代码块 控制变量的生命周期{int x}
(2)构造代码块 每创建一次对象就执行一次。
(5)静态代码块
1 //普通代码块:在方法或语句中出现的{}就称为普通代码块。普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行”
2 //构造块:直接在类中定义且没有加static关键字的代码块称为{}构造代码块。构造代码块在创建对象时被调用,每次创建对象都会被调用,并且构造代码块的执行次序优先于类构造函数。
3 /静态代码块:在java中使用static关键字声明的代码块。静态块用于初始化类,为类的属性初始化。每个静态代码块只会执行一次。由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行。
//如果类中包含多个静态代码块,那么将按照"先定义的代码先执行,后定义的代码后执行"。
//注意:1 静态代码块不能存在于任何方法体内。2 静态代码块不能直接访问静态实例变量和实例方法,需要通过类的实例对象来访问。
类中加载流程?
静态代码块--构造代码块--构造方法。
public void method() {
{
int x = 10;
System.out.println(x);
}
}
class Person{
{
System.out.println("你好");
}
}
Person p = new Person();
3:静态的应用
工具类ArrayTool
因为使用的都是class文件。所以你应该先编译ArrayTool,然后在编译ArrayToolDemo,最后执行ArrayToolDemo。
但是如果引用的工具类特别多的情况下,这样就很麻烦,所以java提供好的方式:只编译ArrayToolDemo即可。
(其实它首先在classpath下找ArrayTool.class,如果没有,接下来在当前类下找ArrayTool.class文件。
如果还没有,它就会找ArrayTool.java文件,并且进行编译。如果都没有,就报错。)
制作工具说明书:代码中有文档注释,用javadoc解析。
javadoc -d myAPI -author -version ArrayTool.java
-d 后面跟目录
ArrayTool.java 源代码文件
javadoc: 错误 - 找不到可以文档化的公共或受保护的类。
改用public修饰一下即可
4:API(Application programming Interface):应用程序编程接口。
JavaAPI:java的帮助文档。
5:设计模式
java中有23种设计。
单例设计模式:保证类在内存中只有一个对象。
如何保证类在内存中只有一个对象呢?
(1)控制类的创建,不让其他类来创建本类的对象。private
(2)在本类中定义一个本类的对象。Single s;
(3)提供公共的访问方式。 public static Single getInstance(){return s}
单例写法两种:
(1)饿汉式 开发用这种方式。
class Single{
private Single(){
}
private static Single s = new Single();
public static Single getInstance(){
return s;
}
}
(2)懒汉式 面试写这种方式。多线程的问题?
class Single {
private Single(){}
private static Single s;
public static Single getInstance(){
if(s==null){
s = new Single();
}
return s;
}
}
(3)第三种格式
class Single {
private Single() {}
public static final Single s = new Single();//final是最终的意思,被final修饰的变量不可以被更改
}
class Single{
private int num = 10;
private static Single s = new Single();
private Single(){
}
public static Single getInstance(){
return s;
}
public void setNum(int num){
this.num = num;
}
public int getNum(){
return this.num;
}
}
class SingleDemo {
public static void main(String[] args) {
Single s = Single.getInstance();
Single s1 = Single.getInstance();
//System.out.println(s==s1);
s.setNum(10);
s1.setNum(20);
System.out.println(s.getNum());
System.out.println(s1.getNum());
}
}