Java 读书笔记 (七) 变量
Java语言中, 所有的变量在使用前必须声明。声明变量的基本格式:
type identifier [ =value],[,identifier [=value]...];
声明变量的实例,有些包含了初始化过程
int a,b,c; // 声明三个int型整数: a、b、c
int d=3,e=4,f=5; // 声明三个整数并赋予初值
byte z=22; // 声明并初始化z
String s="runoob"; // 声明并初始化字符串s
double pi = 3.14159;// 声明双精度浮点型变量pi
char x='x'; // 声明变量x的值是字符'x'
Java 语言支持的变量类型
- 类变量: 独立于方法之外的变量,用static修饰
- 实例变量: 独立于方法之外的变量,不过没有static修饰
- 局部变量: 类的方法中的变量
实例:
public class Variable{
static int allClicks=0; //类变量
String str="Hello world"; // 实例变量
public void method(){
int i=0; //局部变量
}
}
Java局部变量
- 局部变量声明在方法、构造方法或语句块中;
- 局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁;
- 访问修饰符不能用于局部变量;
- 局部变量只在声明它的方法、构造方法或者语句块中可见;
- 局部变量是在栈上分配的
- 局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用
实例1
//以下实例中age是一个局部变量,定义在pupAge()方法中,它的作用域就限制在这个方法中
package com.runoob.test;
public class Test{
public void pupAge(){
int age=0;
age = age+7;
System.out.println("小狗的年龄是: "+age);
}
public static void main(String args []{
Test test = new Test();
test.pupAge();
}
}
//运行结果: 小狗的年龄是: 7
例2 所有的局部变量都需要初始化吗?所有的变量都需要初始化吗?
//以下实例中age变量没有初始化,所以在编译时会出错
package com.runoob.test;
public class Test{
public void pupAge(){
int age; //未初始化变量age,导致编译age=age+7时出错
age = age+7;
System.out.println("小狗的年龄是: "+age);
}
public static void main(String args []{
Test test = new Test();
test.pupAge();
}
}
// 运行时报错: Error:(8,15) java: 可能尚未初始化变量age
// 同一个类中可以声明不同类型的变量吗?比如两个public变量,3个private变量,有什么风险? 可以,见下文实例。
// 同一个脚本只能有一个类吗? 可以创建多个不同的类吗?
类变量(静态变量)
- 类变量也称为,在类中以static关键字声明,但必须在构造方法和语句块之外。
- 无论一个类创建了多少个对象,类只拥有类变量的一份拷贝
- 静态变量除了被声明为常量外很少使用。常量是指声明为public /private,final和static类型的变量,常量初始化后不可改变
- 静态变量储存在静态存储区,经常被声明为常量,很少单独使用static声明变量
- 静态变量在程序开始时创建,在程序结束时销毁
- 与实例变量具有相似的可见性,但为了对类的使用者可见,大多数静态变量声明为public类型
- 默认值和实例变量相似,数值型变量默认值是0,布尔型默认值是false,引用类型默认值是null,变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化。
- 静态变量可以通过: ClassName.VariableName的方式访问
- 类变量被声明为public static final类型时,类变量名称一般建议使用大写字母。如果静态变量不是public和final类型,其命名方式与实例变量以及局部变量的命名方式一致。
实例
1 public class Employee{
2 // salary 是静态的私有变量
3 private static double salary;
4 // DEPARTMENT是一个常量
5 public static final String DEPARTMENT = ”开发人员“;
6 public static void main(String args[]{
7 salary = 10000;
8 System.out.println(DEPARTMENT+”平均工资:"+salary);
9 }
10 }
// 如果其它类想要访问该变量,可以这样访问: Employee.DEPARTMENT (这样的话,虽然有作用域,不同类里的变量也不应该用名字?)
Java中静态变量和实例变量的区别
- 静态变量属于类,该类不生产对象,通过类名就可以调用静态变量
- 实例变量属于该类的对象,必须产生该类对象,才能调用实例变量
在程序运行时的区别
- 实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量
- 静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了
总之,实例变量必须创建对象之后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
例如,对于下面的程序,无论创建多少个实例对象,永远都只分配了一个static int变量,并且每创建一个实例对象,这个static int就会加1;但是,每创建一个实例对象,就会分配一个random,即可能分配多个random,并且每个random的值都只自加了1次。

Java 读书笔记 (七) 变量的更多相关文章
- head first java读书笔记
head first java读书笔记 1. 基本信息 页数:689 阅读起止日期:20170104-20170215 2. 标签 Java入门 3. 价值 8分 4. 主题 使用面向对象的思路介绍J ...
- think in java 读书笔记 3 —— 数据报
目录 think in java 读书笔记 1 ——移位 think in java 读书笔记 2 —— 套接字 think in java 读书笔记 3 —— 数据报 概要 1. 数据报基本知识 2 ...
- think in java 读书笔记 2 —— 套接字
目录 think in java 读书笔记 1 ——移位 think in java 读书笔记 2 —— 套接字 think in java 读书笔记 3 —— 数据报 概要 1. 套接字基本知识 2 ...
- think in java 读书笔记 1 ——移位
目录 think in java 读书笔记 1 ——移位 think in java 读书笔记 2 —— 套接字 think in java 读书笔记 3 —— 数据报 在Think in Java中 ...
- Thinking In Java读书笔记--对象导论
Thinking In Java读书笔记--对象导论[对象]服务提供者==>将对象看做一个服务提供者[程序员分类][类创造者]/[客户端程序员] [访问控制存在的原因?][1]客户端程序员无法触 ...
- Java读书笔记1
Java逍遥游记读书笔记 前言 必须先来一句,这是入门级别,高手勿喷~ 写Android的时候总有一些语句不是很理解,其实大部分是Java的内容,所以想系统的学下Java. 这本书——<Java ...
- java读书笔记二
这是我的一些读书笔记: 我研究了一下面向对象: 面向对象符合人类看待事物的一般规律,对象的方法的实现细节是包装的,只有对象方法的实现者了解细节 我觉得面向过程是由过程.步骤.函数组成,过程是核心,面向 ...
- Effective Java读书笔记完结啦
Effective Java是一本经典的书, 很实用的Java进阶读物, 提供了各个方面的best practices. 最近终于做完了Effective Java的读书笔记, 发布出来与大家共享. ...
- Head First Java 读书笔记(完整)
第0章:学习方法建议 该如何学习Java? 1.慢慢来.理解的越多,就越不需要死记硬背.时常停下来思考. 2.勤作笔记,勤做习题. 3.动手编写程序并执行,把代码改到出错为止. 需要哪些环境和工具? ...
随机推荐
- Zeroc Ice开发环境搭建
搭建Ice环境 1. Linux(推荐,更接近真实生产环境) 2. Windows(方便学习开发) 下载安装包:https://zeroc.com/downloads (百度网盘链接:http ...
- Spring 学习笔记 Bean的作用域
在配置文件中定义Bean时,用户不但可以配置Bean的属性值以及相互之间的依赖关系,还可以定义Bean的作用域.作用域将对Bean的生命周期和创建方式产生影响.在低版本的Spring中,仅有两个作用域 ...
- 杭电ACM 1003题
一天AC一道题,思维跟上时代步伐.... import java.util.Scanner; public class Main { public static void main(String[] ...
- Fullpage参数说明
参数说明 $(document).ready(function() { $('#fullpage').fullpage({ //Navigation menu: false,//绑定菜单,设定的相关属 ...
- Oracle技术面试问题
这也许是你一直期待的文章,在关注这部分技术问题的同时,请务必阅读有关面试中有关个人的问题和解答.这里的回答并不是十分全面,这些问题可以通过多个 角度来进行解释,也许你不必在面试过程中给出完全详尽的答案 ...
- JVM内存详解-阅读笔记
- Centos 7安装python3
纯傻瓜式步骤,保证成功. 下面的操作,按照步骤来就可以了,不要在中途cd 到别的文件目录下,要想查看效果可以用 lsj加上对应的目录,不需要切换进去. 首先不管你当前在哪个目录下,输入以下命令. [r ...
- 8.Vue基础
环境搭建 node.js安装 https://nodejs.org/en/ cnpm npm install -g cnpm --registry=https://registry.npm.taoba ...
- JDK10都发布了,nio你了解多少?
前言 只有光头才能变强 回顾前面: 给女朋友讲解什么是代理模式 包装模式就是这么简单啦 本来我预想是先来回顾一下传统的IO模式的,将传统的IO模式的相关类理清楚(因为IO的类很多). 但是,发现在整理 ...
- TCP/IP Http 和Https socket之间的区别
TCP/IP Http 和Https socket之间的区别 TCP/IP是个协议组,它分为网络层,传输层和应用层, 在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议. ...