欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

java语言基础(面试相关),java语言基础面试

来源: javaer 分享于  点击 5571 次 点评:169

java语言基础(面试相关),java语言基础面试


1.java语言有哪些特点?

2.什么是java的字节序?

java字节序指的是在java虚拟机中多字节类型数据的存放顺序,java字节序是Big-Endian(大端)。

3.java中的final关键字?

finally:


接口可以多实现,继承只能单继承


形参和实参的区别?

形参:

全称为“形式参数”,是定义方法名和方法发体的时候调用的参数,木的是用来接收该方法时传递的参数,它的作用范围是整个方法体,实在方法调用时的一个临时变量,实参出先在主调方法中,在方法调用的时候把是惨的值赋给对应的形参,在被调用的方法的内部只能使用形参,不能使用形参。

实参和形参的区别:

&和&&的区别?

1.&是按位与操作符,a&b是把a和b都转换成二进制数后,然后再进行按位与的运算。而&&是逻辑与的运算符,a&&b就是当二个数的值都为true时结果才为true,否则结果为false;
2.此外&&还有短路的作用,在参与运算的二个表达式中,只有当第一个表达式的结果为true时,才会继续计算第二个表达式的值。

可变参数

示例:

String… a,其中string是可变参数的类型,a是其名称
特点:
1. 只能作为最后一个参数出现,
2. 只能位于变量的类型和变量名之间。String… a;
3. 编译器为可变参数隐式的创建了一个数组,在调用的时候可以通过数组的形式来访问可变参数

获取Class(字节码对象)对象的三种方法

访问修饰符

在java语言中,类的权限访问修饰符有以下几种:private default protected public。

面向对象的三大特性?

this和super?

关键字this指的是当前对象的引用 关键字
super指的是当前对象里面的父类的应用
通果super可以调用父类的构造方法,父类的方法和属性

实例方法和类方法?

详解:

实例方法:
当类的字节码文件加载到内存中时,类的实例方法并没有被分配入口地址,只有当该类的对象创建以后,实例方法才分配了入口地址。从而实例方法可以被类创建的所有对象调用,还有一点需要注意,当我们创建第一个类的对象时,实例方法的入口地址会完成分配,当后续在创建对象时,不会再分配新的入口地址,也可以说,该类的所有对象共享实例方法的入口地址,当该类的所有对象被销毁,入口地址才会消失。
类方法:
当类的字节码文件加载到内存,类方法的入口地址就会分配完成,所以类方法不仅可以被该类的对象调用,也可以直接通过类名完成调用。类方法的入口地址只有程序退出时消失。

遵循的规则:

1.在类方法中不能引用实例变量
实例变量的定义类似实例方法,没有用static修饰的变量,实例变量的创建与实例方法的创建相同,也是在类的对象创建时完成,所以在类方法中是不能引用实例变量的,因为这个时候实例变量还没有分配内存地址。

2.在类方法中不能使用super和this关键字
这是因为super和this都指向的是父类和本类的对象,而在类方法中调用的时候,这些指代的对象有可能都还没有创建。
3. 类方法中不能调用实例方法

注意:

String StringBuffer 和StringBuilder的区别?

1.可变和不可变
String类中提供了数值不可改变的字符串。
StringBuffer和StringBuilder的字符串是可以被改变的
2.有没有重写equals和hashcode方法
String重写了equals和hashcode方法

3 三者的执行速度:

StringBuilder>StringBuffer>String

原因:

String是字符串常量
StringBuilder和StringBuffer是字符串变量

从上面的名字可以看到,String是“字符创常量”,也就是不可改变的对象。对于这句话的理解你可能会产生这样一个疑问 ,比如这段代码:

1 String s = "abcd";
2 s = s+1;
3 System.out.print(s);// result : abcd1

    我们明明就是改变了String型的变量s的,为什么说是没有改变呢? 其实这是一种欺骗,JVM是这样解析这段代码的:首先创建对象s,赋予一个abcd,然后再创建一个新的对象s用来执行第二行代码,也就是说我们之前对象s并没有变化,所以我们说String类型是不可改变的对象了,由于这种机制,每当用String操作字符串时,实际上是在不断的创建新的对象,而原来的对象就会变为垃圾被GC回收掉,可想而知这样执行效率会有多底。
    而StringBuffer与StringBuilder就不一样了,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,这样就不会像String一样创建一些而外的对象进行操作了,当然速度就快了。
3.一个特殊的例子:

1 String str = “This is only a” + “ simple” + “test”;
2 StringBuffer builder = new StringBuilder(“This 
is only a”).append(“ simple”).append(“ test”);

    你会很惊讶的发现,生成str对象的速度简直太快了,而这个时候StringBuffer居然速度上根本一点都不占优势。其实这是JVM的一个把戏,实际上:


String str = “This is only a” + “ simple” +“test”;

    其实就是:
   

 String str = “This is only a simple test”;

    所以不需要太多的时间了。但大家这里要注意的是,如果你的字符串是来自另外的String对象的话,速度就没那么快了,譬如:  

       String str2 = “This is only a”;

    String str3 = “ simple”;

    String str4 = “ test”;

    String str1 = str2 +str3 + str4;

    这时候JVM会规规矩矩的按照原来的方式去做。

4.StringBuilder与 StringBuffer

StringBuilder:线程非安全的
StringBuffer:线程安全的

    当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。

对于三者使用的总结

1.如果要操作少量的数据用 = String
2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer

重载和重写的区别?

重载:

指同一个类中的多个方法具有相同的名字,但是这些方法具有不同的参数列表,级参数的数量和类型不能完全相同,返回值类型可以相容也可以不相同。

规则:

重写:

父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写。

规则:

重载和重写的区别?重载的方法能否根据返回类型进行区分?

方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求,不能根据返回类型进行区分。

转发和重定向的区别?

Throw和Throws的区别?

用户程序自定义的异常和应用程序特定的异常,必须借助Throws和Throw语句来抛出异常。
当需要显示的抛出一个异常(通常情况下是用户自定义的异常)时,需要使用关键字Throw来抛出异常,而关键字throws用来列出一个方法可能会抛出的异常类型。
示例:

class MyException extends Exception{}
public class Test{
//告诉方法的调用者这个方法可能会抛出MyException异常
public void f(int i) throws MyException{
if(i==1)
当满足条件的时候抛出自定义的异常
throw new MyException();
    }
}

二者其他的不同:

java中final、finally和finalize的区别是什么?

public class  Test{
    public static void main(String[] args) {
        final StringBuffer s=new StringBuffer("hello");
        s.append("world");
        System.out.println(s);
    }
}

运行结果为:
hello world
public class  Test{
    public static void main(String[] args) {
        final StringBuffer s=new StringBuffer("hello");
       s=new StringBuffer("hello world");
    }
}

编译期间错误

从以上的例子可以看出,final指的是引用的不可变性,即她只能指向初始时指向的对象,而不关心指向的对象的内容,所以,被final修饰的变量必须被初始化。
初始化的几种方式:

3.在类的构造器中初始化,但静态final成员变量不可以在构造方法中初始化

final方法:的当一个方法被声明final时,该方法不允许任何子类重写该方法,但子类仍然可以使用这个方法,
final参数:用来表示这个参数在方法的内部不允许被修改
fianl类:当一个类被生命为final时,此类不能被继承,所有的方法都不能被重写,但这并不是说final类的成员变量也是不可改变的,要想做到final类的成员变量也是不可改变的,必须给成员变量增加final修饰。
注意:一个类不能即被修饰为abstract又被修饰为final。

Tomact优化经验

Http请求的get方式和post方式的区别?

forward和redirect的区别

forward是服务器请求资源,服务器直接访问目标地址的url,把那个url的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容来自哪里,所以它的地址栏还是原来的地址。
redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新取请求那个地址,一般来说浏览器会用刚才请求的参数重新请求,所以,session和request参数都可以获取。

相关文章

    暂无相关文章
相关栏目:

用户点评