Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言 Java 技术具有卓越的通用性高效性平台移植性和安全性, 广泛应用于 PC 数据中心游戏控制台科学超级计算机移动电话和互联网, 同时拥有全球最大的开发者专业社群
给你 java 学习路线: html-CSS-js-jq-javase - 数据库 - jsp-servlet-Struts2-hibernate-mybatis-spring4-springmvc-ssh-ssm
一什么是变量: 就是内容可以改变的量, 它与常量相对应而这三大变量实际上是从变量的作用域来定义和划分的
1 类变量, 是归属类的变量, 它是通过在定义类的属性的时, 增加 static 修饰符, 所以又称为静态变量类变量不仅可以直接通过类名 + 点操作符 + 变量名来操作, 也可以通过类的实例 + 点操作符 + 变量来操作, 大多数情况下, 采用前者操作方式, 一来不能够有效地使用该变量, 二来能够表示该变量就是类变量
2 实例变量, 是归属于类的实例的变量, 又称为成员变量, 没有经过 static 修饰实例变量只能通过类名的实例 + 点操作符 + 变量来操作
不管是类变量, 还是实例变量, 都可以设置 Java 的访问修饰符, 若是需要公开操作, 你可以在这些变量前面添加 public 访问权限; 若是只限于所在类中操作, 你可以在这些变量前面添加 private 访问权限
3 局部变量就是在类中方法体里面所定义的变量, 不管是方法的形参, 还是方法体内所定义的变量都是局部变量局部变量的作用域是以其所在方法体的头大括号开始到尾大括号结束
4 变量名首写字母使用小写, 如果由多个单词组成, 从第 2 个单词开始的其他单词的首写字母使用大写如果局部变量的名字和成员变量的名字相同, 要想在该方法中使用成员变量, 必须使用关键字 this
列如:
小编推荐一个学 Java 的学习裙 六五零, 五五四, 六零七 , 无论你是大牛还是小白, 是想转行还是想入行都可以来了解一起进步一起学习! 裙内有开发工具, 很多干货和技术资料分享!
运行结果为:
第一个输出: 类体方法中定义的 name
第二个输出: 类体定义变量: name 成员变量调用必须用到 this 关键字
二成员变量和局部变量的区别
成员变量:
1 成员变量定义在类中, 在整个类中都可以被访问
2 成员变量随着对象的建立而建立, 随着对象的消失而消失, 存在于对象所在的堆内存中
3 成员变量有默认初始化值
局部变量:
1 局部变量只定义在局部范围内, 如: 函数内, 语句内等, 只在所属的区域有效
2 局部变量存在于栈内存中, 作用的范围结束, 变量空间会自动释放
3 局部变量没有默认初始化值
在使用变量时需要遵循的原则为: 就近原则
首先在局部范围找, 有就使用; 接着在成员位置找
成员变量和类变量的区别
小编推荐一个学 Java 的学习裙 六五零, 五五四, 六零七 , 无论你是大牛还是小白, 是想转行还是想入行都可以来了解一起进步一起学习! 裙内有开发工具, 很多干货和技术资料分享!
由 static 修饰的变量称为静态变量, 其实质上就是一个全局变量如果某个内容是被所有对象所共享, 那么该内容就应该用静态修饰; 没有被静态修饰的内容, 其实是属于对象的特殊描述
不同的对象的实例变量将被分配不同的内存空间, 如果类中的成员变量有类变量, 那么所有对象的这个类变量都分配给相同的一处内存, 改变其中一个对象的这个类变量会影响其他对象的这个类变量, 也就是说对象共享类变量
- [java] view plain copy print?
- class MyAdd {
- int count = 0; // 成员变量计数器
- static int sum = 0; // 静态变量计数器
- String name;
- MyAdd(String name){
- this.name = name;
- }
- public void myAddMethod() {
- count++;
- System.out.println(name+"调用成员变量后的值:"+count);
- }
- public void staticAddMethod() {
- sum++;
- System.out.println(name+"调用类后变量的值:"+sum);
- }
- }
- public class TestThis {
- public static void main(String[] args) {
- MyAdd add1 = new MyAdd("add1");
- MyAdd add2 = new MyAdd("add2");
- add1.myAddMethod();
- add2.myAddMethod();
- add1.myAddMethod();
- add1.staticAddMethod();
- add2.staticAddMethod();
- add1.staticAddMethod();
- }
- }
- class MyAdd {
输出结果:
小编推荐一个学 Java 的学习裙 六五零, 五五四, 六零七 , 无论你是大牛还是小白, 是想转行还是想入行都可以来了解一起进步一起学习! 裙内有开发工具, 很多干货和技术资料分享!
成员变量和类变量的区别:
1 两个变量的生命周期不同
成员变量随着对象的创建而存在, 随着对象的回收而释放
静态变量随着类的加载而存在, 随着类的消失而消失
2 调用方式不同
成员变量只能被对象调用
静态变量可以被对象调用, 还可以被类名调用
3 别名不同
成员变量也称为实例变量
静态变量也称为类变量
4 数据存储位置不同
成员变量存储在堆内存的对象中, 所以也叫对象的特有数据
静态变量数据存储在方法区 (共享数据区) 的静态区, 所以也叫对象的共享数据
static: 关键字, 是一个修饰符, 用于修饰成员(成员变量和成员函数)
特点:
1 想要实现对象中的共性数据的对象共享可以将这个数据进行静态修饰
2 被静态修饰的成员, 可以直接被类名所调用也就是说, 静态的成员多了一种调用方式类名. 静态方式
3 静态随着类的加载而加载而且优先于对象存在
弊端:
1 有些数据是对象特有的数据, 是不可以被静态修饰的因为那样的话, 特有数据会变成对象的共享数据这样对事物的描述就出了问题所以, 在定义静态时, 必须要明确, 这个数据是否是被对象所共享的
2 静态方法只能访问静态成员, 不可以访问非静态成员
因为静态方法加载时, 优先于对象存在, 所以没有办法访问对象中的成员
3 静态方法中不能使用 this,super 关键字
因为 this 代表对象, 而静态在时, 有可能没有对象, 所以 this 无法使用
什么时候定义静态成员呢? 或者说: 定义成员时, 到底需不需要被静态修饰呢?
成员分两种:
1 成员变量(数据共享时静态化)
该成员变量的数据是否是所有对象都一样:
如果是, 那么该变量需要被静态修饰, 因为是共享的数据
如果不是, 那么就说这是对象的特有数据, 要存储到对象中
2 成员函数(方法中没有调用特有数据时就定义成静态)
如果判断成员函数是否需要被静态修饰呢?
只要参考, 该函数内是否访问了对象中的特有数据:
如果有访问特有数据, 那方法不能被静态修饰
如果没有访问过特有数据, 那么这个方法需要被静态修饰
成员变量和静态变量的区别:
1 成员变量所属于对象所以也称为实例变量
静态变量所属于类所以也称为类变量
2 成员变量存在于堆内存中
静态变量存在于方法区中
3 成员变量随着对象创建而存在随着对象被回收而消失
静态变量随着类的加载而存在随着类的消失而消失
4 成员变量只能被对象所调用
静态变量可以被对象调用, 也可以被类名调用
所以, 成员变量可以称为对象的特有数据, 静态变量称为对象的共享数据
来源: http://www.jianshu.com/p/9a1b64c197aa