1.static只能修饰类的成员变量,不能修饰方法里的局部变量。

因为static是在类加载时候将成员变量存储进方法区的。

加载类的时候,是不去执行方法里的函数的。所以不会馆方法里的代码,自然就不会读取到static变量了。

如,这个代码就是错误的

class Student{
private string name;
public void setName(string str)
{
static int a = ;//这里错误,static只能修饰类的成员变量
}
}

2.new一个对象或者加载一个类的时候,是不是执行方法里的代码的。

而且new的对象,在堆中的存储空间就是成员变量的存储空间。

方法函数是不占代码的,方法里的代码全都存储在方法区里面。只有在执行方法时,才会找到方法区的代码,放到cpu里执行

3.java对垃圾回收是通引用变量来管理内存的。引用变量分为静态引用变量,成员变量,局部变量。

三种变量意味三种不同的生命周期对象。

局部变量,意味着方法执行时创建,执行完成后销毁。其生命周期和方法一样。

成员变量,意味着随着此类被new创建时而创建,此对象被销毁后跟随销毁,与对象的生命周期一样。

static变量,意味着生命周期最长,随着类被加载而创建,只要不认为控制垃圾回收,静态变量是一直生存的。

4.非静态方法可以调用静态方法,静态方法不能调用非静态方法。

什么意思?答:因为静态方法是在类加载时被存储进方法区的,而非静态方法是在程序执行时才调用的。一前一后,程序总是先加载后执行的,所以俩生命周期不一致,

只能后面的访问前面的,即非静态方法可以调用静态方法。但静态方法不能访问非静态方法,因为加载时,非静态方法还没被执行呢。

5.方法区的数据是线程共享的,每个线程都可以访问修改方法区数据。所以要给设置static变量的static方法加锁,以保证static变量的线程安全。

1.这里的synchronized锁住的是Student.class这个对象。因为方法是静态static的。

public class Student {
public static String name = "abc";
public static String age = "";
synchronized public static void set(String name1,String age1) {
Student.name = name1;
Student.age = age1;
}
}

2.如果不加static,方法变为synchronized public  void set(String name1,String age1) {}。锁住的是这个对象的锁。

public class Student {
public static String name = "abc";
public static String age = "";
synchronized public void set(String name1,String age1) {
Student.name = name1;
Student.age = age1;
}
}

6.static变量设置private或者public问题。为了保证static变量线程安全,一般设置static变量的访问属性为private,然后再static变量的set方法设置为public并加锁,以保证线程安全。

如:

public class Student {
private static String name = "abc";//private 修饰
private static String age = "";
synchronized public static void set(String name1,String age1) {
Student.name = name1;
Student.age = age1;
}
}

7.局部变量的生命周期是在一个大括号内,即一个所处块结束。如循环体内定义的int j;

java 是块作用域 
一个 {} 就是一个独立的作用域空间 
每次循环的时候,都会有一个新的作用域空间
你在for循环体外是看不到my的,也是因为超出了作用域空间。

循环第二次的时候,就有一个重名的my了呀?为什么还是能正常运行,不报错?

java代码声明引用变量经验的更多相关文章

  1. 写好Java代码的30条经验总结(转)

    成为一个优秀的Java程序员,有着良好的代码编写习惯是必不可少的.下面就让我们来看看代码编写的30条建议吧. (1) 类名首字母应该大写.字段.方法以及对象(句柄)的首字母应小写.对于所有标识符,其中 ...

  2. 写好Java代码的30条经验总结

    成为一个优秀的Java程序员,有着良好的代码编写习惯是必不可少的.下面就让我们来看看代码编写的30条建议吧. (1) 类名首字母应该大写.字段.方法以及对象(句柄)的首字母应小写.对于所有标识符,其中 ...

  3. 下列java代码中的变量a、b、c分别在内存的______存储区存放。

    class A{ private String a = "aa"; public boolean methodB(){ String b = "sb"; fin ...

  4. Kettle变量和自己定义java代码的实例应用

    1  kettle.properties參数配置数据源连接和FTP连接 因为測试环境和生产环境中数据库连接FTP等配置会在部署过程中变更,所以预先定义成配置项,在配置文件里改动.这样測试和公布将会变得 ...

  5. Java传参都是传引用变量的副本

    最近做练习时碰到一个问题,Java到底是怎样传参的,经过查资料与实验,我发现Java传参都是传引用变量的副本值. 1 Java中的引用变量 1.1 字面值引用变量:即基本数据类型的引用变量 ,如 in ...

  6. C++ primer(八)--内联函数 引用变量 引用传递函数参数 函数重载/模板/模板具体化

    一.内联函数     常规函数和内联函数的区别在于C++编译器如何将他们组合到程序中.编译过程的最终产品是可执行程序--由一组机器语言指令组成.运行程序时,操作系统将这些指令载入到计算机内存中,因此每 ...

  7. 在java代码中,用xslt处理xml文件

    http://blog.csdn.net/zhou_lei/article/details/2661735 ********************************************** ...

  8. 【JAVA】笔记(3)---封装;如何选择声明静态变量还是实例变量;如何选择声明静态方法还是实例方法;静态代码块与实例代码块的执行顺序与用途;

    封装: 1.目的:保证对象中的实例变量无法随意修改/访问,只能通过我们自己设定的入口,出口(set / get)来间接操作:屏蔽类中复杂的结构,使我们程序员在主方法中关联对象写代码时,思路/代码格式更 ...

  9. java中的静态变量、静态方法与静态代码块详解与初始化顺序

      我们知道类的生命周期分为装载.连接.初始化.使用和卸载的五个过程.其中静态代码在类的初始化阶段被初始化. 而非静态代码则在类的使用阶段(也就是实例化一个类的时候)才会被初始化. 静态变量 可以将静 ...

随机推荐

  1. CF614A 【Link/Cut Tree】

    题意:求出所有w^i使得l<=w^i<=r 输入为一行,有三个数,分别是l,r,w.意义如题目所描述 输出为一行,输出所有满足条件的数字,每两个数字中间有一个空格 如果没有满足条件的数字则 ...

  2. MySQL学习笔记:字符串前后补全0

    遇到一个需求:不足6位的需要自动补全6位,使用函数LPAD()和RPAD()补全. LPAD(str, len, padstr) 用字符串padstr对str进行左边填充补全直至它的长度达到len个字 ...

  3. contabs.js 的使用

    1. 先下载两个文件 https://files.cnblogs.com/files/xiaojf/style.css https://files.cnblogs.com/files/xiaojf/c ...

  4. C语言:1孩半问题

    题目: 一孩半,又称独女户二胎,即中国大陆部分农村的一项计划生育政策,第一胎是女孩的夫妻可以生育第二个子女.如果第二胎有n%人工性别选择干预(选择男孩),试问男女比例为多少.(10分)题目内容: 一孩 ...

  5. 解析文本文件 "r" 与 "rb" 模式的区别(Python)

    r,rb 那么在读文件时,有无b标识的的主要区别在哪里呢? 1.文件使用方式标识 'r':默认值,表示从文件读取数据.'b':表示要读写二进制数据 2.读文件 进行读文件操作时,直到读到文档结束符(E ...

  6. MVC文件上传

    这次来看下一个MVC网站上传文件的功能,其中上传用到uploadify这个jquery插件,网上还有很多类似的,哪种都无所谓,能实现功能便行,貌似uploadify官网上的这个插件是要付费的,这里就顺 ...

  7. MySQL性能优化(七·下)-- 锁机制 之 行锁

    一.行锁概念及特点 1.概念:给单独的一行记录加锁,主要应用于innodb表存储引擎 2.特点:在innodb存储引擎中应用比较多,支持事务.开销大.加锁慢:会出现死锁:锁的粒度小,并发情况下,产生锁 ...

  8. Object-c和Java中的代理

    代理模式的核心思想就是一个类想做一件事情(函数),但它不去亲自做(实现),而是通过委托别的类(代理类)来完成. 代理模式的优点: 1.可以实现传值,尤其是当一个对象无法直接获取到另一个对象的指针,又希 ...

  9. Django学习笔记--通用列表和详细信息视图

    根据教程写完代码后,点击All books也一直跳转到index的页面 我打开了F12调试,看到点击没有出现book_list的代码,觉得应该是url的路径写得不对,但是跟教程代码对比了下,并没有发现 ...

  10. RMQ_第一弹_Sparse Table

    title: RMQ_第一弹_Sparse Table date: 2018-09-21 21:33:45 tags: acm RMQ ST dp 数据结构 算法 categories: ACM 概述 ...