static优先于对象存在,因为static的成员随着类的加载就已经存在了。
静态代码块:随着类的加载而执行,优先级最高
内存分为堆内存(存放new出来的对象),栈内存(存放局部变量),数据区(存放静态变量和字符串常量),代码区(存放JAVA中方法的代码)。
37.在静态方法里面不能调用动态的方法 在类的构造方法里面可以this调用方法,可以省略this
你 main 方法是静态方法,
静态方法是不能调用非静态方法。
因为静态方法是提前加载的。这个时候可能非静态方法根本就还没加载。所以,是不允许在静态方法里面调用非静态方法的。(静态方法变量优先与对象加载)
可以在静态方法中,获得非静态方法所在的类的对象实例( new 一个对象)。
在静态方法中,用这个实例去调用非静态方法。
静态的是共享的(类名,对象名都可以调用) 非静态的是特有的,静态方法不再是针对于某个对象调用,所以不能访问非静态的成员
局部变量不能是静态的,全局变量可以是静态的(在外面定义)
局部变量前不能放置任何访问修饰符 (private,public,和protected)。
静态方法变量,不能使用this,super (静态变量优先于对象加载)
类有2种访问控制权限: 公有的(可被所有类共享) 缺省的(可被当前包中的类访问)
类中成员有4种访问控制权限:
私有成员(private):该成员仅能被当前类的成员访问。
没有修饰符表示缺省权限(当前包可见):说明该成员能被当前类以及包中的其他类所访问,称在当前包可见
protected声明保护成员:该成员能被当前类及其子类、或当前包中的其他类访问,称在子类中可见
public声明公有成员:该成员可被所有类访问
(在一个java文件里面不能写两个public的class 只能写一个 mian函数只能写在public的class文件里)
import java.util.ArrayList;
import java.util.List;
public class bb
{
public TTT tt;
// public bb bb1 ;
public void getname(bb bb1)
{
bb1.setTt(tt);
}
public TTT getTt()
{
return tt;
}
public void setTt(TTT tt)
{
this.tt = tt;
}
public static void main(String[] args)
{
// System.out.println(thi);
//静态方法不再是针对于某个对象调用,静态变量属于类,所以不能访问非静态成员(super,this代表当前对象)
//静态变量优先于对象存在
// bb1.
// System.out.println(super.getClass().getName());
bb bb2 = new bb();
bb2.getname(bb2);
System.out.println(bb2.getClass());
TTT tt = new TTT();
String str[] = {};
String s[] = new String[0];
System.out.println(new String[0]);
}
}