Java基础(一)

一、一个“.java”源文件中是否可以包含过个类?
两种情况
1、内部类
(1)在类中定义一个类(私有内部类、静态内部类)
(2)在方法中定义一个类(局部内部类、匿名内部类)
2、可以多个,但是只能有一个public的类,并且public的类名必须与文件名相同

二、实际项目中&与&&的相同点与不同点
相同点:&和&&都可以作为逻辑与的运算符,表示逻辑与(and)
当运算符两边的表达式的结果都为true时,整个运算结果才为true,反之有一方为false,则结果为false。

不同点:
&&短路功能:即如果第一个表达式为false,则不再计算第二个表达式。例如:if(a!=null&&b!=null)表达式,当a为null时,后面的表达式不会执行,b!=null不用管。

&位运算符:参与运算的两个数值将按二进制进行与运算。如果两个相应的二进位数为1,则该位的结果为1否则为0 即:1&1=1,1&0=0,0&0=0,0&1=0 3&5=00000011&00000101=00000001=1

if(a!=null&&!a.equals(""))可以防止空指针异常

三、switch语句是否能用在byte上,long上,String上?
1、switch语句由一个控制表达式和多个case标签组成
2、switch控制表达式支持的类型有byte、short、char、int、enum(Java5)、String(Java7)
3、switch-case语句完全可以与if-else语句互转,但是通常来说前者的执行效率更高。default在当前switch找不到匹配的case时执行,default并不是必须的。
4、一旦case匹配,就会顺序执行后面的代码,而不管后面的case是否匹配,知道遇到break。
5、同样支持byte、short、char、int他们对应的包装类

四、Java基本数据类型之间的级别转换考题
short s1=1;s1=s1+1;有什么错误?
short s1=1;s1+=1;有什么错误?
对于short s1=1;s1=s1+1;由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。
对于short s1=1;s1+=1;由于+=是Java语言规定的运算符,Java编译器会对其进行特殊处理,因此可以正确编译。

五、Java中char类型变量中能不能贮存一个中文汉字?为什么?
可以!
1、char型变量是用来存储Unicode编码的字符的,Unicode编码字符集中包含了汉字,所以char型变量当然可以存储汉字
2、如果某个特殊的汉字没有被包含在Unicode编码字符集中,那么这个char类型变量中就不能存储这个特殊汉字
3、Unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。

六、用最有效的方法算出2乘以32等于?
2<<5 位运算
1、将一个数左移n位,就相当于乘以2的n次方;
2、一个数乘以8将其左移3位即可,位运算时CPU直接支持的,效率最高

七、使用Final关键字修饰一个变量时,是引用不能变?还是引用的对象不能变?
引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。
是引用对象的地址值不能变,引用变量所指向的对象的内容是可以改变。
final变量永远指向这个对象,是一个常量指针,而不是指向常量的指针。
例如:final StringBuffer sb= new StringBuffer(“abc”);
在对其进行重新赋值
sb= new StringBuffer(“”);
会出现编译错误,被final修饰的变量是不能被重新赋值的。
sb.append(“d”);
是可以编译通过的;

八、静态变量(类变量)和实例变量都是什么?
1、首先在语法定义上区别:静态变量前面要加static,实例变量不用。
2、在程序运行时:实例变量输入对象的属性,必须创建了实例对象(如 new)才会被分配空间,才可以使用实例变量,静态变量不属于某个实例对象,而是属于类,也叫类变量,只要程序加载了类的字节码,不用创建任何实例对象就会被分配空间,就可以被使用。静态变量被该类的所有对象共用。
3、总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用

九、从一个static方法内部能不能发出对非static方法的调用,Java能实现吗?
不可以!
1、非static方法是要与对象关联在一起的,必须创建对象后才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。
2、当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法内部发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?所以不可以!

十、Integer与int的区别?对象类型?基本类型?
1、int是Java提供的8种原始数据类型之一。Java为每个原始类型提供了封装类,Integer是Java为int提供的封装类。
四个整数类型:byte(8)、short(16)、int(32)和long(64)
两个浮点类型:float(32)、double(64)
一个布尔类型:boolean
一个字符类型:char(16)

字节:byte 位:bit 1 byte=8 bit

2、int的默认值是0,Integer的默认值是null,即Integer可以区分未赋值和值为0的区别,int则无法表达出未赋值的情况
3、Integer的默认值是null,所以用el表达式在文本框中显示时,值为空白字符串,而int则会显示0,所以int不适合作为web层的表单数据的类型。
4、Integer提供了多个与整数相关的操作方法,比如将一个字符串转为整数,Integer中还定义了表示整数的最大值与最小值。
5、 在使用ORM框架(mybatis,hibernate…)的时候,我们都需要定义一个JavaBean来映射数据表,整数是我们经常要用到的数据类型,在以前,我只知道数据库中整数类型的数据在java中可以定义成int或Integer类型,当定义成int或Integer类型时,对数据的存储并没有什么影响,可是到了获取数据的时候出现了错误。
昨天发现明明数据中没有数据,可还是查出了数据。并且为0,怎么找都没用,后面发现定义为int会有默认值0,定义成Integer类型就不会出现上面的情况,因为引用数据类型的默认值是null

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值