Java语法基础常见疑惑解答

1. 类是java的最小单位,java的程序必须在类中才能运行

2. java函数加不加static有何不同

java中声明为static的方法称为静态方法或类方法。静态方法可以直接调用静态方法,访问静态变量,但是不能直接访问实例变量和实例方法。静态方法中不能使用this关键字,因为静态方法不属于任何一个实例。静态方法不能被子类的静态方法覆盖。static 表示是静态的,用static修饰的方法在本类可以直接写方法名调用!在其他类里可以用类名.方法名调用!而不用实例化。如果不加static,则一定要建立对象实例化才能在别的函数里面调用它

3. Java中的String是一个类,而并非基本数据类型

4. Java标识符规范:

类名称: Mammal

函数名:getAge

常量:MAX_HEIGHT

标识符起名应该尽量做到“望名知义”。

5.定义Java常量的常用数据类型

各种进制下的数值:(10)10=(0xA)16=(012)8

Java中的基本数据类型独立于具体平台

整型: byte(8),short(16),int(32), long(64)

浮点型: float(32), double(64)

使用科学计数法定义浮点数值:123.456=1.23456e+2

布尔型: true, false

字符型: ‘a’, ’A’

字符串: “Hello,China”

6.为了方便阅读大的整数,Java 7及以上版本允许使用下划线分隔多个数位:

int  number1=1_000_000;

int  number2=1000000;

7.定义常量

利用关键字final声明常量,对于全局的常量(即在整个项目中都可用),通常按以下模式声明:

public static final int MAX_VALUE=512

如果某常量只在本类使用,则应将其定义为private的。

常量名字通常采用大写字母。

8. 枚举类型

package 课堂测试1;

public class test {

private enum MyEnum{

ONE, TWO, THREE

}

public static void main(String[] args) {

// TODO 自动生成的方法存根

for(MyEnum value:MyEnum.values()){

System.out.println(value);

}

}

}

详见可参考:

https://www.cnblogs.com/zhaoyanjun/p/5659811.html

values() 方法是编译器插入到enum 定义中的static 方法,所以,当你将enum 实例向上转型为父类Enum 是,values() 就不可访问了。解决办法:在Class 中有一个getEnumConstants() 方法,所以即便Enum 接口中没有values() 方法,我们仍然可以通过Class 对象取得所有的enum 实例

9. valueOf是一个静态方法,返回指定类型参数的字符串表示形式。指定类型参数可以是boolean、char、int、long、float、double。

10.枚举类型是引用类型!枚举不属于原始数据类型,它的每个具体值都引用一个特定的对象。相同的值则引用同一个对象。

11.可以使用“==”和equals()方法直接比对枚举变量的值,换句话说,对于枚举类型的变量,“==”和equals()方法执行的结果是等价的。

12.但是对于其它类型,“==”比较的是值【变量(栈)内存中存放的对象的(堆)内存地址】 equal用于比较两个对象的值是否相同【不是比地址】 【特别注意】Object类中的equals方法和“==”是一样的,没有区别,而String类,Integer类等等一些类,是重写了equals方法,才使得equals和“==不同”,所以,当自己创建类时,自动继承了Object的equals方法,要想实现不同的等于比较,必须重写equals方法。"=="比"equal"运行速度快,因为"=="只是比较引用.

13.Java中同名变量的屏蔽原则:

每个变量都有一个“有效”的区域(称为“作用域”),出了这个区域,变量将不再有效,同名的变量在指定的范围内有自动屏蔽的原则。即局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。下面以一段程序来进行说明:

public class Test {

private static int value = 1;

public static void main(String[] args) {

int value = 2;

System.out.println(value);

输出结果是:2。显然可以看出value=1的是全局变量,而value=2的是局部变量。

14.在运行时读取用户输入

Scanner in=new Scanner(System.in);

System.out.print(“What is your name?”);

String name=in. nextLine();

Scanner类还有nextInt,nextDouble等方法。

15.在JAVA中一共有八种基本数据类型,他们分别是

byte、short、int、long、float、double、char、boolean

1)整型

其中byte、short、int、long都是表示整数的,只不过他们的取值范围不一样

byte的取值范围为-128~127,占用1个字节(-2的7次方到2的7次方-1)

short的取值范围为-32768~32767,占用2个字节(-2的15次方到2的15次方-1)

int的取值范围为(-2147483648~2147483647),占用4个字节(-2的31次方到2的31次方-1)

long的取值范围为(-9223372036854774808~9223372036854774807),占用8个字节(-2的63次方到2的63次方-1)

可以看到byte和short的取值范围比较小,而long的取值范围太大,占用的空间多,基本上int可以满足我们的日常的计算了,而且int也是使用的最多的整型类型了。

在通常情况下,如果JAVA中出现了一个整数数字比如35,那么这个数字就是int型的,如果我们希望它是byte型的,可以在数据后加上大写的 B:35B,表示它是byte型的,同样的35S表示short型,35L表示long型的,表示int我们可以什么都不用加,但是如果要表示long型的,就一定要在数据后面加“L”。

2)浮点型

float和double是表示浮点型的数据类型,他们之间的区别在于他们的精确度不同

float 3.402823e+38 ~ 1.401298e-45(e+38表示是乘以10的38次方,同样,e-45表示乘以10的负45次方)占用4个字节

double 1.797693e+308~ 4.9000000e-324 占用8个字节

double型比float型存储范围更大,精度更高,所以通常的浮点型的数据在不声明的情况下都是double型的,如果要表示一个数据是float型的,可以在数据后面加上“F”。

浮点型的数据是不能完全精确的,所以有的时候在计算的时候可能会在小数点最后几位出现浮动,这是正常的。

3)boolean型(布尔型)

这个类型只有两个值,true和false(真和非真)

boolean t = true;

boolean f = false;

4)char型(文本型)

用于存放字符的数据类型,占用2个字节,采用unicode编码,它的前128字节编码与ASCII兼容

字符的存储范围在\u0000~\uFFFF,在定义字符型的数据时候要注意加‘ ‘,比如 ‘1‘表示字符‘1‘而不是数值1,

char c = ‘ 1 ‘;

我们试着输出c看看,System.out.println(c);结果就是1,而如果我们这样输出呢System.out.println(c+0);

结果却变成了49。

如果我们这样定义c看看

char c = ‘ \u0031 ‘;输出的结果仍然是1,这是因为字符‘1‘对应着unicode编码就是\u0031

char c1 = ‘h‘,c2 = ‘e‘,c3=‘l‘,c4=‘l‘,c5 = ‘o‘;

System.out.print(c1);System.out.print(c2);System.out.print(c3);System.out.print(c4);Sytem.out.print(c5);

16.另一种数据类型转换方法

除了使用C的强制类型转换方式,还可以通过原始类型的包装类完成类型转换:

适用场景:

同一个数据需要转换为多种类型,并且这一数据需要比较长期的使用。多数情况下,推荐直接使用强制类型转换的方式

17.

18.问题:为什么double类型的数值进行运算得不到“数学上精确”的结果?

答案:这个涉及到二进制与十进制的转换问题。N进制可以理解为:数值×基数的幂,例如我们熟悉的十进制数123.4=1×102+2×10+3×(10的0次幂)+4×(10的-1次幂);其它进制的也是同理,例如二进制数11.01=1×2+1×(2的0次幂)+0+1×(2的-2次幂)=十进制的3.25。

double类型的数值占用64bit,即64个二进制数,除去最高位表示正负符号的位,在最低位上一定会与实际数据存在误差(除非实际数据恰好是2的n次方)。

举个例子来说,比如要用4bit来表示小数3.26,从高到低位依次对应2的1,0,-1,-2次幂,根据最上面的分析,应当在二进制数11.01(对应十进制的3.25)和11.10(对应十进制的3.5)之间选择。

简单来说就是我们给出的数值,在大多数情况下需要比64bit更多的位数才能准确表示出来(甚至是需要无穷多位),而double类型的数值只有64bit,后面舍去的位数一定会带来误差,无法得到“数学上精确”的结果。

19.Java中使用BigDecimal类处理精度损失

https://blog.csdn.net/wangjunjun2008/article/details/45559655

https://www.cnblogs.com/javahr/p/8321683.html

20.字符串转化为数字和浮点数

int number = Integer.parseInt(numberString );

Integer.parseInt方法将 String 转为数字 ( int)

String firstNumber;

String secondNumber;

double number1;

double number2;

number1   =   Double.parseDouble(   firstNumber   );

number2   = Double.parseDouble(   secondNumber   );

Double.parseDouble是一个Double类所定义的静态方法

将 String 数据转为double类型的

返回 double类型的数值

记住静态方法调用语法:类名.静态方法名( 参数 )

Double是原始数据类型double的“包装类”,属于引用类型

21.Java中输出的加号连接符的使用:

从输出结果我们可以看出只有与 ” ” 字符串直接相连的后面 “+” 加号才会都被定义成连接符。

System.out.println(“X+Y=”+X+Y); 这条输出语句打印的内容 ”  ” 字符串后面的两个 “+” 加号都会被定义成连接符,所以是100200而不是300.

System.out.println(X+Y+”=X+Y”); 而这条输出语句打印的内容前面的X+Y会先运算的,因为前面的 “+” 加号还是运算符,Y后面的+加号才是连接符。只有与 ” ” 字符串直接相连时后面 “+” 加号才会都被定义成连接符。

22.区分引用类型和原始类型的变量:

String firstNumber;

String secondNumber;

double number1;

double number2;

如果变量的数据类型是一个类的名字,就是引用类型的变量,它将引用一个对象。

String 是个类(注意类名首字母大写)

firstNumber, secondNumber将分别引用两个字符串对象。

如果数据类型是一个原始类型(其名称由小写字母组成),这种类型的变量将直接保存一个原始数据类型的值。

double 是一个原始数据类型

number1, number2变量将保存两个双精度数

原文地址:https://www.cnblogs.com/zzstdruan1707-4/p/9744409.html

时间: 2024-11-03 20:55:37

Java语法基础常见疑惑解答的相关文章

Java语法基础常见疑惑解答8,16,17,21图片补充

8. 16. 17. 21 原文地址:https://www.cnblogs.com/zzstdruan1707-4/p/9744448.html

Java语法基础

Java语法基础 1.  关键字 某些单词对编译器有着特殊的含义,并且不能作为标示符使用,全部是小写字母 Java语言关键字 abstract boolean break byte case catch char class try do default continue double else extends assert final finally float for If implement import instanceof int interface long native new g

java语法基础一

Java语法基础一 Java代码基本格式 Java中所有程序代码都必须存在于一个类中,用class关键字定义类,在class之前可以有一些修饰符.格式如下: 修饰符 class 类名 { 程序代码 } 注:1.Java是严格区分大小写的. 2.Java程序中一句连续的字符串不能分开在两行中写. Java程序的注释 Java里的注释有三种类型: 1.单行注释 在注释内容前面加“//”,格式为: 代码; //注释内容 2.多行注释 以斜杠加星号开头,以星号加斜杠结尾. 3.文档注释 以斜杠加两个星号

黑马程序员——Java语法基础

一.关键字 1.定义和特点 定义:被Java语言赋予了特殊含义的单词. 特点:关键字中所有的字母都为小写. 2.分类 (1)用于定义数据类型的关键字:byte.short.int.long.float.double.char.boolean.class.interface.void (2)用于定义数据类型值的关键字:true.false.null (3)用于定义流程控制的关键字:if.else.switch.case.default.for.while.do.continue.break.ret

JAVA语法基础(课堂ppt问题总结)

一:运行源代码EnumTest.java,分析运行结果. 代码如下: public class EnumTest { public static void main(String[] args) { Size s=Size.SMALL; Size t=Size.LARGE; //s和t引用同一个对象? System.out.println(s==t); // //是原始数据类型吗? System.out.println(s.getClass().isPrimitive()); //从字符串中转换

JAVA语法基础课堂例子验证

一 枚举类型 源代码: public class EnumTest {  public static void main(String[] args) {   Size s=Size.SMALL;   Size t=Size.LARGE;   //s和t引用同一个对象?   System.out.println(s==t);  //   //是原始数据类型吗?    System.out.println(s.getClass().isPrimitive());    //从字符串中转换   Si

Java语法基础练习2

---恢复内容开始--- 1.仔细阅读示例:EnumTest.java分析结果 代码: 运行结果: 分析:枚举类型就是一个类,枚举中的常量就是枚举类型中的实例,可把字符串转化为枚举:而且他本身是一个类,所以不是原始数据类型,同时也不能被继承.同时由于s与t引用的不是同一个数据对象,所以不相等.也不是原始数据类型. 2.   原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值.故他的取值范围是[-127, 127].原码是人脑最容易理解和计算的表示方法. 反码:正数的反码是他本身,负

JAVA语法基础之标识符和关键字

一.标识符 JAVA中的变量名.方法名.类名和对象名都是标识符,程序在编写程序的过程中要标识和引用都需要标识符來唯一确定.在Java中标识符的命名规则如下: 可由任意顺序的大小写字母.数字.下划线和美元符号组成. 不能以数字开头. 不能是Java中的保留关键字. 没有长度限制,但是大小写敏感,如Hello和hello是不同的标识符. 二.关键字 和其他语言一样,Java中也有许多保留关键字(即在Java中有特殊意义),如public.break等,这些保留关键字不能当作标识符使用.我们不需要死记

java语法基础(总结)

1,关键字:其实就是某种语言赋予了特殊含义的单词. 保留字:其实就是还没有赋予特殊含义,但是准备日后要使用过的单词. 2,标示符:其实就是在程序中自定义的名词.比如类名,变量名,函数名.包含 0-9.a-z.$._ : 注意: 1),数字不可以开头. 2),不可以使用关键字. 3,常量:是在程序中的不会变化的数据. 4,变量:其实就是内存中的一个存储空间,用于存储常量数据. 作用:方便于运算.因为有些数据不确定.所以确定该数据的名词和存储空间. 特点:变量空间可以重复使用. 什么时候定义变量?只