这里主要涉及到类对象(static方法),对象方法(非static方法) 我们知道,当synchronized修饰一个static方法时,多线程下,获取的是类锁(即Class本身,注意:不是实例): 当synchronized修饰一个非static方法时,多线程下,获取的是对象锁(即类的实例对象) 所以,当synchronized修饰一个static方法时,创建线程不管是new JoinThread()还是new Thread(new JoinThread()),在run方法中执行inc()方法…
前言 最近被问到了这个问题,第一次回答的也是很不好,在此参考网上答案进行整理记录.供大家学习参考. Synchronized修饰非静态方法 Synchronized修饰非静态方法,实际上是对调用该方法的对象加锁,俗称“对象锁”. Java中每个对象都有一个锁,并且是唯一的.假设分配的一个对象空间,里面有多个方法,相当于空间里面有多个小房间,如果我们把所有的小房间都加锁,因为这个对象只有一把钥匙,因此同一时间只能有一个人打开一个小房间,然后用完了还回去,再由JVM 去分配下一个获得钥匙的人. 情况…
静态变量和成员变量的区别* 静态变量也叫类变量  成员变量也叫对象变量* A:所属不同 * 静态变量属于类,所以也称为为类变量 * 成员变量属于对象,所以也称为实例变量(对象变量)* B:内存中位置不同 * 静态变量存储于方法区的静态区 * 成员变量存储于堆内存* C:内存出现时间不同 * 静态变量随着类的加载而加载,随着类的消失而消失 * 成员变量随着对象的创建而存在,随着对象的消失而消失* D:调用不同 * 静态变量可以通过类名调用,也可以通过对象调用 * 成员变量只能通过对 象名调用 fi…
知识回顾 上一篇总结了java中成员变量和局部变量的区别,这一篇将总结静态变量和实例变量的一些特性和区别. 示例代码 package Variable; public class VariableDemo { //实例变量 int a; //静态变量 static int b; public static void main(String[] args) { System.out.println(VariableDemo.b);//静态变量可以直接被类调用,实例变量不可以 //新建一个对象 va…
本文内容: 什么是面对对象 类的定义与对象实例化 成员变量 成员变量的有效范围 成员变量的赋值 静态变量.方法与实例变量.方法 构造函数 封装与私有 this关键字 注:函数和方法是一样东西.[由于我之前学习的时候有些书籍不是同样的说法,书看多了,我就习惯了不同情况下用不同的说法] 首发时间:2018-03-22 什么是面对对象: 面向对象强调行为处于对象之中,并不直接执行行为,而是通过对象执行行为 类是对象的抽象,对象是类的具体实例. [可以说,人是一个类,而不同身份的你我他是一个具体实例.人…
//最近总是犯迷糊,关于block对外部变量的引用,今天有时间就写了一下,加深自己的理解,巩固基础知识 1 #import <Foundation/Foundation.h> ; int main(int argc, const char * argv[]) { @autoreleasepool { ; __block ; ; int (^sum)(int, int) = ^(int a, int b) { NSLog(@"%d %d %d %d",sNum,gNum,lN…
实例变量又称成员变量: 1⃣️成员变量定义在类中,在整个类中都可以被访问 2⃣️成员变量随着对象的建立而建立,随对象的消失而消失,存在于对象所在的对内存中 3⃣️成员变量有默认初始值 局部变量: 1⃣️定义在方法中或方法的参数列表(或者语句中) 2⃣️存在于栈内存中,作用的范围结束,变量空间自动释放 3⃣️默认没有初始化值,使用时需要进行初始化 静态变量又称类变量:用static修饰 1⃣️存储在方法区中 2⃣️随着类的加载而存在,随着类的消失而消失 3⃣️可以由类名或对象调用…
之前都是业务层次开发,现在公司进行的网络编程,一下子要了解太多java底层的东西并进行应用,我现在边学习边应用.由于知识能力有限,在上次发博客时出现了一个小小的纰漏,而这个纰漏被细心的博友发现了. 首先感谢你的关注,其次非常感谢你的建议和批评.其实上次博客中说道要线程安全的取得缓冲变量确实有安全取得某变量的意思,不过那个例子只是一个讲解Socket应用的小示例.如果真的要保证变量安全,使用静态变量,这好像有点不正常了. 其实这一下子就围绕在了一个话题上面,那就是变量的线程安全性.现在就一个个来说…
这里简单做一下笔记,区分Java全局变量里的静态变量与实例变量. 1.Java里的全局变量 首先了解Java里的全局变量,也叫成员变量. 特点: (1).一个类中既不在方法体内,也不在程序块内定义的变量: (2).类中所有的方法和代码块都可以访问成员变量: (3).对于没有初始化的成员变量,系统会指定默认的值. 2.全局变量包括静态变量与实例变量 字面理解: 静态变量也叫做类变量,独立于方法之外的变量,有static修饰. 实例变量同样独立也是独立于方法之外的变量,但没有static修饰. ;…
1. static修饰的类只能为内部类,普通类无法用static关键字修饰.static修饰的内部类相当于一个普通的类,访问方式为(new 外部类名.内部类的方法() ).如下所示: public class OuterClass { public static class InnerClass{ InnerClass(){ System.out.println("============= 我是一个内部类'InnerClass' ============="); } } } publ…