Java面试——基础
1,作用域,Java只有public,protect,private,默认是default相当于friendly
| 作用域 | 当前类 | 同一package | 子类 | 其它package |
| public | T | T | T | T |
| protect | T | T | T | F |
| private | T | F | F | F |
| default | T | T | F | F |
值得注意的是默认default,同一个package下的其它类可以访问,当如果是子类就不可以访问。
2,String
- String str = new String("hello");究竟做了什么,与String str="hello"
String str = "hello"; 如果内存中已经为hello字符串分配了内存,那么str指向hello内存对象的地址;
String str = new String("hello"); 内存中重新分配一片内存区域存放hello, 然后str指向hello,也就是内存中实际有2个hello对象,而且存放的地址不一样
String str1 = "hello";
String str2 = "he" + new String("llo");
System.err.println(str1 == str2);
输出是false. == 比较的是对象的地址,str1是指向hello的引用,而str2是指向he的和llo地址的地址的引用。
equals()比较的是对象的内容。
3,基本数据类型
boolean:false
byte: 0,-128-127
int:0,4个字节,-2的31次方-2147483648,2的31次方
short:0,2个字节,-2的15次方-32768,2的15次方-1,-1:32767
long:0L.64位
float:0.0,
初始化时:float f = 1.0f;
double:0.0,
object:null,
char:/u0000
char a = 10;//打印a,什么都没有
char s = '2';//打印s,2
自动装箱和自动拆箱:
Integer i = 10; //装箱
int n = i; //拆箱- 0.6332的数据类型是()
A float B double C Float D Double
答案:B
解析:默认为double型,如果为float型需要加上f显示说明,即0.6332f
存在使i + 1 < i的数吗()
答案:存在
解析:如果i为int型,那么当i为int能表示的最大整数时,i+1就溢出变成负数了,此时不就<i了吗。
扩展:存在使i > j || i <= j不成立的数吗()
答案:存在
解析:比如Double.NaN或Float.NaN
- 下面程序的输出结果
public class Example {
String str = new String("good");
char[] ch = { 'a', 'b', 'c' };
public static void main(String args[]) {
Example ex = new Example();
ex.change(ex.str, ex.ch);
System.out.print(ex.str + " and ");
System.out.print(ex.ch);
}
public void change(String str, char ch[]) {
str = "test ok";
ch[0] = 'g';
}
}
原因
A、 good and abc
B、 good and gbc
C、 test ok and abc
D、 test ok and gbc
答案:B
解析:大家可能以为Java中String和数组都是对象所以肯定是对象引用,然后就会选D,其实这是个很大的误区:因为在java里没有引用传递,只有值传递。这个值指的是实参的地址的拷贝,得到这个拷贝地址后,你可以通过它修改这个地址的内容(引用不变),因为此时这个内容的地址和原地址是同一地址
public static void main (String[] args){
String s;
System.out.println("s=" + s);
} 不能编译通过,所有定义的基本类型或对象都必须初始化才能输出值。- String 类是final类,不可以被继承
- 传值调用
Java中只有传值调用。
- String和StringBuilder、StringBuffer的区别
String是final类,只能销毁重新建立,不能append
StringBuffer是StringBuilder线程安全版,可以后续添加,不会重新建立对象。效率较高。
4,Java平台无关
Java平台无关指的是Java源文件被编译成字节码文件,不管操作系统,只要有Java虚拟机就可以运行。
5,java程序究竟是怎么执行的

JVM获取一个含有main方法的类,用顶层的类加载器Bootstrap启动两个ExtClassLoader和AppClassLoader,AppClassLoader加载main()方法类,校验检测,然后启动main()线程处理此方法,进行分配资源和新的按需加载新类,依次重复,直至遇到程序结束条件。
6.面向对象
构造函数:
规则:与类同名,没有返回值,可以定义多个(参数个数,顺序,类型),初始化资源。但不通过构造函数也可以创建对象,可以使用clone()
对象的初始化顺序:(1)类加载之后,按从上到下(从父类到子类)执行被static修饰的语句;(2)当static语句执行完之后,再执行main方法;(3)如果有语句new了自身的对象,将从上到下执行构造代码块、构造器(两者可以说绑定在一起)。
封装、继承和多态
封装:提供接口,封住关注实现细节,提供给外部调用的API,而抽象关注功能,忽略细节
继承:丰富功能,有规范,体现逻辑关系。
多态:同一行为有多个形式。允许不同类的对象对同一消息做出响应。严格来讲多态是类的特性,例如以下:
AbstractCollection<String> a = new LinkedList<String>();
List<String> b = new LinkedList<String>();
但注意a和b的不同:编译时a会被认为是AbstractCollection对象,所以当a用LinkedList的独有方法时会编译不通过,但b在编译期就会被认为是LinkedList对象,可以使用LinkedList的独有方法
对方法来讲,多态指的是方法的重载和覆盖。
方法重载:一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。
注意,Java的方法重载要求同名的方法必须有不同的参数表,仅有返回类型不同是不足以区分两个重载的方法。
方法覆盖:子类重写父类的方法。
抽象类和接口
抽象类:public abstract class ClassName(){
abstract void function(); //为了让子类能够继承默认情况下是public类型
int add(int a,int b){
return a+b;
}//也可以有具体实现的方法。
}
子类继承抽象类,必须实现其所有抽象方法。除非子类也是抽象类。
接口:public interface InterfaceName(){
int variables;//只能指定为public static final,不能被修改
int add(int a,int b);//只能是抽象方法。类如果实现接口必须实现接口所有的抽象方法。
}
抽象类和接口:
相同点:继承抽象类的子类或者实现接口的类必须重写其所有抽象方法
不同:1,方法:抽象类可以定义有实体的方法,接口不可以
2,变量,抽象类可以定义属性,接口中定义的变量一定是static final类型,只可以引用,不可以被修改
3,抽象类只能单类继承,接口可以多重实现。
4,接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
设计理念:抽象类是对类的抽象,是继承其所有类的模板,有属性有方法。而接口是对局部行为的抽象,类可以有多种行为,故可以实现多重接口。
继承子类和父类的执行顺序
class People {
String name;
public People() {
System.out.print(1);
}
public People(String name) {
System.out.print(2);
this.name = name;
}
}
class Child extends People {
People father;
public Child(String name) {
System.out.print(3);
this.name = name;
father = new People(name + ":F");
}
public Child() {
System.out.print(4);
}
}
new Child("mike")
输出:132
执行顺序:总之,一句话:子类没有显示调用父类构造函数,不管子类构造函数是否带参数都默认调用父类无参的构造函数,若父类没有则编译出错。
7,Java关键字
transient:不会被序列化
static:Java中是否可以覆盖(override)一个private或者是static的方法?
"static"关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。
Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。
static方法跟类的任何实例都不相关,所以概念上不适用。
8,GC
名词解释:
年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC
Major GC 是清理永久代。
Full GC 是清理整个堆空间—包括年轻代和永久代。
垃圾回收机制在什么时候运行?
系统自身决定,不可预测的时间/调用System.gc(),具体来讲,新生代对象区满时,当升级的老年代对象大于老年代占用的空间,
从gcroot搜索已经不可达标记过重新扫描仍然没有复活,
垃圾回收的对象是什么?
从gcroot搜索不到,而且经过第一次标记、清理后,仍然没有复活的对象。垃圾回收回收的是无任何引用的对象占据的内存空间而不是对象本身
垃圾回收的机制?
9,JDK JRE
JDK:开发环境,有各种工具包,包括jre
JRE:运行环境,包括jvm.
10,java控制语句
switch:case如果没有break,从适合的条件下依次运行。输入为2时,case2开始执行,case3执行。最后返回10。
public static int getValue(int i) {
int result = 0;
switch (i) {
case 1:
result = result + i;
System.out.println(1+":"+result);
case 2:
result = result + i * 2;
System.out.println(2+":"+result);//打印
case 3:
result = result + i * 3;
System.out.println(3+":"+result);//打印
}
return result;
}
Java面试——基础的更多相关文章
- JAVA面试基础
JAVA相关基础知识1.面向对象的特征有哪些方面 ?1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂 ...
- java面试基础题(三)
程序员面试之九阴真经 谈谈final, finally, finalize的区别: final:::修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此 ...
- Java面试基础部分合集
写在前面:这篇文章对于在Java方面已经很牛逼的大手,就没必要看了,因为对于你们来说,这tm简直太简单了.... 面试我们都经历过,你真的懂面试吗?针对面试我只想说一点,面试的目的不是让考官知道你怎么 ...
- Java面试基础概念总结
面向对象软件开发的优点有哪些? 答:开发模块化,更易维护和修改:代码之间可以复用:增强代码的可靠性.灵活性和可理解性. 多态的定义? 答:多态是编程语言给不同的底层数据类型做相同的接口展示的一种能力. ...
- JAVA 面试基础
经典的Java基础面试题________________________________________________________________________________________ ...
- Java 面试基础总结(一)
1.九种基本数据类型的大小以及它们的封装类 java提供的九种基本数据类型:boolean.byte(1).char(2).short(2).int(4).long(8).float(4).doubl ...
- java面试②基础部分
2.1.3 讲一下java中int数据占几个字节 java中有几种基本数据类型? 2.1.4. 面向对象的特征有哪些方面 有四大基本特征:封装.抽象.继承.多态 1)封装,即将对象封装成一个高度自治和 ...
- java面试基础篇(一)
最近想深入的理解一下java 的工作机制,也是便于后期的面试. 1.A:HashMap和Hashtable有什么区别? Q:HashMap和Hashtable都实现了Map接口,因此很多特性非常相似. ...
- java面试基础篇(三)
1.Q:ArrayList 和 LinkedList 有什么区别? A:ArrayList查询快!LinkedList增删快.ArrayList是基于索引的数据接口,它的底层是数组.空间占用相对小一些 ...
- java面试基础必备
一.Java基础 1. String类为什么是final的. 2. HashMap的源码,实现原理,底层结构. 3. 说说你知道的几个Java集合类:list.set.queue.map实现类咯... ...
随机推荐
- Java Random
第一种情况 Random rand = new Random(47); for(int i=0;i<10;i++) System.out.println(rand.nextInt(100)); ...
- Instant Complexity(模拟,递归)
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 1535 Accepted: 529 Description Analyz ...
- java数组学习
1. java数组的静态特性: java是静态语言,java中数组的长度是固定的.还有,数组元素的类型也是在定义时指定了的. 2. java数组里的关键词: 数组变 ...
- Linux系统下用户行为审计
以下内容在RHEL 6.4下测试通过. 1.编写脚本Command_history.sh,生产历史命令记录文件,内容如下 #!/bin/bash [ -d /usr/lib/.cmdlog ] || ...
- C#导出数据的EXCEL模板设计
一:将如下图中,查询出来的数据导出到EXCEL中 二:Excel的状态 三:设计的背后工作 四:最后一步,隐藏
- Java三十个面试题总结
都是一些非常非常基础的题,是我最近参加各大IT公司笔试后靠记忆记下来的,经过整理献给与我一样参加各大IT校园招聘的同学们,纯考Java基础功底,老手们就不用进来了,免得笑话我们这些未出校门 ...
- python2.+进化至python3.+ 语法变动差异(不定期更新)
1.输出 python2.+ 输出: print "" python3.+ 输出: print ("") 2.打开文件 python2.+ 打开文件: file ...
- android market 选择
通过Java包名直接定位到你的App http://market.android.com/details?id=<java包名>或者market://details?id=<java ...
- TI C66x DSP 系统events及其应用 - 5.10(创建ISR的三种情况)
ISFP是服务中断的指令包,创建ISR的三种情况: 1.一个ISFP包的8条指令就能够满足ISR watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWl5ZW ...
- 你好,C++(12)怎样管理多个类型同样性质同样的数据?3.6 数组
3.6 数组 学过前面的基本数据类型之后,我们如今能够定义单个变量来表示单个的数据.比如,我们能够用int类型定义变量来表示公交车的216路:能够用float类型定义变量来表示西红柿3.5元一斤. ...