疯狂java学习笔记之面向对象(二) - 成员变量与局部变量
Java变量按其作用域可分为:成员变量和局部变量。注意:在Java中是没有全局变量这个概念的
一、成员变量:
成员变量是在类中定义的变量,具体可分为类变量与实例变量--有无static修饰
实例变量的特点:
没有创建实例前是不会分配内存空间的;
从有实例开始,实例变量就存在了;
实例被销毁,实例变量就不存在了;
0~N个实例变量,程序每创建一个实例,系统就为该实例分配一块内存
类变量的特点:
从有类开始,类变量就存在了,一个JVM中类信息只要一个即可。
每个JVM最多只加载一个类一次,系统就为该类分配一块内存.(加载类或创建对象时即会加载类变量)
成员变量规则:
系统会为成员变量执行默认的初始化: 基本类型初始值为0、0.0、\u00000、false;引用类型初始值为null
注意点:当程序通过实例来访问类变量的时候,由于类变量本身不属于实例因此底层实际上委托为通过类来访问。
class Var{
String name;
int age; //实例变量
static int num;//类变量
}
public class TestVar{
public static void main(String[] args){
//Var v; //编译时报v变量未被初始化
//Var v = null; //当v为null时去调用num则会报空指针异常
Var v = new Var() ;//实例变量必须由程序员初始化
System.out.println(v.num);
Var v2 = new Var();
v.age = 11;
System.out.println(v2.age);
v.num = 99;
System.out.println(v.num); //→ System.out.println(Var.num); 当程序通过实例来访问类变量时实际上都是通过类来访问的
}
}
二、局部变量:
局部变量是保存在相应的方法栈中的。
局部变量规则:
局部变量必须由程序员来赋值,系统不会对局部变量进行默认初始化
局部变量绝对不允许同名。一个方法内方法内变量名不能与方法中代码块的变量名相同,但两个代码块中允许出现同名的局部变量
局部变量只在代码块内有效,出了代码块则无效,形参则在当前方法内都是有效的
public class LocalVar {
public void info(String name){
String s = "haha";
//String name = "haha"; 编译报错 方法内参数名不能与形参相同
{
//String s = "test"; //同一个方法中,方法块中的变量名不能与方法中的变量相同
String s1 = "test";
System.out.println(s1);
}
{
String s1 = "LocalTest";
System.out.println(s1);
}
}
public static void main(String[] args){
String s = "test"; //不同方法中,方法名是可以相同的 - 因为局部变量只在方法内有效
LocalVar v2 = new LocalVar();
v2.info("avv");
}
}
疯狂java学习笔记之面向对象(二) - 成员变量与局部变量的更多相关文章
- 疯狂java学习笔记之面向对象(八) - static和final
一.static: 1.static是一个标识符: - 有static修饰的成员表明该成员是属于类的; - 没有static修饰的成员表明该成员是属于实例/对象的. 2.static修饰的成员(Fie ...
- 疯狂java学习笔记之面向对象(五) - 封装、继承、多态
一.封装: 封装的概念: - 合理的隐藏:隐藏不想被外界操作的Field.方法.构造器 - 合理的暴露:一般就是希望给别人调用的方法 e.g:显示器(按键暴露出来操作,但实际的东西/细节方法被隐藏起来 ...
- 疯狂java学习笔记之面向对象(九) - 抽象和接口
一.抽象(abstract): 1.抽象类: 使用abstract修饰的类就是抽象类; 相比于普通类抽象类增加了支持抽象方法的功能,但也丢失了创建实例的功能(抽象类中不能创建实例),其他普通类有的抽象 ...
- 疯狂java学习笔记之面向对象(六) - 构造器重载、方法重载和方法重写
一.方法重载(Overload): Java允许同一个类中定义多个同名方法,只要形参不一样就可以,如果同一个类中包含了两个或两个以上方法名相同的方法,但形参列表不同,则被成为方法重载(两同一异). 同 ...
- 疯狂java学习笔记之面向对象(一) - 定义类、方法、构造器
Java面向对象 1.定义类 2.创建对象.调用方法 类和对象: 某一类对象的概念定义. 比如:人类 - 抽象出来的概念(不特指某个人) 对象 - 在类的概念下产生的一个实例,它就是一个对象了. ja ...
- 疯狂java学习笔记之面向对象(七) - super关键字
super有以下两大作用: 1.起限定作用:强制去访问父类的成员(Field.方法) 2.起调用作用:指定/显示调用父类的某个构造器 super调用规则: 1.子类构造器总会调用父类构造器一次,默认情 ...
- 疯狂java学习笔记之面向对象(四) - this关键字
Java中this关键字主要有以下两个方法: 1.this引用 - 可用于任何非static修饰的方法和构造器中,当this用于方法中时,它代表调用该方法的实例/对象;当this用于构造器中时,它代表 ...
- 疯狂java学习笔记之面向对象(三) - 方法所属性和值传递
方法的所属性: 从语法的角度来看:方法必须定义在类中 方法要么属于类本身(static修饰),要么属于实例 -- 到底是属于类还是属于对象? 有无static修饰 调用方法时:必须有主调对象(主语,调 ...
- Java学习笔记之---面向对象
Java学习笔记之---面向对象 (一)封装 (1)封装的优点 良好的封装能够减少耦合. 类内部的结构可以自由修改. 可以对成员变量进行更精确的控制. 隐藏信息,实现细节. (2)实现封装的步骤 1. ...
随机推荐
- 异常处理__try{}__except(EXCEPTION_EXECUTE_HANDLER){}
在一个函数中不能混合使用 try{}catch(CException *e){} 与 __try{}__except(EXCEPTION_EXECUTE_HANDLER){} 编译时报错 error ...
- [Android Pro] AAR and JAR
svn status svn log --limit 3 > RELEASE_NOTE.txt cat RELEASE_NOTE.txt pwd project_name_prefix=&quo ...
- 【翻译四】java-并发之线程暂停
Pausing Execution with Sleep Thread.sleep causes the current thread to suspend execution for a speci ...
- 《Spring 3.x 企业应用开发实战》目录
图书信息:陈雄华 林开雄 编著 ISBN 978-7-121-15213-9 概述: 第1章:对Spring框架进行宏观性的概述,力图使读者建立起对Spring整体性的认识. 第2章:通过一个简单的例 ...
- golang channel buffer
package mainimport ( "fmt" "time")func main() { // Case-1: no buffer //chanMessa ...
- <转>WCF中出现死锁或者超时
WCF回调中的死锁 一.服务器端死锁 对于如下服务: [ServiceContract(CallbackContract = typeof(INotify))] public class Downlo ...
- WCF学习笔记之消息交换模式
在WCF通信中,有三种消息交换模式,OneWay(单向模式), Request/Reponse(请求回复模式), Duplex(双工通信模式)这三种通信方式.下面对这三种消息交换模式进行讲解. 1. ...
- 第十二篇:SOUI的utilities模块为什么要用DLL编译?
SOUI相对于DuiEngine一个重要的变化就是很多模块变成了一个单独的DLL. 然后很多情况下用户可能希望整个产品就是一个EXE,原来DuiEngine提供了LIB编译模式,此时链接LIB模式的D ...
- the last lecture
2008.07.25,CMU教授Randy Pausch教授因癌症去世,仅47岁. 几年之前,当我看到Pausch先生最后一课的视频时,让我震撼. 转眼之间,7年过去了,这7年,让我成长了许多. 7年 ...
- Salesforce中所有常用类型字段的取值与赋值
Salesforce中所有常用字段类型的定义以及如何用代码进行取值和赋值: Field Type的定义: http://www.salesforce.com/us/developer/docs/api ...