Java面试题----基础语法

一、数据类型

定义:Java语言是强类型语言,对于每一种数据都定义了明确的具体的数据类型,在内存中分配了不同大小的内存空间。

分类:

        基本数据类型:

                数值型:

                        整数类型:byte、short、int、long

                        浮点类型:float、double

                字符型:char

                布尔型:boolean

        引用数据类型:

                类(class)、接口(interface)、数组(【】)

Java基本数据类型图

例:

(1)用最有效的方法计算2乘以8

2<<3(左移三位相当于乘以2的3次方,右移三位相当于除以2的3次方)

(2)Math.round(11.5)、Math.round(-11.5)等于多少

12、-11        (四舍五入的原理是在参数上加0.5然后进行向下取整)

(3)float f = 3.4是否正确

不正确;3.4 是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写成 float f =3.4F;

(4)short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗

对于 short s1 = 1; s1 = s1 + 1;由于 1 是 int 类型,因此 s1+1 运算结果也是 int型,需要强制转换类型才能赋值给 short 型。

而 short s1 = 1; s1 += 1;可以正确编译,因为 s1+= 1;相当于 s1 = (short(s1 + 1);其中有隐含的强制类型转换。

二、编码

Java语言采用Unicode编码标准,Unicode为每个字符制定了一个唯一的数值,因此在任何的语言,平台,程序都可以放心得使用

三、访问修饰符

定义:Java中可以使用访问修饰符来保护对类、变量、方法和构造方法的访问;Java支持四种不同的访问权限(public、private、protected、default)

分类:

public:对所有类可见;使用对象:类、接口、变量、方法

protected:对同一包内的类和所有子类可见,子类包括不同包中的子类;使用对象:变量、方法。注意不能修饰类(外部类)

default:在同一包内可见;使用对象:类、接口、变量、方法

private:在同一类内可见;使用对象:变量、方法;注意不能修饰类(外部类)

四、关键字

final:可用于修饰类、属性、方法

*被final修饰的类不能被继承

*被final修饰的方法不能被重写

*被final修饰的变量不能被改变,注意修饰的基本类型是常量,修饰引用类型不可变的是变量的引用,而不是引用指向的内容,引用指向的内容是可以改变的

final、finally、finalize区别

final可以修饰类、变量、方法,修饰的类不能被继承,修饰的方法不能被重写,修饰的基本类型是常量,不能被重新赋值

finally一般作用与try-catch代码块中,在处理异常的时候,通常我们将一定要执行的代码放在finally代码块中,表示不管是否出现异常,该代码块都会执行,一般用来存放一些关闭资源的代码

finalize是一个方法,属于Object类的一个方法,而Object类是所有类的父类,该方法一般由垃圾回收器来调用。

this:this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。

在Java中大致有三种用法:

1)普通的直接引用,this相当于是指向当前对象本身;

2)形参与成员名字重复,用this区分;

3)引用本类的构造函数

super:super也有三种用法

1)普通的直接引用,与this类似,super相当于是指向当前对象的父类的引用,这样就可以用super.xxx来引用父类成员;

2)子类中的成员变量或方法与父类中的成员变量或方法同名时,用super进行区分

3)引用父类构造函数

this和super异同:

1)引用构造函数时,super调用的是父类中的某一个构造函数,this调用的是本类中的另一种形式的构造函数;

2)super()和this()均需要放在构造方法内第一行;

3)this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过;

4)this()和super()都指的是对象,所以均不可在static环境中使用,包括static变量、static方法、static语句块

5)从本质上讲,this是一个指向本对象的指针,而super是一个Java关键字

static

意义:1)创建独立于具体对象的域变量或者方法,以至于即使没有创建对象,也能使用属性和调用方法

        2)形成静态代码块以优化程序性能,static代码块可以置于类中任何地方,类中可以有多个static块。在类初次被加载时,会按照顺序来执行每个static块,并且只会执行一次。

特点:1)被static修饰的变量或者方法是独立于该类的任何对象,即这些变量和方法不属于任何一个实例对象,而是被类的实例对象所共享。

2)static修饰的部分只在类第一次加载时执行进行初始化,后面根据需要可以再次赋值;

3)static变量值在类加载时分配空间,以后创建类对象的时候不会重新分配。(可任意赋值)

4)static修饰的变量或方法优先于对象的存在,即类加载后即使没有创建对象也可以通过类名去访问;

应用场景:static是被类的实例对象所共享,因此如果某个成员变量是被所有对象所共享,就可以将其定义为静态变量

注意事项:1、静态只能访问静态;2、非静态既可以访问非静态也可以访问静态;

五、流程控制语句

break、continue、return的区别及作用

break:直接结束一个循环,跳出循环体;break以后的循环体中的语句不会继续执行,循环体外面的会执行。

continue:中止本次循环,继续下次循环;continue以后的循环体中的语句不会继续执行,下次循环继续执行,循环体外面的会执行。

return:return的功能是结束一个方法;一旦在循环体内执行return,将会结束该方法,循环自然也随之结束。与continue和break不同的是,return直接结束整个方法,不管这个return处于多少层循环之内。

例题:在Java中如何跳出当前的多重嵌套循环?

          可以在外面的循环语句前定义一个标号,然后在里层循环体的代码中使用带有标号的break语句,即可跳出外层循环,如下:

public static void main(String[] args) {
    ok:
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 10; j++) {
            System.out.println("i=" + i + ",j=" + j);
            if (j == 5) {
                break ok;
            }
 
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值