懵逼树上懵逼果,懵逼树下你和我

第二题

定义类中成员变量时不可能用到的修饰是()

A final
B void
C protected
D static

一看到这道题,有点慌了,直接选c,很显然,我又错了,难题嘛不应该选c吗

于是我又开始了我的百度生涯

成员变量

我们来研究一个事物:

属性:外在特征;例如人的身高,体重

行为:能够做什么;例如人有说话,打球等行为。

而在Java语言中,最基本的单位是类,类就是用来体现事物的。

用类class来描述事物也是如此:

属性:对应类中的成员变量

行为:对应类中的成员函数

定义类其实就是在定义类中的成员(成员变量和成员函数)

拓展:类是一个抽象的概念,而对象就是类的具体的存在,体现。例如:生活中的汽车,可以看做一个类,我们称之为汽车类,每一台车都有颜色和轮胎数(可以定义为属性,即成员变量),每一台车都可以跑(即车的行为,对应类总的成员函数),我们把汽车实例化一下,即会产生一个对象,比如奔驰、宝马(BMW)。

public class Car {private String color; // 定义汽车颜色,成员变量private int numLuntai; // 定义汽车轮胎数,成员变量public Car(String color, int numLuntai){super();this.color = color;this.numLuntai = numLuntai;}public void run() {System.out.println(this.numLuntai+ "个轮子的" +this.color + "轿车在马路上行驶着");}
}public class ClassTest {public static void main(String[] args){Car bmw = new Car("黑色", 4);      // 创建一个轿车对象,名字为bmwbmw.run();}
}

其中color和numLuntai就称为Car 类的成员变量,这个属性能够用来描述一个类的属性,否则,它就应该定义为局部变量

例如一个for循环中的i即是局部变量。

 for(int i = 0; i < args.length; i++){......}

又例如写在成员方法中变量是局部变量。

publicclass Car {private String color; // 定义汽车颜色,成员变量private int numLuntai; // 定义汽车轮胎数,成员变量public Car(String color, int numLuntai){super();this.color = color;this.numLuntai = numLuntai;}
public void run() {String carName=”宝马牌”;    //这个就是局部变量System.out.println(this.numLuntai+ "个轮子的" +this.color + carName+"轿车在马路上行驶着");}
}
publicclass ClassTest {public static void main(String[] args){Car bmw = new Car("黑色", 4);      // 创建一个轿车对象,名字为bmwbmw.run();}
}

成员变量和局部变量的区别

成员变量:

①成员变量定义在类中,在整个类中都可以被访问。

②成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。

③成员变量有默认初始化值。

局部变量:

①局部变量只定义在局部范围内,如:函数内,语句内等,只在所属的区域有效。

②局部变量存在于栈内存中,作用的范围结束,变量空间会自动释放。

③局部变量没有默认初始化值

在使用变量时需要遵循的原则为:就近原则

首先在局部范围找,有就使用;接着在成员位置找。

静态变量

由static修饰的变量称为静态变量,其实质上就是一个全局变量。如果某个内容是被所有对象所共享,那么该内容就应该用静态修饰;没有被静态修饰的内容,其实是属于对象的特殊描述。

class Person{String name; //成员变量,实例变量static String country = "CN"; //静态变量,类变量,所有对象共享的属性用static修饰public void show(){System. out.println(country + ":" + name);//等效语句:System.out.println(Person.country+ ":" + this.name);}
}
class StaticDemo{public static void main(String[]args){Personp = new Person();System. out.println(p.country);//可以用类名直接调用System. out.println(Person.country);}
} 

成员变量和静态变量的区别

1、两个变量的生命周期不同

成员变量随着对象的创建而存在,随着对象被回收而释放。

静态变量随着类的加载而存在,随着类的消失而消失。

2、调用方式不同

成员变量只能被对象调用。

静态变量可以被对象调用,还可以被类名调用。

3、别名不同

成员变量也称为实例变量。

静态变量也称为类变量。

4、数据存储位置不同

成员变量存储在堆内存的对象中,所以也叫对象的特有数据。

静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。

列表对比:

成员变量、局部变量、静态变量的区别

  成员变量 局部变量 静态变量
定义位置 类中,方法外 方法中,方法的形式参数 类中,方法外
初始化值 有默认初始化值 无先定义,赋值后才能使用 有默认初始化值
调用方式 对象调用   对象调用,类名调用
存储位置 方法区
生命周期 与对象共存亡 与方法共存亡 与类共存亡
别名 实例变量   类变量

小结:

尽管三者的本质都是变量,可是使用时却有相当大的区别,稍不留神就可能陷入陷阱。且先记住:在一个类中,如果一个变量能够用来描述一个类的属性,那就定义为成员变量,否则,它就应该定义为局部变量。而如果一个变量在全局中都能使用(某个内容是被所有对象所共享),那么我们就可以把这个变量用static来修饰,即为静态变量。

void修饰方法   static修饰静态变量 protect修饰类 final修饰的是常量

选B

文章仅个人理解,来在各大网站。如有不合理之处,欢迎吐槽。

阅读目录(置顶)(长期更新计算机领域知识)https://blog.csdn.net/weixin_43392489/article/details/102380691

阅读目录(置顶)(长期更新计算机领域知识)https://blog.csdn.net/weixin_43392489/article/details/102380882

阅读目录(置顶)(长期科技领域知识)https://blog.csdn.net/weixin_43392489/article/details/102600114

歌谣带你看java面试题 https://blog.csdn.net/weixin_43392489/article/details/102675944

java面试题2 牛客:定义类中成员变量时不可能用到的修饰是相关推荐

  1. java面试题29 牛客 以下关于集合类ArrayList、LinkedList、HashMap描述

    java面试题29 牛客 以下关于集合类ArrayList.LinkedList.HashMap描述错误的是() A HashMap实现Map接口,它允许任何类型的键和值对象,并允许将null用作键或 ...

  2. Java面试题17 牛客 下面哪个选项正确创建socket连接?

    Java面试题17 牛客 下面哪个选项正确创建socket连接? Socket s = new Socket(8080); Socket s = new Socket("192.168.1. ...

  3. Java面试题16 牛客 以下java程序代码,执行后的结果是()

    Java面试题16 牛客 以下java程序代码,执行后的结果是() 1 2 3 4 5 6 7 8 9 10 public class Test {     public static void ma ...

  4. java面试题28 牛客 下面有关java classloader说法错误的是?

    java面试题28 牛客 下面有关java classloader说法错误的是? A Java默认提供的三个ClassLoader是BootStrap ClassLoader,Extension Cl ...

  5. Java面试题 22 牛客 Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持

    Java面试题 22 牛客 Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持,下面关于Java反射的描述,哪些是错误的:(          ) A Java反射主要涉及的类如C ...

  6. java面试题23 牛客ArrayLists和LinkedList的区别,下述说法正确的有?

    java面试题23 牛客ArrayLists和LinkedList的区别,下述说法正确的有? A ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. B 对于随 ...

  7. Java面试题18 牛客 假定Base b = new Derived();

    Java面试题18 牛客 假定Base b = new Derived(); 调用执行b.methodOne()后,输出结果是什么? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  8. Java面试题15牛客 以下关于Integer与int的区别错误的是

    Java面试题15牛客 以下关于Integer与int的区别错误的是 A int是java提供的8种原始数据类型之一 B Integer是java为int提供的封装类 C int的默认值为0 D In ...

  9. C++类中成员变量的初始化有两种方式

    C++类中成员变量的初始化有两种方式: 构造函数初始化列表和构造函数体内赋值.下面看看两种方式有何不同. 成员变量初始化的顺序是按照在那种定义的顺序. 1.内部数据类型(char,int--指针等) ...

最新文章

  1. 陶哲轩实分析 例 1.2.12 洛必达法则使用注意事项
  2. sqlserver2012分页注意事项
  3. ORB-SLAM2中生成金字塔提取FAST角点和计算BRIEF描述子
  4. 仿照支付宝账单界面--listview分组显示 用来做!发!财树充值交易明细
  5. html图片宽度高度等比例绽放,css图片自动绽放大小,左右,上下居中
  6. GatewayMetricsFilter网关度量过滤器(服务监控)
  7. 经典面试题(26):以下代码将输出的结果是什么?
  8. Spark学习-SparkSQL--01-SparkSQL CLI
  9. DbUtils: JDBC Utility Component Examples翻译
  10. CocosCreator动画背景移动及其小鸟重力加速度坠落
  11. 加密算法 java
  12. 拓端tecdat|Python随机波动率(SV)模型对标普500指数时间序列波动性预测
  13. mysql用root账户建立用户和赋予权限
  14. smobiler中实现页面切换_使用Smobiler实现类似美团的界面
  15. termux使用记录
  16. 手工扒网页模板简单流程
  17. Can DBC文件翻译
  18. 服务器邮件删除了怎么恢复,Exchange邮件误删除不用急 DPM轻松恢复
  19. 9步搞定:用迅雷等工具下载百度网盘资源
  20. R语言生存分析:Cox回归

热门文章

  1. PS网页设计教程XXIX——如何在PS中设计一个画廊布局
  2. eclipse dorado plugin
  3. Android游戏开发基础part3--Paint 画笔
  4. python pip安装pyinstaller报错_pip install pyinstaller (安装过程报错解决)
  5. android项目编译命令行,命令行编译Android项目
  6. 盘点18个免费的WordPress主题后台选项开发框架
  7. win10 解决升级 WordPress 时提示”另一更新正在进行”
  8. 【机器视觉学习笔记】最近邻插值实现图片任意角度旋转(C++)
  9. 移植mysql到嵌入式ARM平台
  10. Exynos4412 Uboot 移植(六)—— 相关知识补充