一次搞懂java变量的修饰及属性

//网络搜集整理,来源不明。

java局部变量与成员变量:

在Java中,局部变量必须初始化;成员变量可以不用初始化,系统自动初始化。
class A { int a;//成员变量 public static void main(String[] args) { int b;//局部变量 } }  
区别:
1.成员变量在类中,局部变量在方法中       
2.声明成员变量时可以不初始化(被final修饰且没有static的必须显式赋值),而局部变量必须手动初始化    3.成员变量可以被public,protect,private,static等修饰符修饰,而局部变量不能被控制修饰符及static修饰;两者都可 以定义成final型
4.成员变量存储在堆,局部变量存储在栈
5.存在时间不同       

类变量、实例变量、局部变量
类变量是类中独立于方法之外的变量,用static 修饰。
实例变量也是类中独立于方法之外的变量,不过没有static修饰。
局部变量是类的方法中的变量。
看下面的伪代码说明:
Java代码  收藏代码
  1. public class Variable{  
  2.   
  3.      static int allClicks=0;//类变量  
  4.   
  5.      String str="hello world";//实例变量  
  6.   
  7.      public void method(){  
  8.   
  9.         int i =0;//局部变量  
  10.   
  11.      }  
  12.   
  13. }  

实例变量也称为:“域”,“成员变量”,在实体类或数据类中被称为“属性”或“字段”。当实例变量可以改变时,被称为对象的状态。
final用于常量的声明,规范要求常量的变量名是大写的。
statci 在java 里面用于对类方法和属性进行修饰,其作用是什么呢?
有两种情况是non-static无法做到的,这时你就要使用statice。
第一种:你希望不论产生了多少个对象,或不存在 任何对象的情形下,那些特定数据的存储空间都只有一份; 

第二种:你希望某个函数不要和class object绑在一起。即使没有产生任何object,外界还是可以调用其static函数,或是取用其static data。




java什么时候使用private public protect static

<span style="font-family: SimHei; font-size: 18px;">一.Java访问权限饰词(access specifiers) 

Java有public、protect、friendly、private四种访问权限,并且这四访问权限的访问范围越来越小。 

1. friendly 

1) 果一个class内的数据成员或方法没有任何权限饰词,那么它的缺省访问权限就是friendly。同一个package内的其它所有classes都可以访问friendly成员,但对package以外的classes则形同private。 

2)对于同一个文件夹下的、没有用package的classes,Java会自动将这些classes初见为隶属于该目录的default package,可以相互调用class中的friendly成员。如以下两个class分别在同一个文件夹的两个文件中,虽然没有引入package, 但隶属于相同的default package。 

class Sundae{ 
//以下两个方法缺省为friendly 
Sundae(){} 
Void f() {System.out.println(“Sundae.f()”); 
} 
public class IceCream{ 
public static void main(String[] args){ 
Sundae x = new Sundae(); 
x.f(); 
} 
} 
2. public:可以被任何class调用 

3. private:private成员只能在成员所属的class内被调用,如: 

class Sundae{ 
private Sundae(){}//只能在Sundae class中被调用 
Sundae(int i) {} 
static Sundae makASundae() { 
return new Sundae(); 
} 
} 
public class IceCream{ 
public static void main(String[] args){ 
// Sundae class中构造函数Sundae()是private, 
// 所以不能用它进行初始化 
//Sundae x = new Sundae(); 
Sundae y = new Sundae(1);//Sundae(int)是friendly,可以在此调用 
Sundae z = Sundae.makASundae(); 
} 
} 
4. protected:具有friendly访问权限的同时,又能被subclass(当然包括子孙类,即子类的子类)所访问。即,既能被同一package中的classes访问,又能被protected成员所在class的subclass访问。 

二.Class的访问权限 

1.Class同样具有public、protect、friendly、private四种访问访问权限: 

1)public:在任何地方都可被使用 

2)protect、private:除了它自己,没有任何class可以使用,所以class不能是 

protected或private(inner class除外) 

3) friendly:同一个package中的classes能用 

2. 如何调用构造函数被声明为private的class 

1) 用static函数 

2) 用Singteton模式 

class Soup{ 
private Soup(){} 
//(1)静态函数方法 
public static Soup makeSout(){ 
return new Soup(); 
} 
//(2)The "Singleton" pattern: 

private static Soup ps1 = new Soup(); 
public static Soup access(){ 
return ps1; 
} 
public void f(String msg){ 
System.out.println("f(" + msg + ")"); 
} 
} 
public class Lunch{ 
public static void main(String[] args){ 
//Soup priv1 = new Soup();编译错误 
Soup priv2 = Soup.makeSout(); 
Soup priv3 = Soup.access(); 
priv2.f("priv2"); 
priv3.f("priv3"); 
}</span>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值