一、基本知识
1.与或非三个逻辑运算符的优先级是怎么排列的?
“非”优先级最高,”与”其次,”或”优先级最低
2.原码,反码,补码分别是什么意思?
· 原码:将数字转换为二进制,第一位为符号位,正数为0,负数为1
例如:12的原码是00001100 -12的原码是10001100
· 反码:正数的反码和原码相同,负数的反码将原码符号位之外的位逐位取反
例如:12的反码是00001100 -12的反码是11110011
· 补码:正数的补码和原码相同,负数的补码将反码加1
例如:12的补码是00001100 -12的补码是11110100
最后强调一点,计算机存储数据用补码形式来存储。
二、位运算及
1.位运算符都有哪些?
&与 |或 ^异或 ~非 >>右移 <<左移 >>>无符号右移
2.1<<35怎么理解?
1是int类型是32位(4字节),所以需要把35%32=3,事实上和执行1<<3等价
3.数据类型转换需要遵循什么原则?
小类型向大类型转换,是自动转换的,或者说隐式转换的
大类型向小类型转换,是需要强制转换的,或者说显式转换
例如:
byte b = 1;
short s = b;//自动转换
b = (byte) s;//强制转换
4.byte b = 10这个语句是正确的,为什么10是int型比byte大还不需要强制转换呢?
因为在java中做了特殊处理,其中规定byte,short,char类型可以直接赋予int类型的直接量,
例如:
byte b = 10;
short s = 10;
char c = 10;
以上赋值语句都是正确的。
但是不能超出超出类型的范围(byte占1字节),例如以下赋值就是错误的:
byte b = 128;
如果超出范围,必须得作强制转换,例如以下语句是正确的:
byte b = (byte) 128;
需要强调的是,必须是int类型的直接量,以下语句就是错误的:
byte b = 10L;
10L不是int类型的直接量
5.byte b = (byte) 300;强制转换后的结果是44,是按照什么规律得出来的?
是先把300转换成二进制,然后根据byte类型的大小截取了后8位
300的补码是00000000 00000000 0000000100101100
b的结果是:00000000 00000000 00000001 00101100 结果为44
6.byte b = (byte) true;这个转换成立吗?
不成立,布尔值和数字是不兼容的,不能作任何转换。
7.int i = (int) “100″;这个转换成立吗?
不成立,引用类型和基本类型是不能直接强制转换的,需要用包装类的方法来转换。
8.char型和short型哪个比较大?
不能说哪个大,哪个小,这两个类型char的取值是从0~65535,而short类型的取值是-32768~32767,这个两个类型之间的转换都需要强制转换。
9.字符串是不是基本类型?
不是,String是java.lang包中的一个类,是引用类型的,8种基本类型中没有一个是String类型。
10.空字符串用什么来表示?
用“”(两个并列的双引号)表示,代表0个长度的字符串对象。
11.String s = “”;和String s = null;有什么区别?
第一个表示s被赋值,指向了一个字符串对象,第二个表示s没有指向任何对象实例,是真空
12.两个字符串用什么运算符可以连成一个字符串?
用+运算符,例如“abc” + “xyz”最后的结果就是”abcxyz“
13.数学运算符加法和字符串连接符都是+,怎么区分?
是通过运算符两边的操作数来判断的,如果两边的操作数都是数字型的基本类型,则进行数学运算,如果两边的操作数有一个是字符串,则把另一个操作数也转换为则进行字符串连接运算。
例如:
5 + 4 的结果是9
“5″ + 4的结果是54
14.判断字符串内容相同用什么方法?
用equals方法判断内容相同,==只能判断引用是否相同
15.提供用户输入使用哪个类
使用javav.util.Scanner类
16.if语句可以用if(-1)形式判断吗?
不可以,数字不能代替布尔值
17.if语句和循环语句的花括号什么时候可以省略?
当执行的语句只有一句的时候
18.switch语句有哪些规则?
表达式expr的返回值必须是下述几种类型之一:int, byte, char, short或枚举常量;
case子句中的值必须是常量,且所有case子句中的值应是不同的,也必须是下述几种类型之一:int, byte, char, short或枚举常量
default子句是任选的;
break语句用来在执行完一个case分支后使程序跳出switch语句块;
19.对于退出循环break和continue有什么区别?
break是退出整个循环
continue是退出当前循环继续下一次循环
三、数组
1.声明数组创建数组的方法?
以下声明都是合法的:
int [] a;
int a[];
String[] a;
以下创建数组对象都是合法的:
int[] a = new int[3];
int[] a = {1,2,3};
int[] a = new int[] {1,2,3};
2.int[] x和String[] s这两个数组对象,哪个是基本类型,哪个是引用类型?
两个都是数组对象,都是引用类型的
3.数组元素下标最小是多少,最大是多少,超出范围会怎么样?
最小是0,最大是数组元素个数减一,超出范围将会出现下标越界异常
4.得到数组长度用length属性还是length()方法?
是length属性,得到字符串长度才有length()方法
5.声明int[][] a = new int[3][],a是一个二维数组,a[0]本身是什么类型的?
二维数组的元素都是一维数组,a[0]是int[]类型的
6.数组的大小一经创建可不可以改变大小了?
不可以,数组是定长的,一经创建就不能再改变大小了
7.可以把2个int型,3个double型,4个String型的值放到一个数组中吗?
不可以,数组的元素类型必须是相同类型的。
8.java中的多维数组必须是要形成矩阵排列吗?
不一定,也可以是不规则的。
9.操作数组比较方便的实用类?
java.util.Arrays类提供了很多关于数组的实用方法
四、对象和类
1.OOP是什么意思?
Object Oriented Programming(面向对象编程)
2.类和对象的区别?
类:对象的蓝图,生成对象的模板,是对一类事物的描述,是抽象的概念上的定义
对象:对象是实际存在的该类事物的每个个体,因而也称为实例
3.类之间的3种关系?
依赖关系(uses-a)
聚集关系(has-a)
继承关系(is-a)
4.一个java源文件可以写多个类吗?
可以,但必须只能有一个公有类,并且文件名和公有类的类名相同。
5.类中有哪些成员?
有属性(数据域),方法,构造器(构造方法)
6.构造方法和普通方法的区别?
构造方法没有返回值,方法名必须和类名相同,需要用new语句调用构造方法。
7.普通方法可不可以也用类名作为方法名?
是可以的,因为调用普通方法的语法和调用构造器的语法不一样。
8.一个构造器调用另外一个构造器需要用什么语法?
用this()语法调用另外一个重载构造器,需要注意的是调用语句必须是构造器中的第一句
9.什么时候虚拟机会自动添加一个默认构造器?
当类中没有显式定义任何构造器的时候,虚拟机会自动添加一个无参的构造器
10.实例成员和静态成员的区别?
实例成员:是属于对象实例的,用对象.成员名称语法调用
静态成员:和对象实例无关,是属于类本身的,用类名.成员名称语法调用
11.静态初始化块statci{}的执行时机是什么时候?
在类被加载的时候,仅执行一次。
12.静态方法可不可以直接调用同一个类中的非静态成员?
不可以,静态方法不能直接调用一个非静态成员,需要用对象调用。
13.包是什么?
包实际上就是物理上的文件夹,可以把类放到不同的包中。
14.把一个类放到包中,需要在类中加上什么语句?
需要加上包声明package语句,必须写在源文件的第一句。
15.什么时候需要导入类?用什么语句?
当使用的类和当前类并不在同一个包中的时候,用import语句导入。
16.默认包中的类可以导入吗?
不可以,不在默认包中的类无法使用默认包中的类。
17.java中哪个包中的类是自动导入的?
java.lang包
18.什么叫做完整类名?
顶层包名.子包名.类名
19.静态导入语句有什么作用?
在使用类中的静态成员的时候前面不需要加类名前缀。
20.局部变量和全局变量的区别?
区别 | 局部变量 | 全局变量 |
声明位置 | 方法或块内部 | 方法外类内部 |
访问权限修饰符 | 没有访问权限 | 有访问权限 |
默认值 | 没有默认值 | 有默认值 |
使用形式 | 直接使用 | 对象调用 |
作用域 | 在方法或语句块内部 | 整个类 |
生命周期 | 进入方法或语句块创建退出方法或语句块销毁 | 随着对象的创建而创建随着对象的销毁而销毁 |