初级Java开发面试必问项!!! 标识符字面值变量数据类型,该学学了!

Posted 蛋挞学姐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初级Java开发面试必问项!!! 标识符字面值变量数据类型,该学学了!相关的知识,希望对你有一定的参考价值。

最近事情太多,没太时间写博客。今天抽空再整理整理面试中的那点事吧,帮助那些正在找工作或想跳槽找工作的学弟学妹们。

前面我己写过多篇推文,相信看过我文章的伙伴们已经了解掌握了不少。从目前流行的开发技术、常见的面试问题以及问题的答案都已经写的特别清楚了,今天我给写一篇初级Java开发面试必问项!供大家阅读参考。

标识符

关于java语言当中的标识符

1、什么是标识符

  • 在java源程序当中凡是程序员有权利自己命名的单词都是标识符
  • 标识符在EditPlus编辑器当中以黑色字体高亮显示
  • 标识符可以标识什么元素呢?
  • 类名 * 方法名 * 变量名 * 常量名 等等…

2、标识符的命名规则【不按照这个规则来,编译器会报错,这是语法】

  • 一个合法的标识符只能由“数字、字母、下划线_、美元符号$”组成,不能含有其他符号
  • 不能数字开头
  • 严格区分大小写
  • 关键字不能做标识符
  • 理论上无长度限制,但是最好不要太长

3、表示符的命名规则【只是一种规范,不属于语法,不遵守规范编译器不会报错】

//最好见名知意
            public class UserService{
                public void login(String username,String password){
                }
            }
//遵守驼峰命名方式
//Java开发交流君样:593142328
            SystemService  UserService  CustomerService
  • 类名、接口名:首字母大写,后面每个单词首字母大写
  • 变量名、方法名:首字母大写,后面每个单词首字母大写
  • 长量名:全部大写

4、合法和不合法的标识符

合法不合法
_123Test123Test
HelloWorld!
A_B_CHelloWorld#
$ABCHello World
class1class
public0public
*/
public class IdentifierTest01 
//IdentifierTest01是一个类名,名字可以修改  
{
    //main是一个方法名
    public static void main(String[] agrs){ 
    //args是一个变量名
    }

    //doSome就是方法名
    public static void doSome(){
        //i就是变量名
        int i = 10;
    }//Java开发交流君样:593142328
}

字面值

关于字面值:

  • 字面值:
  • 10、100、3.14、“abc”、‘a’、true、false
  • 字面值就是数据
  • 字面值是java源程序的组成部分之一,包括标识符和关键字他们都是java源程序的组成部分。
  • 数据在现实世界当中是分门别类的,所以数据在计算机编程语言当中也是有类型的:【数据类型】
【数据类型】【数据类型】
10、100属于整数字面值
3.14属于浮点型字面值
true、false属于布尔型字面值
“abc”、“程序员”属于字符串型字面值
‘A’、‘人’属于字符型字面值

注意:

  • java语言当中所有的字符串字面值必须使用双引号括起来,双引号是半角
  • java语言当中所有的字符型字面值必须使用单引号括起来,单引号是半角
*/
public class ConstTest01
{
    public static void main(String[] args){
        System.out.println("abc");
        System.out.println("你最近过得好吗?");
        System.out.println(10);
        System.out.println(false);
        System.out.println(true);
        System.out.println('A');
        System.out.println(3.14);
        // 编译报错,因为单引号中只能存放单个字符,属于字符型字面值
        // System.out.println('ABC');
        //Java开发交流君样:593142328
        // 100是一个字面值,是一个整数型数值,那么既然是数据存储在内存当中,必定会占用一定的内存空间。
        System.out.println(100);//加入Java开发交流君样:756584822一起吹水聊天
    }
}

变量

一、关于java语言当中的变量:

1、什么是变量?

  • 变量本质上来说是内存中的一块空间,这块空间有:数据类型,有名字、有字面值。
  • 变量包含三部分:数据类型、名称、字面值【数据】
  • 变量是内存中存储数据的最基本的单元。

2、数据类型的作用?

  • 不同的数据有不同的类型,不同的数据类型底层会分配不同大小的空间。
  • 数据类型是指导程序在运行阶段应该分配多大的内存空间。

3、变量要求:变量中存储的具体的“数据”必须和变量的“数据类型”一致,当不一致的时候编译报错。

4、声明/定义变量的语法格式:

  • 数据类型 变量名;
  • 数据类型:目前我们还没有学习数据类型,但是有一种数据类型是整数型,叫做int
  • 变量名:只要是合法的标识符就行,规范中要求:首字母小写,后面每个单词首字母大写
    例如: int i: 、int age; 、int length; 、int size;、 int num;
    其中int是数据类型,i,age,length,size,num 都是变量名。

5、变量声明之后怎么赋值?
- 语法格式:变量名 = 字面值;
- 要求:字面值的数据类型必须和变量的数据类型一致。
= 等号是一个运算符,叫做赋值运算符,赋值运算等号右边的表示,表示式执行结束之后的结果赋值给左边的变量。

6、声明和赋值可以放到一起完成。

        int i = 10;

7、变量赋值之后,可以重新赋值,变量的值可变化:

            int i = 10; System.out.println(i); //10
            int i = 20; System.out.println(i); //20
            int i = 100; System.out.println(i); //100

8、有了变量的概念之后,内存空间得到了重复的使用;

            int i = 10;  System.out.println(i); ...  System.out.println(i);

9、通常访问一个变量包括两种访问形式:

  • 第一种:读取变量中保存的具体数据 get/获取
  • 第二种:修改变量中保存的具体数据 set/设置
                i = 20: //set
                 System.out.println(i); //get

10、变量在一行上可以声明多个
int a,b,c;
11、变量必须先声明,再赋值,才能访问。

  • int i; 程序执行到这里,内存空间并没有开辟出来,变量i并没有初始化。所以没有赋值之前是无法访问的。
public class VarTest01
{
    public static void main(String[] args){
    
        //声明一个int类型的变量,起名i
        int i;//Java开发交流君样:593142328
        // 编译报错,变量i并没有初始化
        // System.out.println(i);
        
//加入Java开发交流君样:756584822一起吹水聊天
        // 给i变量赋值,i 变量在这里完成初始化,内存开辟
        i = 100;
        System.out.println(i);

        // i 再次重新赋值
        i = 200;
        System.out.println(i);

        // 一行上可以同时声明多个变量
        // a和b尚未初始化,c赋值300
        // int a,b,c = 300;
    }
}

二、关于java语言当中的变量:使用所有的基础语法开发系统业务

1、在方法体当中的java代码,是遵守自上而下的顺序依次执行的,逐行执行。

  • 第一行;第二行;第三行;

**特点:**第二行的代码必须完整的结束之后,第三行程序才能执行。

2、在同一个“作用域”当中,变量名不能重名,但是变量可以重新赋值。

public class VarTest02
{
    public static void main(String[] args)
        int i = 100;
        System.out.println(i); //100

        i = 200;
        System.out.println(i); //200

        // 以下代码顺序有错误,先声明然后复制再访问
        /*
        System.out.println(k);
        int k = 100;
        */
        /*
        int i = 90;
        System.out.println(i);
        */
}

三、关于java中的变量;

    变量的作用域

1、什么是作用域?

        - 变量的作用域,其实描述的就是变量的有效范围。
          在什么范围之内是可以被访问的,只要出了这个范围该变量就无法访问了。

2、变量的作用域只要记住一句话:

        出了大括号就不认识了。
public class VarTest03
{
    //注意: 这里在static不要去掉
    static int k = 90;

    public static void main(String[] args)
        // 变量i的作用域是main方法
        // 在整个main方法当中是有效的,可见的,可以访问的
        int i = 100;
        System.out.println(i): // 可以
        System.out.println(k): // 可以

        // 以下会编写一个for循环语句
        // 这个for循环后面的控制语句的时候详细讲解
        for(int a=0;a<10;a++){ //a变量的作用域是整个for循环,for循环结束之后,a变量的内存就释放了
        }
        // 这里无法访问a变量
        // System.out.println(a):

        int j; // 作用域是main方法
        for (int j=0;j<10;j++){
        }
        System.out.println(j): // 访问的是main方法中的j变量
        
    }
    public static void doSome(String[] args)
        // 这里无法访问main方法当中的变量i
        // 已经出了i变量的作用域。
        // System.out.println(i):

//加入Java开发交流君样:756584822一起吹水聊天
        // 可以
        System.out.println(k):
    }
}

四、关于变量的分类:

根据变量声明的位置分类;

  • 局部变量
  • 在方法体当中声明的变量叫做局部变量
  • 成员变量
  • 在方法体外【类体之内】声明的变量叫做成员变量
  • 在不同的作用域当中,变量名是可以相同的。
  • 在同一个作用域当中,变量名不能重名。


public class VarTest04
{    
    // 成员变量
    int k = 200;

    // 主方法:入口
    public static void main(String[] args){
        // i变量就是局部变量
        int i = 10;
        
//加入Java开发交流君样:756584822一起吹水聊天
        // java遵循“就近原则”
        System.out.println(i);
    }

    // 成员变量
    int i = 100; // 什么变量
    // 类体中不能直接编写java语句【除声明变量之外】
    // System.out.println(i):

    // doSome方法
    public static void doSome(){
        // 局部变量
        int i = 90;

        
    }
}

数据类型

一、关于java中的数据类型:

1、数据类型的作用是什么?

  • 程序当中有很多数据,每一个数据都是有相关类型的,不同的数据类型的数据占用空间大小不同。
  • 数据类型的作用是指导JVM在运行程序的时候给该数据分配多大的内存空间。

2、java中的数据类型包括两种:

  • 基本数据类型
  • 引用数据类型【后边解释】
  • 类、接口、数据、等等…

3、关于基本数据类型:

  • 基本数据类型包括四大类八小种:

第一类:整数型

  • byte、short、int、long
    第二类:浮点型
  • float、double
    第三类:布尔型
  • boolean
    第四类:字符型
  • char

4、字符串“abc”不属于基本数据类型,属于"引用数据类型",字符属于基本数据类型:

  • 字符串使用双引号 “abc”
  • 字符使用单引号 ‘a’

5、八种基本数据类型各自占用空间大小是多少?

基本数据类型占用空间大小
byte1
short2
int4
long8
float4
double8
boolean1
char2

6、计算机在任何情况下都只能识别二进制。例如:只认识101000101…

现代的计算机底层采用交流电的方式,接通和断开就两种状态,计算机只识别1或0,其他不认识】

7、什么是二进制?

数据的一种表示形式,十进制表示满十进一原则。二进制表示满二进一原则。

          /  例如:十进制
                  0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 
          /  例如:二进制
                  0 1 10 11 100 101 110 111 1000 1001 ...
                  0 1 2  3  4    5  6   7    8     9

8、字节(byte)

            1 byte = 8 bit 【1个字节 = 8个比特位】1比特位表示一个二进制位: 1/0
            1 KB = 1024 Byte、1 MB = 1024 KB、1 GB = 1024 MB、1 TB = 1024 GB
            1 TB = 1024 * 1024 * 1024 * 1024 * 8
            

9、整数型当中的byte类型,占用1个字节,所以byte类型的数据占用9个比特位,那么byte类型的取值范围是什么?

  • 关于java中的数字类型,数字都是有正负之分的,所以在数字的二进制当中有一个二进制位被称为”符号位“。并且这个”符号位“在所有二进制的最左边,0表示正数,1表示负数。
  • byte类型最大值:01111111 【0000010000000(二进制) - 1】
  • byte类型最大值:2的7次方-1,结果是:127
  • byte类型最小值: -128 【具体的怎么用二进制表示,这个和源码、反码、补码有关】
  • byte类型取值范围:【-128~127】
  • bytp类型可以标识256个不同的数字【256个不同的二进制】

10、二进制和十进制之间的转换规则:

  • 二进制转换成十进制
  • 十进制转换成二进制

11、计算机只认识二进制,那么计算机是怎么表示现实世界当中的文字的呢?

  • 八种基本数据类型当中,byte、short、int、long、float、double、boolean这7种数据类型计算机在表示的时候比较容易,因为底层都是数字,十进制的数字和二进制之间存在一种固定的转换规则。
  • 但是八种基本数据类型当中char类型表示的是现实世界中的文字,文字和计算机二进制之间”默认“情况下是不存在任何转换关系的。
  • 为了让计算机可以表示现实世界当中的文字,我们需要进行人为的干涉,需要人负责提前制定好”文字“和”二进制“之间的对照关系。这种对照转换关系被称为:字符编码。
  • 计算机最初只支持英文,最先出现的字符编码是:ASCII码
                'a' -> 9701100001'A' -> 65
                '0' -> 48

                'a' -- (按照ASCII解码) --> 01100001
                01100001 -- 按照ASCII编码 --> 'a'

编码和解码的时候采用同一套字典/对照表,不会出现乱码。
当解码和编码的时候采用的不是同一套对照表,会出现乱码问题,

  • 跟着计算机的发展,后来出现了一种编码方式,是国际标组织ISO制定,这种编码方式支持西欧语言,向上兼容ASCII码仍然不支持中文,这种编码方式是:ISO-8859-1,又被称为latin-1

  • 跟着计算机向亚洲发展,计算机开始支持中文、日文、韩文等国家文字,其中支持简体中文的编码方式:GB2312 < GBK < GB18030

  • 支持繁体中文:大五码

  • 后来出现了一种编码方式统一了全球所有的文字,容量较大,这种编码方式叫做:unicode编码
    unicode编码方式有很多种具体的实现:

  • UTF-8、UTF-16、UTF-32.

  • java语言采用的是哪一种编码方式呢?

  • java语言源代码采用的是unicode编码方式,所以标识符可以写中文。

  • 现在在实际开发中,一般使用UTF-8编码方式较多。【统一编码方式】

12、八种基本数据类型的取值范围:

类型取值范围
byte[-128 ~ 127]
short[-32768 ~ 32767]
int[-2147483648 ~ 2147483647]
long/
float/
double/
boolean[true,falese]
char[0 ~ 65535]
        注意:short和char所表示的种类总数是一样的,只不过char可以标识更大的正整数。
        因为char没有负数。

13、以下java程序主要讲解的是数据类型之,char类型


public class DataTypeTest01
{
    public static void main(String[] args){
        // 定义一个char类型的变量,起名c,同时赋值字符'a'
        char c = 'a';
        System.out.print(c);

        // 一个中文占用2个字节,char类型正好是2个字节
        // 所以java中的char类型变量可以存储一个中文字符
        char x = '国';
        System.out.print(x);
        
        // 编译错误
        // ab是字符串不能使用单引号括起来
        // char y = 'ab';

        // "a"是字符串类型
        // k变量是char类型
        // 类型不兼容,编译错误
        char k = "a";
        
        // 声明
        char e;

        // 赋值
        e = "e";

        // 再次赋值
        System.out.print(e);
    }
}

二、关于八种数据类型的默认值

数据类型默认值
byte,short,int,long0
float,double0.0
booleanfalse【在C语言中,true是1,false是0】
char\\u0000

八种基本数据类型的默认值是一切向0看齐。

public class DataTypeTest02
{
        // 这里的static必须加,别问。
        static int k = 1000;
        
        // 变量还是遵守这个语法:必须先声明,在赋值,才能访问。
        // 成员变量没有手动赋值系统会默认赋值【局部变量不会】
        static int f; //成员变量

        public static void main(String[] args){
            /*
                int i; //局部变量
                System.out.print(i);
            */
            System.out.print(k);

            System.out.print(f);
        }
}

三、关于java语言中的char类型:

转义字符

转义字符出现在特殊字符之前,会将特殊字符转换成普通字符。

\\n 换行符
\\t 制表符
’ 普通的单引号
\\ 普通的反斜杠
" 普通的双引号


public class DataTypeTest03
{
    public static void main(String[] args){

        // 普通的n字符
        char c1 = 'n':
        System.out.print(c1);
        
        // 依照目前所学知识,一下程序无法编译通过,因为显示是一个字符串,不能使用单引号括起来
        // 但是经过编译,发现编译通过了,这说明以下并不是一个字符串,而是“一个”字符
        // 这是一个“换行符”,属于char类型的数据
        // 反斜杠在java语言当中具有转义功能。
        char c2 = '\\n';

        /*
        System.out.print("Hello");
        System.out.print("World!");
        */
        
        // System.out.println()和System.out.print()区别:
        // println输出之后换行,print表示输出,但是不换行
        /*
        System.out.print("Hello");
        System.out.println("World!");
        */

        System.out.print("A");
        // System.out.print(c2);
        System.out.println("B");

        // 普通的t字符
        char x = 't';
        System.out.print("t");

        // 制表符tab
        // 强调:制表符和空格不一样,他们的ASCII不一样,体现在键盘上两个不同的“按键”
        char y = '\\t';
        System.out.println("A");
        System.out.print(y);
        System.out.println("B");

        // 要求在控制台上输出“反斜杠字符”
        /*
        // 反斜杠蒋后面的单引号转义成不具备特殊含义的普通单引号字符,左边的单引号缺少了结束的单引号字符,编译报错
        char k = '\\';
        System.out.println(k);
        */
        /*
          // 解释:第一个反斜杠具有转义功能,将后面的反斜杠转义为普通的反斜杠字符。
          结论:在java当中两个反斜杠代表一个普通的反斜杠字符
        */
        char k = '\\\\';
        System.out.println(k);

        // 在控制台上输出一个普通的单引号字符
        // java中不允许这样编写程序,编译报错
        // char a = ''; 

        // 以下编译报错:第一个单引号和第二个单引号配对儿,最后的单引号找不到另一半!
        // char a = ''';
        // System.out.println(a);
        
        // 反斜杠具有转义功能,将第二个单引号转换成普通的单引号字符,第一个单引号和最后单引号配对。
        char a = '\\'';
        System.out.println(a);

        char f = '"';
        System.out.println(f);

        // 编译错误
        // System.out.println(""HelloWorld!"");

        // 纠正
        System.out.println("\\"HelloWorld!\\"");

        char m = '中';
        System.out.println(m);

        // JDK中自带的native2ascii.exe命令,可以将文字转换成unicode编码形式
        // 怎么使用这个命令:
        // 在命令行输出native2ascii,回车,然后输入文字之后回车即可得到unicode编码
        char n = "\\u4e2d"; // '中'对应的unicode编码是 4e2d
        System.out.println(n);

        // 编译错误
        // char g = '4e2d';

        // 编译错误
        // char g = 'u4e2d';

        // 通过:反斜杠u联合起来后面的一串数字是某个文字的unicode编码
        char g = '\\u4e2d';
        System.out.println(g);
        
        // char类型的默认值
        char c = '\\u0000';
        System.out.println(c);



    }
}

四、关于java语言当中的整数型:

        数据类型            占用空间大小        默认值            取值范围
        ----------------------------------------------------------------
        byte                1                    0                [-128 ~ 127]
        short                2                    0                [-32768 ~ 32767]
        int                    4                    0                [-2147483648 ~ 2147483647]
        long                8                    0L

1、java语言当中的“整数型字面值”被默认当做int类型来处理,要让这个“整数型字面值”被当做long类型来处理的话,需要在“整数型字面值”后面添加1/L,建议使用大写的L

2、java语言当中的整数型字面值有三种表示方式:

  • 第一种方式:十进制【是一种缺省的默认的方式】
  • 第二种方式:八进制【在编写八进制整数型字面值的时候需要以0开始】
  • 第三中方式:十六进制【在编写十六进制整数型字面值的时候需要以0x开始】
public class DataTypeTest04
{
    public static void main(String[] args){
        int a = 10;      // 缺省
        int b = 010;  // 整数型字面值以开头的,后面那一串数字就是八进制形式
        int c = 0x10; // 整数型字面值以0x开头的,后面一串数字就是十六进制形成

        System.out.println(a); // 10
        System.out.println(b); // 8
        System.out.println(c); // 16

        System.out.println(a + b + c); //34

        // 123这个整数型字面值int类型
        // i 变量声明的时候也是int类型
        // int类型的123赋值给int类型的变量i,不存在类型转换
        int i = 123;
        System.out.println(i);

        // 456整数型字面值被当做int类型,占用4个字节
        // x变量在声明的时候是long类型,占用8个字节
        // int类型的字面值456赋值给long类型的变量x,存在类型转换
        // int类型转换成long类型
        // long类型是大容量
        // 小容量可以自动转换成大容量,称为自动类型转换机制。
        long x =456;
        System.out.println(x);
        
        // 2147483647字面值是int类型,占用4个字节
        // y是long类型,占用8个字节,自动类型转换
        long y = 2147483647;
        System.out.println(y);

        // 编译错误:过大的整数,2147483648
        // 2147483648 被当做int类型4个字节处理,但是这个字面值超出int类型范围
        // long z = 2147483648;

        // 解决错误
        // 2147483648字面值一上来就当做long类型来处理,在字面值后面添加L
        // 2147483648L是8个字节的long类型
        // z是long类型变量,以下程序不存在类型转换
        long z = 2147483648L;
        System.out.println(z);
    
    }
}

五、关于java中的整数型

byte
short
int
long

public class DataTypeTest05
{
    public static void main(String[] args){
        
        // l00L是long类型字面值
        // x是long类型变量
        // 不存在类型转换,直接赋值
        long x = 100L;

        // x变量是long类型,8个字节
        // y变量是int类型,4个字节
        // 以下程序可以编译通过吗?
        // 编译报错,大容量不能直接赋值给小容量
        // int y = x;

        // 大容量转换成小容量,需要进行强制类型转换
        // 强制类型转换需要加“强制类型转换符”
        // 加上强制类型转换符之后编译通过了,但是运行阶段可能损失精度。
        // 所以强制类型转换谨慎使用,因为损失精度之后可能损失很严重。
        // 强转原理:
         

以上是关于初级Java开发面试必问项!!! 标识符字面值变量数据类型,该学学了!的主要内容,如果未能解决你的问题,请参考以下文章

Java连载5-标识符关键字和字面值

一个问题让我直接闭门思过!!!拼多多面试必问项之List实现类:LinkedList

字面值

Velocity——字面值和转义

乐字节Java变量与数据结构之二:Java常量与变量

Java 线程池原理及最佳实践(1.5W字,面试必问)