精华内容
下载资源
问答
  • java基础-static修饰局部变量

    千次阅读 2020-01-19 11:33:56
    7.现在有如下一段代码 public class Test { public int aMethod() { static int i=0; i++; retu...

    7.现在有如下一段代码 
                 public class Test {  
                        public int aMethod() { 
                               static int i=0; 
                               i++; 
                               return i; 
                        } 
                        public static void main(String args[]) { 
                               Test test = new Test(); 
                               test.aMethod(); 
                               int j = test.aMethod(); 
                               System.out.println(j); 
                        } 
                 } 
                 将产生哪种结果?

    A. Compilation will fail

    B. Compilation will succeed and the program will print“0”

    C. Compilation will succeed and the program will print“1”

    D. Compilation will succeed and the program will print“2”

     

     

    java基础面试题-中级20题答案解析版

    正确答案是:A

    Compilation will fail    编译将失败

    报错信息:Illegal modifier for parameter i; only final is permitted

    报错信息:参数i的修饰符非法;只允许final

    原因:报错,无论是普通局部方法还是静态局部方法,内部的局部变量都不能有修饰符

    展开全文
  • 变量安照位置分 : 属性(成员变量) vs 局部变量 属性(成员变量) : 实例变量 vs 类变量(static修饰的属性) static可以修饰: 属性,方法,代码块,内部类 static修饰属性(类变量): 同一个类创建的多个对象...

    变量安照位置分 : 属性(成员变量) vs 局部变量

    属性(成员变量) : 实例变量 vs 类变量(static修饰的属性)

    static可以修饰: 属性,方法,代码块,内部类

    static修饰属性(类变量):

    • 同一个类创建的多个对象,每个对象单独拥有一份实例变量,共同拥有一份类变量。
    • 同一个类多个对象中某个对象对类变量进行修改后,其它的对象看到的是修改后的值。
    • 类变量是随着类的加载而加载的(类加载加载一次)。实例变量是随着对象的创建而加载的。
    • 调用类变量的方式 : 类名.类变量名 对象名.类变量

    static修饰方法(静态方法):

    • 静态方法是随着类的加载而加载的。
    • 静态方法中不能调用实例变量和非静态方法 (原因 :因为加载时机不同。类加载的时候对象还没有呢)
    • 非静态方法中可以调用类变量和静态方法
    • 静态方法中不能使用thissuper关键字

    static修饰属性 :

    • 多个对象需共同拥有该属性时那么使用static修饰
    • 常量 : public static final double PI = 3.14159265358979323846;

    static修饰方法:

    • 工具类中的方法都是静态方法
    • 有时为了调用类变量方法也会定义成静态方法。
    class Person{
    	String name;
    	//实例变量
    	int age;
    	//类变量
    	static String country;
    	
    	/*
    	 * 非静态方法 : 非静态方法中可以调用类变量和静态方法
    	 */
    	public void info(){
    		System.out.println("name=" + name + " age=" + age + " country:" + country);
    		show();
    	}
    	
    	/*
    	 * 静态方法:
    	 * 1.静态方法中不能调用实例变量和非静态方法 (原因 :因为加载时机不同。类加载的时候对象还没有呢)
    	 */
    	public static void show(){
    //		System.out.println("static show " + name);
    //		info();
    	}
    }
    public class StaticTest {
    
    	public static void main(String[] args) {
    		
    		Person.country = "中国";
    		
    		Person p1 = new Person();
    		p1.name = "强东";
    		p1.age = 46;
    		p1.country = "china";
    		
    		Person p2 = new Person();
    		p2.name = "马云";
    		p2.age = 48;
    //		p2.country = "中国";
    		
    		Person p3 = new Person();
    		p3.name = "化腾";
    		p3.age = 38;
    //		p3.country = "中国";
    		
    		p1.info();
    		p2.info();
    		p3.info();
    		
    		System.out.println("--------------------------------------------");
    		//类名.静态方法名
    		Person.show();
    	}
    	
    	public void info(){
    		
    	}
    }
    

    执行结果:
    在这里插入图片描述

    使用示例:

    /*
     * 1.需求 :统计Computer创建对象的个数
     */
    class Computer{
    	static int count = 0;
    	
    	public Computer(){
    		count++;
    	}
    	
    	public void show(){
    		System.out.println("count=" + count);
    	}
    }
    
    /*
     * 需求: 让id实现自增
     */
    class Employee{
    	int id;
    	String name;
    	int age;
    	static int num = 0;
    	
    	public Employee(String name,int age){
    		this.name = name;
    		this.age  = age;
    		id = ++num;
    	}
    	
    	public void show(){
    		System.out.println("id= " + id + " name=" + name + " age=" + age);
    	}
    }
    public class StaticTest2 {
    
    	public static void main(String[] args) {
    		new Computer();
    		new Computer();
    		new Computer();
    		new Computer();
    		Computer c = new Computer();
    		c.show();
    		
    		System.out.println("----------------------------");
    		
    		Employee e = new Employee("aa", 18);
    		Employee e2 = new Employee("cc", 28);
    		Employee e3 = new Employee("dd", 38);
    		Employee e4 = new Employee("ff", 18);
    		
    		e.show();
    		e2.show();
    		e3.show();
    		e4.show();
    	}
    }
    

    执行结果:
    在这里插入图片描述

    展开全文
  • Javastatic为什么不能修饰局部变量?

    万次阅读 2015-09-15 20:03:28
    Javastatic为什么不能修饰局部变量? 问这样问题的人显然是学过c/c++的,因为在c/c++中static是可以修饰局部变量的 如果你对这个问题百思不得其解,怎么都想不明白,你还是不要想了,因为没有什么为什么。 不能...

    Java中static为什么不能修饰局部变量?


    问这样问题的人显然是学过c/c++的,因为在c/c++中static是可以修饰局部变量的

    如果你对这个问题百思不得其解,怎么都想不明白,你还是不要想了,因为没有什么为什么。

    不能就是不能,人为规定的规则罢了。

    如果你非要知道个为什么?

    我不介意在这误人子弟一下,,,,,,

     

    首先让我们来看一下c语言中static的作用

    1.    在函数外模块内表示此变量只能被本模块访问

    2.    在函数内表示只能被此函数访问并且为此变量分配的空间不在栈上

    3.    在函数前修饰函数做用同1

     

    在来看下在c++中static的作用,c++是c的强化版,static在c++中基本与在c中相同,我们就来看下不同的

    1.    在类中修饰成员变量说明此变量是属于类的

    2.    在类中修饰成员函数说明调用此函数不需要this指针(即不需要先实例化对象),此函数只能访问属于类的变量

     

    有如下c++代码

    class A{

            static int a;

            void fun(){

                     ++a;

    }

    };

    int A::a=0;


    class B{

            void fun(){

                     static int b=0;

                     ++b;

    }

    };

    A中的a是属于类的而B中的b则是属于方法的,B完全可以这样定义来实现同一目的

    class C{

            int c;

            void fun(){

                     ++c;

    }

    }

    在c语言中如果想让一个变量每次在函数执行时拥有上一次函数执行后的值,我们会有以下方法

    1.    把此变量定义为全局变量

    int a;

    void fun(){++a;}

    void main()

    {

            a=1;

            fun();

    }


    2.把此变量定义为函数内static修饰的局部变量

    void fun()

    {

            static int a=0;

            ++a;

    }

    void main()

    {

            fun();

    }

    3.把每次的值返回下次调用时再传入

    int fun(int a)

    {

            return ++a;

    }

    void main()

    {

            int a=0;

            a=fun(a);

    }

    4.通过指针去引用此变量

    void fun(int *p)

    {

            ++(*p);

    }

    void main()

    {

            int a=0;

            fun(&a);

    }

    方法1,2是我们常用的方法,但是方法1会增加模块与模块间的耦合度

    所以我们一般用方法2,因为方法2可以减少模块间的耦合度增加模块内的内聚性

    类B用的是方法1,而类C用的是方法2

     

    在B中完全可以把fun()放到类的外边去,不必成为它的成员函数,因为fun()和B有半毛钱的关系?没有,,,,,,

    它和c中的一个普通函数没有什么区别


    面向对象的语言中类是封装属性和操作属性的方法的一种抽象机制,通过类的封装来实现模块内的高内聚与模块间的低耦合,而B中的方法fun()有操作过B的属性?没有,这不符合面向对象的思想

     

    c++之所以会支持局部变量可以被static修饰可能是为了兼容c语言,这也是人们会说c++不是纯面向对象的原因

    在完全面向对象的Java中为什么要去兼容一个面向过程的c????

     

    为什么要把一个java的类定义成

    class D{

            publicvoid fun()

    {

            static int d=0;

            ++d;

    }

    }?

    有什么理由?

     

     

     

     

     

    展开全文
  • Java中final修饰局部变量的问题

    千次阅读 2019-08-15 18:00:26
    Java中final修饰局部变量的问题 修饰数据类型 变化 基本类型 基本类型的值不能发生改变 引用类型 引用类型的地址值不能发生改变,但是,该对象的堆内存的值是可以改变的 所修饰部分为基本数据类型时 ...

    Java中final修饰局部变量的问题

    修饰数据类型变化
    基本类型基本类型的值不能发生改变
    引用类型引用类型的地址值不能发生改变,但是,该对象的堆内存的值是可以改变的

    所修饰部分为基本数据类型时

    class TestDemo {
    	public static void main(String[] args) {
    		//局部变量是基本数据类型
    		int n = 10;
    		n = 100;
    		System.out.println(n);//结果为100
    		
    		//无法为最终变量x分配值
    		final int x = 10;
    		//x = 100;//被final修饰后的变量就不可以修改
    		System.out.println(x);
    	}
    }

    所修饰部分为引用类型数据

    class TestA {
    	int number = 10;
    }
    class TestDemo {
    	public static void main(String[] args) {
    		
    		final TestA a = new TestA();//final修饰引用类型
    		a.number = 100;//值能改变
    		System.out.println(a.number);//输出结果为:100
    		
    		/*
    		ss = new TestA();//重新分配内存空间
    		//无法再为最终变量ss分配值
    		*/
    		
    	}
    }
    展开全文
  • java 中 Cannot make a static reference to the non-static 解决方法 今天敲代码的时候遇到了这个问题,大体这个问题可以简化成这样; public class Test1 {public String get(){return "1...
  • static不能修饰局部变量理解

    千次阅读 2013-05-15 23:32:35
    java中,首先,被static修饰,表示是随着jvm加载类的时候就加载了。...理解二:假如可以用static修饰局部变量,就表示此变量在所在类被jvm加载的时候就初始化加载了。但是方法和对象相关的,而方法只有在
  • 其实这些变量都之所以叫局部变量,其作用域也只限于声明它的方法体内。在方法被调用时,这些局部变量获得内存空间,到方法执行结束时,他们所占据的内存空间就被释放。用完就释放。而static,public是用来声明全局...
  • Java 变量类型 1.静态变量(类变量、全局变量,无论一个类创建了多少个对象,类只拥有类变量的一份拷贝) 静态变量储存在静态存储区。经常被声明为常量,很少单独使用static声明变量 ...3.局部变量(访问
  • Static修饰成员变量

    千次阅读 2015-08-04 21:29:20
    Static修饰一个变量:表示这个变量是类范围内的属性,叫类变量;所有类对象共享一个这样的属性。也即是说创建一个对象的时候不会创建用static修饰变量。语法如下 访问控制符 + static + 变量类型 +变量名;使用...
  • java中的局部变量不能用private修饰

    千次阅读 2019-09-05 16:32:19
    java中的局部变量不能用private修饰
  • 如果此时,我们需要在匿名内部类中外部方法中的局部变量,我们必须手动对将这个局部变量用final关键字修饰(在JDK1.8之后不再需要显示的声明为final,因为这种情况下这个局部变量默认是final的,...
  • 类变量、实例变量和局部变量以及final所修饰的变量的默认初始值问题 问题: (1)这里我们来探讨一下成员变量和局部变量的默认初始值问题,当成员变量和局部变量在不进行初始化赋值的前提下,将它们进行...
  • 面试题:final修饰局部变量的问题 基本类型:基本类型的值不能发生改变。 引用类型:引用类型的地址值不能发生改变,但是,该对象的堆内存的值是可以改变的。 */ class Student { int age = 10; } class FinalTest...
  • static修饰的变量为静态变量,静态变量属于整个类,而局部变量属于方法,所以static不能修饰局部变量,所以static也不能存在于方法。 如下: public static void main(String args[]){ static int a=0; //编译...
  • final修饰的变量就是常量?final修饰局部变量在栈还是堆还是常量池中?
  • java中的变量类型有: 1. 类变量:独立于方法之外的变量,用 static 修饰。 2.实例变量:独立于方法之外的变量,不过没有 static 修饰。 3.局部变量:类的方法中的变量。...访问修饰符不能用于局部变量...
  • 2 final既可修饰成员变量,也可修饰局部变量。二 final修饰成员变量 1 final修饰成员变量时,必须由程序员显示地指定初始值。 2 类变量:必须在静态初始化块中指定初始值或声明该变量时指定初始值,而且只能在两个...
  • java中成员变量和成员方法的修饰符有以下几种:可以被 public static protected default final 修饰局部变量只能被 default 和final修饰
  • 新手小白学 JAVA 方法 局部变量 成员变量

    万次阅读 多人点赞 2021-04-01 23:59:30
    2.2 局部变量 位置:定义在方法里或者局部代码块中 注意:必须手动初始化来分配内存.如:int i = 5;或者int i; i = 5; 作用域:也就是方法里或者局部代码块中,方法运行完内存就释放了 2.3 成员变量 位置:定义在类里方法...
  • java中的全局变量、局部变量static

    千次阅读 2018-07-15 16:34:03
    java中的变量类型有:类变量:独立于方法之外的变量,用 static 修饰。实例变量:独立于方法之外的变量,不过没有 static 修饰局部变量:类的方法中的变量。比如:public class Variable{ static int allClicks=0;...
  • **static ** 可用于修饰成员变量,被static修饰的 成员变量 称 静态变量,也称 类变量 功能:类变量在内存中只存一份,作为该类所有对象的共享变量。在程序运行时,系统只为类变量分配一次内存,只进行一次的初始化...
  • member variable(成员变量),是...local variable (局部变量),是类中的方法里的变量。 class variable(类变量),是类中独立于方法之外的变量,有static修饰。 被static修饰的成员变量、方法、代码块不依赖特定
  • java中的局部变量和全局变量

    万次阅读 多人点赞 2017-08-18 15:09:10
    Java变量 java中主要有如下几种类型的变量: ...一、局部变量 ...只在特定的过程或函数中可以...局部变量可以和全局变量重名,但是局部变量会屏蔽全局变量。在函数内引用这个变量时,会用到同名的局部变量,而不会
  • static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 99,626
精华内容 39,850
关键字:

javastatic修饰局部变量

java 订阅