java中为什么有的变量声明而不赋值?

java中为什么有的变量声明而不赋值?而有的就值,那什么情况下要赋值,什么情况下不赋值

5个回答

比如对象变量,而调用这个变量的构造函数非常耗费时间,所以我们等用到的时候再创建,如果程序运行完都不访问它,就根本不创建,这样可以提高效率。
对于简单变量,比如int float一类的,建议随手给一个初始值。

当然可以了,一般不需要一开始就赋值的,就可以等后面再赋值,如果是一开始就赋值,并且后面不会改变(比如某个标记)就可以用static final修饰。

有些语言中,简单类型不赋值则会使用一个默认的值(比如int会默认为0)

你这个问题给你举个例子,你应该就能理解了
例如: int a; 这是只声明不赋值,则只会在内存的栈区创建引用,堆中并无此引用的指向。
就是说只会在内存中创建一个 a;而这个a并没有指向任何指向,是没有空间的。
而 int a =0; 这样会在内存的栈区创建引用,并且a这个对象指向0,这样就会占有内存空间的;

所有我就简单的跟你讲一下什么时候需要赋值,什么时候不需要赋值吧。
当你定义的这个变量被多个地方应用的时候,而这些引用中有的值可能无法给这个变量赋值,
还是上面这个例子
我们 int a;

在我们的代码一个部分中我们给他赋值 a =10;
而另外一个地方又给这个a负责,但这个a的值是从数据库拿出来的,这中间有很多情况,而拿到的是空值,这个时候是不是就有问题呢,会报空指针。
所以必须要初始化一个,一般都是int a=0;
同理,如果你你要给a赋值都是固定的,或者你可以确定这里值都能拿到,那么你声明的时候肯定用int a;
这样讲你能明白吗?

zhanggang740
JackWaiting 回复JackWaiting: 这个是蜡像,不是真人~我担心你理解错了~
4 年多之前 回复
zhanggang740
JackWaiting 回复提问之星: 嘿嘿,是这蜡像馆合影的
4 年多之前 回复
u011359326
提问之星 答主和乔布斯合影过呢,是不是ps的
4 年多之前 回复
u011359326
提问之星 答主和乔布斯合影过呢,是不是ps的
4 年多之前 回复
zhanggang740
JackWaiting 回复提问之星: 不客气~
4 年多之前 回复
zhanggang740
JackWaiting 回复caozhy: 呵呵
4 年多之前 回复
u011359326
提问之星 好详细的解答,万分感谢
4 年多之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 对于int类型的变量,哪里来的堆上创建对象?
4 年多之前 回复

局部变量需要在声明的时候需要可以赋值或者不赋值,但是在使用这个局部变量之前一定要赋值
对于类的成员变量再声明的时候可以赋值或者不赋值,如果没有赋值,在使用的时候就会使用默认的值,例如: int 类型 默认值为0
对于使用final 关键字声明的变量必须赋初值 final int i=10;

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Python+OpenCV计算机视觉

Python+OpenCV计算机视觉

java当中为什么有的变量声明而不赋值

java当中为什么有的变量声明而不赋值,比如 int a;那它和int a = null;有啥区别

【java】声明变量赋值为null和不赋值有没有区别

比如下面这段代码: public class A { A a; } 和 public class A { A a = null; } 这两种写法有没有区别

final修饰的终态变量只能在声明变量时或构造函数里赋值嘛?

class GongChengShi { final String name;//名字 final String dizhi;//地址 int age;//年龄 public GongChengShi(String name, int age) { this.name = name;//构造函数初始化时给名字和年龄赋值 this.age = age; } void setDizhi(String dizhi){//在子类中调用这里给地址赋值 this.dizhi = dizhi; } } 输出结果 ---------- javac ---------- Hello.java:36: 错误: 无法为最终变量dizhi分配值 this.dizhi = dizhi; ^ 1 个错误 我dizhi在声明变量时直接赋值可以,在构造函数里赋值也可以,但是放到普通方法里赋值就不行了。 final修饰的变量只能在声明变量时赋值或者在构造函数里赋值嘛?

新手 java 在构造函数中给类中的变量赋值问题

package complex_number; import java.util.*; public class ComplexNumber { public static void main(String[] args){ java.util.Scanner scanner = new java.util.Scanner(System.in); float m_dRealPart; float m_dImaginPart; System.out.println("Please enter the real and imaginary parts of the plural:"); m_dRealPart=scanner.nextFloat(); m_dImaginPart=scanner.nextFloat(); System.out.println("\n"); System.out.println("What kind of operation do you want to do? (1 Plus, 2 minus, 3 multiply, 4 divide)"); } /*构造函数,ComplexNumber,将实部和虚部置0*/ public ComplexNumber(){ m_dRealPart=0; m_dImaginPart=0; } 请问在构造函数的时候为什么会错?

java中的常量为什么不能在try catch语句中赋值?

成员位置声明一个常量,想在try catch 语句中赋值,会报错,不明白为什么会这样

Java 内存区域中关于局部变量的值的存放位置

比如我在一个方法体中声明了一个基本类型的局部变量: ```java int a = 1; ``` 我知道变量名和变量类型是保存在栈中的局部变量表中,可是局部变量表结构并没有字面量成员,那a的值1是存放在哪里? 反编译后的字节码指令是: ```java 0: iconst_1 1: istore_2 ``` 第一条指令是将常量1压入操作数栈,这个我能理解。 可是第二条指令说将操作数栈的栈顶元素弹出推入局部变量表中Slot=2的位置,可是操作数栈只有常数,这就引出了两个问题: 1. 局部变量表的变量名是哪来的? 2. 局部变量表并不保存局部变量的值,那这个值是储存在哪里的? 字节码指令`iload_2`的意思是拿出局部变量表中位置为2的变量,应该是拿值出来吧,可是这个值局部变量表并没有存啊… 经过百度,我自己对这两个问题的理解: 1. 局部变量表的长度在编译期时就确定,那是不是方法中所有的局部变量就已经在局部变量表生成的时候加了进去。如果这么理解是正确的话,那么局部变量表是什么时候生成的? 2. 局部变量表中Slot为2的位置储存了a这个变量,这个2是一个类似于地址索引之类的东西,指向变量a的地址空间,而操作数栈是根据这个索引将变量的值保存在这个地址上的。 但是我感觉这么解释有点太牵强了,有木有大神帮我解答一下……

java的接口可以直接拿来声明变量?

public interface IUserManage { public void addUser(User user); public void modifyUser(User user); public void deleteUser(User user); } 现在有这么个接口,然后在另一个没有实现此接口的类里看到如下这句: private IUserManage userManage; 在这个类里,直接声明了userManage,并且userManage可以直接调用接口里的那三个方法 接口不是只能用来implements实现吗?

请问一下,如何把类型为自定义类的成员变量的私有变量赋值

public class A{ private double num; public void set_num(double d){ num=d; } } public class B{ private A a; public void set_A_num(double d){ a.set_num(d); } } B b= new B(); b.set_A_num(0.1); 有java.lang.NullPointerException,怎么改呢

java中的枚举问题中的变量

新人初学java,在学到枚举的时候遇到了问题,求教各位 枚举中有这样一段定义 public class WeekDay(){ private WeekDay(){} public final static WeekDay SUN = new WeekDay() ...... } 后面就是这样得一些定义星期的代码 不明白的地方: 1.这里是枚举的问题:为什么创建对象可以在这个类的内部,一般来说,不是一般只有在另一个类里创建这个类的对象算是正确吗? 2. 这里有个new关键字,我的理解是new一般会和类搭配使用,用来分配一个空间来存放这个对象,这样对,吗? 3.我是不是可以把java中的类理解一个数据类型,相当于自己定义的,然后WeekDay SUN 相当于int a这个语句,可以这样理解吗? 在下先谢谢各位了

java局部变量问题求解答

关于java的局部变量问题,在方法中定义了一个局部变量,未赋值,然后在for语句里给其赋值,然后打印却报错,而如果在定义的时候就给它赋值,最后打印的则是在for语句里赋的值,这是什么原因啊?如下图所例,求大神们解答,想了很久都没想过来,求详解![图片](https://img-ask.csdn.net/upload/201511/22/1448189031_82657.png)

小白求助,静态变量重新赋值的问题

写了一个程序,是从外面获取文件路径,然后进行处理,路径我用的是静态变量,根据路径获取的配置文件也设的静态变量。我现在想循环执行这个程序,每次路径都从外面获取,该怎么办?我想重新赋值这个静态变量该怎么做?

Java实现1-100的完全数,为什么变量申明为成员变量没结果,为局部变量就有结果。

public class Test { public static void main(String args[]) { ComputerPerfectNum Com=new ComputerPerfectNum(); Com.perfectNum(); } } class ComputerPerfectNum { int temp=0; //申明为成员变量并在局部变量不再赋值就出不来结果。 public void perfectNum(){ for(int a=2;a<=100;a++){ //若不申明成为成员变量,在这申明成为局部变量就能出结果。 for(int b=1;b<a;b++){ if(a%b==0) {temp+=b;} } if(temp==a){ System.out.println("完全数="+a); } } } }

java如何实现在把方法赋值给一个变量,通过变量来调用方法

``` 比如Map<String,Object> a <字符串,方法引用> ``` 然后通过a.get()去调用方法。

Java 中一个类定义的一个静态变量 被另一个类使用时 这个静态变量必须有值吗?

Java 中一个类定义的一个静态变量 被另一个类使用时 这个静态变量必须有值吗?

Java byte或short类型赋值的小问题

把一个整数常量(其值在byte类型的表数范围内)赋值给byte类型变量,系统会把整数常量当做byte类型来处理还是当做int来处理 查了一些资料,一部分是直接当做byte类型处理,一部分说是当做int类型处理然后数据类型转换 byte b = 3;

java如何定义long类型的变量

如题 java如何定义long类型的变量?变量后面加L(大)或者l(小)是什么意思?

java中只要是基本数据类型的变量初始值问题

java中只要是基本数据类型的变量 int a;和int a =0是一样的 只要是引用数据类型变量 String a = null; String a; 是一样的 以上说法正确吗

final关键字修饰的变量为什么可以修改

![图片说明](https://img-ask.csdn.net/upload/201707/20/1500542649_437083.jpg)我发现final关键字修饰的变量可以修改,我想知道这两个C是不是一个,如果是一个岂不是被修改了吗?不是得话又是同一个栈地址指向的,怎么回事大神

eclipse中java类中声明静态变量serialVersionUID是干什么用的?

我用ide为eclipse,创建java类之后,每个java类都有一个警告信息,说没有声明静态变量serialVersionUID,请问eclipse中java类中声明静态变量serialVersionUID是干什么用的?如何声明及赋值?

2019 Python开发者日-培训

2019 Python开发者日-培训

150讲轻松搞定Python网络爬虫

150讲轻松搞定Python网络爬虫

设计模式(JAVA语言实现)--20种设计模式附带源码

设计模式(JAVA语言实现)--20种设计模式附带源码

YOLOv3目标检测实战:训练自己的数据集

YOLOv3目标检测实战:训练自己的数据集

java后台+微信小程序 实现完整的点餐系统

java后台+微信小程序 实现完整的点餐系统

三个项目玩转深度学习(附1G源码)

三个项目玩转深度学习(附1G源码)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

2019 AI开发者大会

2019 AI开发者大会

玩转Linux:常用命令实例指南

玩转Linux:常用命令实例指南

一学即懂的计算机视觉(第一季)

一学即懂的计算机视觉(第一季)

4小时玩转微信小程序——基础入门与微信支付实战

4小时玩转微信小程序——基础入门与微信支付实战

Git 实用技巧

Git 实用技巧

Python数据清洗实战入门

Python数据清洗实战入门

使用TensorFlow+keras快速构建图像分类模型

使用TensorFlow+keras快速构建图像分类模型

实用主义学Python(小白也容易上手的Python实用案例)

实用主义学Python(小白也容易上手的Python实用案例)

程序员的算法通关课:知己知彼(第一季)

程序员的算法通关课:知己知彼(第一季)

MySQL数据库从入门到实战应用

MySQL数据库从入门到实战应用

机器学习初学者必会的案例精讲

机器学习初学者必会的案例精讲

手把手实现Java图书管理系统(附源码)

手把手实现Java图书管理系统(附源码)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

.net core快速开发框架

.net core快速开发框架

玩转Python-Python3基础入门

玩转Python-Python3基础入门

Python数据挖掘简易入门

Python数据挖掘简易入门

微信公众平台开发入门

微信公众平台开发入门

程序员的兼职技能课

程序员的兼职技能课

Windows版YOLOv4目标检测实战:训练自己的数据集

Windows版YOLOv4目标检测实战:训练自己的数据集

HoloLens2开发入门教程

HoloLens2开发入门教程

微信小程序开发实战

微信小程序开发实战

Java8零基础入门视频教程

Java8零基础入门视频教程

相关热词 c# 按行txt c#怎么扫条形码 c#打包html c# 实现刷新数据 c# 两个自定义控件重叠 c#浮点类型计算 c#.net 中文乱码 c# 时间排序 c# 必备书籍 c#异步网络通信
立即提问