1、面向对象的特征有哪些方面?
1、抽象,把现实世界中的某一类东西,提取出来,用程序代码表示;2、封装,把过程和数据包围起来,对数据的访问只能通过已定义的界面;3、继承,一种联结类的层次模型;4、多态,允许不同类的对象对同一消息做出响应。
2、访问修饰符 public,private,protected,以及不写(默认)时的区别?
private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
default (即缺省,什么也不写,不使用任何关键字): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。
public : 对所有类可见。使用对象:类、接口、变量、方法
3、String 是最基本的数据类型吗?
基本数据类型包括byte、int、char、long、float、double、boolean和short。所以不是。
4、float f=3.4;是否正确?
不正确,精度不准确,应该用强制类型转换,如:float = (float)3.4或float f = 3.4f。
在Java中,没有小数点的默认是int,有小数点的默认是double,int转成long系统自动转换没有问题,因为后者精度更高,但是double转成float就不能自动转换了,所以后面得加上一个f
5、short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?
对于short s1=1;s1=s1+1;由于1是int类型,因此s1+1运算结果也是int类型,需要强制转换类型才能赋值给short型。而short s1=1;s1+=1;可以正确编译,因为s1+=1;相当于s1=(short)(s1+1);其中隐含着强制类型转换。
6、Java 有没有 goto?
java确实提供了goto语句,并且它是保留的关键字,但是JVM并没有给它提供任何的实现。或许是java并没打算放开使用这种机制。
7、int 和 Integer 有什么区别?
区别是在自动装箱和自动拆箱上。int与integer的区别:int属于基本数据类型,integer属于引用数据类型,int的初始值是0,integer的初始值是null,integer是int的包装类,属于面向对象思维编程,创建integer需要使用new的方式为其进行内存分配。
8、&和&&的区别?
&&的短路功能,当第一个表达式的值为false的时候,则不再计算第二个表达式;&则两个表达式都执行。
&可以用作位运算符,当&两边的表达式不是Boolean类型的时候,&表示按位操作。
9、解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法。
java中内存可以分为3个区:堆、栈及方法区。
堆:
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身.
3.一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。
栈:
1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
4.由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.
静态区\方法区:
1.方法区又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。
3、全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。
AppMain.java
public class AppMain //运行时, jvm 把appmain的信息都放入方法区
{
public static void main(String[] args) //main 方法本身放入方法区。
{
Sample test1 = new Sample( " 测试1 " ); //test1是引用,所以放到栈区里, Sample是自定义对象应该放到堆里面
Sample test2 = new Sample( " 测试2 " );
test1.printName();
test2.printName();
}
}
原文链接:https://blog.csdn.net/wu594914197/article/details/85256376
10、Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?
Math类提供的几个常用的方法就是 Math.ceil(x); Math.floor(x); Math.round(X);Math.random();等等。
ceil 顾名思义,天花板,就是向上取整咯。
floor 地板 就是向下取整了
最后 Math.round(x)这个有点小小的繁琐: Math.round(x)=Math.floor(x+0.5);
所以 Math.round(11.5)等于12
Math.round(-11.5)等于11
11、switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上?
在 switch( expr1)中, expr1 只能是一个整数表达式或者枚举常量(更大字体),整数表达式可以是 int
基本类型或 Integer 包装类型,由于, byte,short,char 都可以隐含转换为 int,所以,这些类型以及这些类型
的包装类型也是可以的。显然, long 和 String 类型都不符合 switch 的语法规定,并且不能被隐式转换成 int
类型,所以,它们不能作用于 swtich 语句中。 另外由于 JDK1.7 中引入新特性,所以 swtich 语句可以接收
一个 String 类型的值, String 可以作用在 swtich 上。
12、用最有效率的方法计算 2 乘以 8?
2 << 3,
因为将一个数左移n 位,就相当于乘以了2 的n 次方,那么,一个数乘以8 只要将其左移3 位
即可,而位运算cpu 直接支持的,效率最高,所以,2 乘以8 等於几的最效率的方法是2 << 3。
13、数组有没有 length()方法?String 有没有 length()方法?
数组是没有length()这个方法的,有length这个属性,可以计算数组的长度
String是有length()这个方法的,用来计算字符串的长度。
length()是针对字符串来说的,要得到一个字符串的长度就要用它的length()方法;
length属性是针对java数组来说的,求数组的长度就用它的length属性;
size()方法是针对泛型集合的,调用此方法能知道这个泛型有几个元素。
14、循环中return、continue和break区别?
break: 此语句导致程序终止包含它的循环,并进行程序的下一阶段(整个循环后面的语句),即,不是跳到下一个循环周期而是退出循环。如果break语句包含在嵌套循环里,它只跳出最里面的循环
continue:循环语句里有此语句时,程序运行到此语句时,不在执行循环体里continue后面的语句而是跳到下一个循环入口处执行下一个循环。
return是表示从被调函数返回到主调函数继续执行,返回时可附带一个返回值,由return后面的参数指定。return后函数就结束了,后面的语句不再执行
15、构造器(constructor)是否可被重写(override)?
构造器(构造方法)Constructor 不能被继承,因此不能重写 Override,但可以被重载 Overload(不
同参数即可)。
每一个类必须有自己的构造函数,在创建对象时自动调用,如果添加有参构造函数后,默认无
参构造函数则被覆盖。子类不会覆盖父类的构造函数,但是在创建子类对象的时候,会自动调用父
类构造函数。
重写(Override)是父类与子类之间的多态性,实质是对父类的函数进行重新定义,如果在子类中定义某方法与其父类有相同的名称和参数则该方法被重写,
重载(Overload)是让类以统一的方式处理不同类型数据的一种手段,实质表现就是多个具有不同的参数个数或者类型的同名函数(返回值类型可随意,不能以返回类型作为重载函数的区分标准)同时存在于同一个类中,是一个类中多态性的一种表现(调用方法时通过传递不同参数个数和参数类型来决定具体使用哪个方法的多态性)。