static关键字以及对main方法的解释

static关键字

被static修饰的变量和方法称为静态变量和方法
随着类的加载而加载
优先于对象存在
被类的所有对象所共享
可以通过类名直接调用
如果某个成员变量是被所有对象所共享的,那么就把他定义为静态变量

static的注意事项

1.在静态方法中是没有this关键字的
因为静态时随着类的加载而加载的,this是随着对象的加载而加载的,静态比对象先存在
2.静态方法只能访问静态的成员变量和静态的成员方法
非静态方法能访问静态方法或静态变量,也能访问非静态方法或静态变量
简单记:静态只能访问静态

静态变量和成员变量的区别

静态变量也叫类变量,成员变量也叫对象变量
1.所属不同
静态变量属于类,成员变量属于对象
2.内存中的位置不同
静态变量在方法区的静态区,成员变量在堆内存
3.内存出现时间不同
静态变量是随着类的加载而加载的,成员变量是随着对象的创建而加载的
4.调用不同
静态变量可以通过类名直接调用,成员变量只能通过对象名调用

main方法的格式解释

main方法格式:
public static void main(String[] args) {}
针对格式的解释
public 被jvm调用,访问权限足够大。
static 被jvm调用,不用创建对象,直接类名访问
void被jvm调用,不需要给jvm返回值
main 一个通用的名称,虽然不是关键字,但是被jvm识别
String[] args 以前用于接收键盘录入的

发布了62 篇原创文章 · 获赞 3 · 访问量 3040
展开阅读全文

java synchronized(this)模块中this参数的含义。

12-08

定义了如下3个类,大致情况的主进程同时启动两个test2和test3线程。 test2和test3的run方法内部都添加了synchronized模块,当两个模块中的参数互指或互不指,即test2种模块参数指向test3同时test3的参数指向test2,或test2和test3的参数都指向自己this时,运行结果为2个test2,test3线程互相等待但test2和test3线程同时运行: new test() t2 0 t3 0 t3 1 t2 1 t3 2 t2 2 t2 3 t3 3 t3 4 t2 4 t3 5 t2 5 t2 0 t3 6 t2 1 t3 7 t3 8 t2 2 t2 3 t3 9 t2 4 t3 10 t2 5 t3 0 t3 1 t3 2 t3 3 t3 4 t3 5 t3 6 t3 7 t3 8 t3 9 t3 10 当test2的参数指向test3,test3的参数指向自己this;或者test2的参数指自己,test3的参数指test2时,运行结果是4个test2,test3线程互相等待,同时只有一个线程运行: new test() t2 0 t2 1 t2 2 t2 3 t2 4 t2 5 t3 0 t3 1 t3 2 t3 3 t3 4 t3 5 t3 6 t3 7 t3 8 t3 9 t3 10 t2 0 t2 1 t2 2 t2 3 t2 4 t2 5 t3 0 t3 1 t3 2 t3 3 t3 4 t3 5 t3 6 t3 7 t3 8 t3 9 t3 10 并且不论synchronized块的参数是什么,同一个对象的运行是被锁住了,即两个test2和两个test3之间只能同时运行一个。 想问下高手jvm如何产生这个特性的原理是什么,这个参数又有什么方面的应用啊? public class test implements Runnable{ Thread t; Thread t1; test2 t2=new test2() ; test3 t3=new test3(); Thread T3; Thread TT3; test() { System.out.println("new test()"); t=new Thread(this); t1=new Thread(this); t2.t3=t3; t3.t2=t2; t.start(); t1.start(); T3=new Thread(t3); TT3=new Thread(t3); T3.start(); TT3.start(); } public void run() { t2.speak(); } public static void main(String[] args) { // TODO Auto-generated method stub new test( ); } } public class test2 { test3 t3; public void speak() { synchronized(t3){ //test2中参数指向test3线程 for(int i=0;i<=5;i++) { System.out.println("t2 "+i); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } public class test3 implements Runnable{ test2 t2; public void run() { synchronized(this){ //synchronized参数指向自己 for(int i=0;i<=10;i++) { System.out.println("t3 "+i); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览