java面试题2 牛客:定义类中成员变量时不可能用到的修饰是
懵逼树上懵逼果,懵逼树下你和我
第二题
定义类中成员变量时不可能用到的修饰是()
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 牛客:定义类中成员变量时不可能用到的修饰是相关推荐
- java面试题29 牛客 以下关于集合类ArrayList、LinkedList、HashMap描述
java面试题29 牛客 以下关于集合类ArrayList.LinkedList.HashMap描述错误的是() A HashMap实现Map接口,它允许任何类型的键和值对象,并允许将null用作键或 ...
- Java面试题17 牛客 下面哪个选项正确创建socket连接?
Java面试题17 牛客 下面哪个选项正确创建socket连接? Socket s = new Socket(8080); Socket s = new Socket("192.168.1. ...
- Java面试题16 牛客 以下java程序代码,执行后的结果是()
Java面试题16 牛客 以下java程序代码,执行后的结果是() 1 2 3 4 5 6 7 8 9 10 public class Test { public static void ma ...
- java面试题28 牛客 下面有关java classloader说法错误的是?
java面试题28 牛客 下面有关java classloader说法错误的是? A Java默认提供的三个ClassLoader是BootStrap ClassLoader,Extension Cl ...
- Java面试题 22 牛客 Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持
Java面试题 22 牛客 Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持,下面关于Java反射的描述,哪些是错误的:( ) A Java反射主要涉及的类如C ...
- java面试题23 牛客ArrayLists和LinkedList的区别,下述说法正确的有?
java面试题23 牛客ArrayLists和LinkedList的区别,下述说法正确的有? A ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. B 对于随 ...
- 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 ...
- Java面试题15牛客 以下关于Integer与int的区别错误的是
Java面试题15牛客 以下关于Integer与int的区别错误的是 A int是java提供的8种原始数据类型之一 B Integer是java为int提供的封装类 C int的默认值为0 D In ...
- C++类中成员变量的初始化有两种方式
C++类中成员变量的初始化有两种方式: 构造函数初始化列表和构造函数体内赋值.下面看看两种方式有何不同. 成员变量初始化的顺序是按照在那种定义的顺序. 1.内部数据类型(char,int--指针等) ...
最新文章
- 陶哲轩实分析 例 1.2.12 洛必达法则使用注意事项
- sqlserver2012分页注意事项
- ORB-SLAM2中生成金字塔提取FAST角点和计算BRIEF描述子
- 仿照支付宝账单界面--listview分组显示 用来做!发!财树充值交易明细
- html图片宽度高度等比例绽放,css图片自动绽放大小,左右,上下居中
- GatewayMetricsFilter网关度量过滤器(服务监控)
- 经典面试题(26):以下代码将输出的结果是什么?
- Spark学习-SparkSQL--01-SparkSQL CLI
- DbUtils: JDBC Utility Component Examples翻译
- CocosCreator动画背景移动及其小鸟重力加速度坠落
- 加密算法 java
- 拓端tecdat|Python随机波动率(SV)模型对标普500指数时间序列波动性预测
- mysql用root账户建立用户和赋予权限
- smobiler中实现页面切换_使用Smobiler实现类似美团的界面
- termux使用记录
- 手工扒网页模板简单流程
- Can DBC文件翻译
- 服务器邮件删除了怎么恢复,Exchange邮件误删除不用急 DPM轻松恢复
- 9步搞定:用迅雷等工具下载百度网盘资源
- R语言生存分析:Cox回归
热门文章
- PS网页设计教程XXIX——如何在PS中设计一个画廊布局
- eclipse dorado plugin
- Android游戏开发基础part3--Paint 画笔
- python pip安装pyinstaller报错_pip install pyinstaller (安装过程报错解决)
- android项目编译命令行,命令行编译Android项目
- 盘点18个免费的WordPress主题后台选项开发框架
- win10 解决升级 WordPress 时提示”另一更新正在进行”
- 【机器视觉学习笔记】最近邻插值实现图片任意角度旋转(C++)
- 移植mysql到嵌入式ARM平台
- Exynos4412 Uboot 移植(六)—— 相关知识补充