java代码声明引用变量经验
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代码声明引用变量经验的更多相关文章
- 写好Java代码的30条经验总结(转)
成为一个优秀的Java程序员,有着良好的代码编写习惯是必不可少的.下面就让我们来看看代码编写的30条建议吧. (1) 类名首字母应该大写.字段.方法以及对象(句柄)的首字母应小写.对于所有标识符,其中 ...
- 写好Java代码的30条经验总结
成为一个优秀的Java程序员,有着良好的代码编写习惯是必不可少的.下面就让我们来看看代码编写的30条建议吧. (1) 类名首字母应该大写.字段.方法以及对象(句柄)的首字母应小写.对于所有标识符,其中 ...
- 下列java代码中的变量a、b、c分别在内存的______存储区存放。
class A{ private String a = "aa"; public boolean methodB(){ String b = "sb"; fin ...
- Kettle变量和自己定义java代码的实例应用
1 kettle.properties參数配置数据源连接和FTP连接 因为測试环境和生产环境中数据库连接FTP等配置会在部署过程中变更,所以预先定义成配置项,在配置文件里改动.这样測试和公布将会变得 ...
- Java传参都是传引用变量的副本
最近做练习时碰到一个问题,Java到底是怎样传参的,经过查资料与实验,我发现Java传参都是传引用变量的副本值. 1 Java中的引用变量 1.1 字面值引用变量:即基本数据类型的引用变量 ,如 in ...
- C++ primer(八)--内联函数 引用变量 引用传递函数参数 函数重载/模板/模板具体化
一.内联函数 常规函数和内联函数的区别在于C++编译器如何将他们组合到程序中.编译过程的最终产品是可执行程序--由一组机器语言指令组成.运行程序时,操作系统将这些指令载入到计算机内存中,因此每 ...
- 在java代码中,用xslt处理xml文件
http://blog.csdn.net/zhou_lei/article/details/2661735 ********************************************** ...
- 【JAVA】笔记(3)---封装;如何选择声明静态变量还是实例变量;如何选择声明静态方法还是实例方法;静态代码块与实例代码块的执行顺序与用途;
封装: 1.目的:保证对象中的实例变量无法随意修改/访问,只能通过我们自己设定的入口,出口(set / get)来间接操作:屏蔽类中复杂的结构,使我们程序员在主方法中关联对象写代码时,思路/代码格式更 ...
- java中的静态变量、静态方法与静态代码块详解与初始化顺序
我们知道类的生命周期分为装载.连接.初始化.使用和卸载的五个过程.其中静态代码在类的初始化阶段被初始化. 而非静态代码则在类的使用阶段(也就是实例化一个类的时候)才会被初始化. 静态变量 可以将静 ...
随机推荐
- python 统计MySQL大于100万的表
一.需求分析 线上的MySQL服务器,最近有很多慢查询.需要统计出行数大于100万的表,进行统一优化. 需要筛选出符合条件的表,统计到excel中,格式如下: 库名 表名 行数 db1 users 1 ...
- sicily 1051. Biker's Trip Odomete
DescriptionMost bicycle speedometers work by using a Hall Effect sensor fastened to the front fork o ...
- Android Activity、Service、BroadcastReceiver 的生命周期
Activity.Service.BroadcastReceiver这三个组建是Android开发中最常使用到的组件,在它们的生命周期的各个阶段我们需要针对性的做些事情,了解这些组件的生命周期有利于我 ...
- python使用cookie登陆网页
python2: Python 爬虫入门六之 Cookie 的使用 python3: Python3 网络爬虫 (六):Python3 使用 Cookie - 模拟登陆获取妹子联系方式 python ...
- Web前端开发最佳实践(12):JavaScript代码中有大量写死的配置数据?这些数据难以维护,你需要合理组织这些数据
前言 JavaScript代码基本上都是由业务逻辑和数据组成的,逻辑代码根据数据完成一定的操作.很多数据在代码中是写死的,比如一些URL.显示在界面上的提示信息.页面元素相关的样式值及其他使用到的固定 ...
- 备份恢复-----system表空间损坏
无法进行关库,报错如下 SQL> shutdown immediate ORA-01122: database file 1 failed verification checkORA-01110 ...
- 安卓webview断网处理
需求:webview在加载的时候如果网络断开,会显示默认的错误界面,长得很丑,需要单独写一个页面,在网路出错的时候显示,点击重试以后重新加载网页 乍看挺简单的需求,但在实际过程中页碰到了不少坑,主要是 ...
- Oracle数据库脚本中的set define off
2018年8月6日15:11:34 Oracle数据库脚本中的set define off 前言 最近在公司写需求,接触到脚本,第一句set define off;就不知道什么意思了,查询后记录之. ...
- rabbitmq学习(二) —— helloword!
rabbitmq学习当然是跟着官网走最好了,官网的教程写的很好,跟着官网教程走一遍就会有个初步了解了 下面的教程转自http://cmsblogs.com/?p=2768,该博客对官网的翻译还不错 介 ...
- 1032 Sharing (25)(25 point(s))
problem To store English words, one method is to use linked lists and store a word letter by letter. ...