1:对java中的面向对象的理解?
Java是一门面向对象的语言,我们把这世间的一切都看成是一个个的对象,而在这些对象中,把具有相同或者相似的性质或功能的个体抽象出来看成是一类。而这些类只是通过简单的接口跟外界发生关系,具体操作和行为只有通过对象来实现。对象中包含有静态的属性和动态的行为。
程序是对象的集合,它们通过消息来告知彼此所要做的,对象跟对象之间也是如此。
每个对象都有其类型,具有相同类型的所有对象可以接收同样的消息。
2:java中对“一处编译,到处运行”的理解?
这是因为Java不受操作系统平台的约束,Java中的类编译后为一个class文件,而class是运行在JVM(Java Virtual Machine:Java虚拟机)上的,并不是直接在操作系统上运行的。因此,基本上可以做到一处编译,到处运行的效果。
3:path和classpath的理解?
Path是用来配置应用程序文件exe的目录,如java中的bin目录;
Classpath一般情况下是不用配置classpath的(jdk5及后续版本),但是如果我们想在任何情况下都能找到class文件,那么就可以通过set classpath=你class文件的存储路径
4:对象和对象的引用?
Java中一切都被视为对象,但是操纵的标识符实际是对象的一个“引用”(reference),而非对象本身。
如:
String s ; 其中s是一个引用而非对象。
如:
String s = new String(“lts”);
其中new创建了一个对象, 然后将此对象指向引用s;
String s = “lts”;
如果是String的话可以直接用带有双引号的文本初始化,其中lts也是一个对象,这用到了Java语言的一个特性。
5:关于对象的存储问题?
1)寄存器。这是最快的存储区,因为他位于不同于其他存储区的地方——处理器内部。但是寄存器的数量有限,所以寄存器根据需求进行分配。因此,
你不能直接控制,同时也不能再程序中感觉到寄存器存在的任何迹象。对此,我寄存器不予任何考虑,但是要知道有这东西存在即可。
2)堆栈。位于通用RAM(随机访问存储器)中,通过堆栈指针可以从处理器获得直接支持。堆栈是一种有效的存储方法,仅此于寄存器。
由于Java系统必须知道存储在堆栈内所有项的确切的生命周期,以便上下移动堆栈指针。这一约束也限制了程序的灵活性,所以虽然某些Java数据存储于堆栈中——尤其是对象的引用,但是Java的对象并不存储于其中。基本数据类型的变量直接存储的是”值”,并且存放于堆栈中。
3)堆。一种通用的内存池(位于RAM区),用于存放所有的Java对象。好处:编译器不需要知道存储的数据在堆里的存活的时间。不好:在分配存储和清除时需要更多的时间。
4)常量存储。常量值通常直接存放在程序代码内部。有时候可以将常量存放在ROM(只读存储器)中。
5)非RAM存储。数据完全存活于程序之外,不受程序的任何控制,在程序没有运行也可以存在。如流对象和持久化对象。
6:基本数据类型?
基本类型
大小(字节/位)
最小值
最大值
包装器类型
boolean
-
-
-
Boolean
byte
1/8 bits
-128
127
Byte
char
2/16 bits
Unicode 0
Unicode 216-1
Character
short
2/16 bits
-215
215-1
Short
int
4/32 bits
-231
231-1
Integer
long
8/64 bits
-263
263-1
Long
float
4/32 bits
IEE754
IEE754
Float
double
8/64 bits
IEE754
IEE754
Double
void
-
-
-
Void
7:对象的作用域?
当使用new创建一个对象,它(对象)可以存活于作用域之外。但是引用却在作用域终点就结束了。
那么如何才能避免过多的对象而造成的内存泄露的问题呢,也就是说靠什么才能防止对象填满内存空间呢。
这就需要Java中的垃圾回收器了,它是用来监视由new创建的所有对象,并辨别哪些不会被引用的对象。
8:this和static 关键字?
this关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用,this跟其他对象的引用具有相同的用法。只在必要处才使用this。
public class Leaf
{
int i;
Leaf
increment(){
i++;
return this;
}
void print(){
System.out.println("i = "+i);
}
public static void main(String[] args){
Leaf leaf = new Leaf();
leaf.increment().increment().increment().print();
}
}
This关键字对于将当前对象传递给其他方法也有用;为了将自身传递给外部方法,就必须使用this关键字。
在构造器中调用构造器,置于第一行,只能调用一个构造器;
当参数的名称和数据成员的名称相同时,可以使用this来指定数据成员。
9:static关键字的用法?
不能在static方法里使用this关键字;
不能在static方法中调用非static方法,反过来是可以的,这是因为static方法是不属于某个对象的,而非static方法是属于具体的某个对象,static方法在类加载时就初始化了,而非static方法必须通过创建对象,然后通过对象调用。
但是也并非不能完全去调用非static方法,如果你传递一个对象的引用到静态方法里,然后通过这个引用就可以去访问非静态的成员和非静态的方法了。
static修饰的成员变量也叫类变量或全局变量,在类被加载时static修饰的成员变量被初始化,与类关联,只要类存在,static变量就存在。一个static变量单独划分一块存储空间,不与具体的对象绑定在一起,该存储空间被类的各个对象所共享。也就是说当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例对象共用同一个static变量。static修饰的成员变量能在创建任何实例对象之前被访问,而不必引用任何对象,也就是说不管创建多少对象,static修饰的变量只占有一块内存。
10:&和&&的区别?
&做两种解释,一种是按位与,另一种是且;
按位与:转成二进制,然后做运算,都是1的数值位仍为1,其余都为0,最后在转成十进制。
逻辑且:做逻辑判断,判断条件中的所有条件都要判断,不论前面已经判断好了的条件是返回true还是false;
&&逻辑判断且,跟&最大区别是,只要判断条件中有一个为false,其余条件就不在判断了。它也叫“短路”与。
11:移位操作符
左移<<=, 变大; 右移>>=, 变小
有>>>=符号,
没有<<<=符号