1.简述面向对象与面向过程的联系与区别。
两者都是软件开发思想,先有的面向过程,后有的面向对象。在大型项目中,针对面向过程的不足推出了面向对象的开发思想。
区别:
(1)编程思路不同:面向过程以实现功能的函数开发为主;面向对象要首先抽象出类、属性及其方法,然后通过实例化类、执行方法来完成功能。
(2)封装性:都具有封装性,但面向过程是封装的功能;面向对象封装的是数据和功能。
(3)面向对象具有继承性和多态性;面向过程没有。
2.对象和类的关系是什么?
类是抽象的;
对象是具体的,是类抽象概念的实物表达。
3.栈、堆的特点及存放内容是什么?
特点 | 存放内容 | |
栈 | 先进后出 | 在方法中定义的一些基本类型的变量和对象的引用变量都在栈内存中分配 |
堆 | ①堆内存有内存地址,都是将内存的地址赋值给引用变量 ②堆内存变量无用之后由垃圾回收机制不定时收回 ③堆内存会自动初始化 | 堆内存存放引用数据类,及new出来的都在堆内存里面 |
4.画出如下程序的内存结构:
public class Test {
public static void main(String[] args) {
Car c1 = new Car();
c1.changeColor("黑色");
System.out.print("c1的颜色是:");
c1.showColor();
System.out.println("类Car默认的tyreNum是:"+Car.tyreNum);
System.out.println("c1的tyreNum是:"+c1.tyreNum);
Car c2 = new Car();
Engine e = new Engine();
e.speed = 100;
e.weight = 4000;
c2.engine = e;
c2.color = "红色";
c2.tyreNum = 10;
System.out.println("c2改变tyreNum之后,c1的tyreNum是:"+c1.tyreNum);
}
}
class Car {
static int tyreNum = 4;
Engine engine;
String color;
void changeColor(String c) {
color = c;
}
void showColor() {
System.out.println("车的颜色是" + color);
}
}
class Engine {
int speed;
int weight;
}
5.局部变量、成员变量、静态变量分别怎么声明?哪个需要在使用前,手动初始化?
局部变量:在方法或代码块中声明
成员变量:在类中声明
静态变量:使用static修饰的成员变量
其中,局部变量必须手动初始化
6.如果不手动指定成员变量的值,系统将会自动初始化,初始化的规则是什么?
成员变量类型 | 整型 | 浮点型 | 引用数据类型 | boolean | char |
初始化值 | 0 | 0.0 | null | false | \u0000 |
7.成员变量从属于谁?静态变量又叫什么,从属于谁?局部变量从属于谁?
成员变量从属于对象; 静态变量又叫类变量,从属于类; 局部变量从属于方法和代码块。
8.构造方法的作用是?
(1)构造类的对象
(2)初始化对象的属性
9.构造方法的名字一定要和类名一致吗?构造方法有返回值吗或者构造方法中可以有return语句吗?
构造方法名必须和类名一致。
构造方法不可以有返回值,也不能写void,构造方法中不可以有return语句。
10.构造方法如何被调用?系统一定会给我们添加无参构造方法吗?
构造方法在对象被创建时被调用,使用关键字new。
不一定。当程序员手动写了构造方法之后,系统就不会添加无参构造方法了。
11.下面代码有什么问题?
public class Computer{
int price;
String brand;
public void start(){
System.out.println("启动中...");
}
public Computer(int price,String brand) {
price = price;
brand = brand;
}
}
当局部变量名称与成员变量名称相同时,使用this代表成员变量,Computer构造器中的代码应该为
this.price = price;
this.brand = brand;
12.设计一个类代表二维空间中的一个点。
public class Point {
private int x;
private int y;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public Point() {
}
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
13.设计一个类代表二位空间的一个圆。要求两个成员变量。一个是圆心,一个是半径,提供计算面积的方法。
public class Circle {
private int r;
private Point point;
public int getR() {
return r;
}
public void setR(int r) {
this.r = r;
}
public Point getPoint() {
return point;
}
public void setPoint(Point point) {
this.point = point;
}
public Circle() {
}
public Circle(int r, Point point) {
this.r = r;
this.point = point;
}
public double area() {
return Math.PI*Math.pow(r,2);
}
}
class Point {
private int x;
private int y;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public Point() {
}
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
14.为上述Circle类添加一个方法,计算一个点(Point对象)是否在圆(Circle对象)内,并在main中验证。
public class Circle {
private int r;
private Point point;
public int getR() {
return r;
}
public void setR(int r) {
this.r = r;
}
public Point getPoint() {
return point;
}
public void setPoint(Point point) {
this.point = point;
}
public Circle() {
}
public Circle(int r, Point point) {
this.r = r;
this.point = point;
}
//面积
public double area() {
return Math.PI*Math.pow(r,2);
}
//判断点是否在圆内
public boolean isFlag(Point p) {
double d = Math.hypot(this.point.getX()-p.getX(),this.point.getY()-p.getY()); //Math.hypot()用于求直角三角形的斜边长
if(d <= r) {
return true;
}
return false;
}
public static void main(String [] args) {
Point p = new Point(10,10);
Circle c = new Circle(3,p);
System.out.println(c.isFlag(new Point(13,12))?"在圆内":"不在圆内");
}
}
class Point {
private int x;
private int y;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public Point() {
}
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
15.构造方法能不能重载?
构造方法可以重载。
16.this在普通方法中,指的是哪个对象?在构造方法中指的是?
this在普通方法中总是指向调用该方法的对象。
this在构造方法中总是指向正要初始化的对象。
17.static变量在内存中存在哪个区?static变量和方法为什么被称为类变量和类方法?可以被类的所有对象共享吗?
static变量在内存中存在数据区。
static变量和方法归类所有,使用方法名调用
static变量可以被类的所有对象共享
18.静态初始化和main哪个先被执行?
静态代码先执行
19.一个构造方法调用另一个构造方法怎么调用?this(),这样的调用方式必须在第一句吗?
this()调用本类的无参构造器
this(实参列表)调用本类的带参构造方法
super()调用直接父类的无参构造器
super(实参列表)调用直接父类的带参构造器
this()调用必须位于构造方法的第一句。
20.package的两个作用?
(1)解决类的重名问题。
(2)方便管理类,合适的类位于合适的包。
21.import是用于导入包还是用于导入类?import java.util.*,会降低程序的运行速度吗?
import是用于导入其他包中的类。
import java.util.*不会降低运行速度,而是会降低编译速度,因为导入了该包下的所有类。
22.import static静态导入的作用是?
导入类的静态属性和静态方法。
23.如果同时导入类名相同如:java.util.Date;和java.sql.Date;在程序中如何区分?
只能用包名+类名来显示调用相关类;
如:java.util.Date date = new java.util.Date();
24.javadoc注解怎么写?Java项目中API文档如何生成?
注解: 以 /**开头,以*/结尾
API文档: javadoc 源文件名.java