Java2EE基础练习及面试题_chapter04面向对象(上_03)

简介: Java2EE基础练习及面试题_chapter04面向对象(上_03)

面试01

/*
微软面试题:
定义一个int型的数组:int[] arr = new int[]{12,3,3,34,56,77,432};
让数组的每个位置上的值去除以首位置的元素,得到的结果,作为该位置上的
新值。遍历新的数组。
 */
package com.jerry.java;
import java.util.Arrays;
/**
 * @author jerry_jy
 * @create 2022-09-26 17:53
 */
public class Exer10 {
    /*
    微软面试题:
    定义一个int型的数组:int[] arr = new int[]{12,3,3,34,56,77,432};
    让数组的每个位置上的值去除以首位置的元素,得到的结果,作为该位置上的
    新值。遍历新的数组。
     */
    public static void main(String[] args) {
        int[] arr = new int[]{12, 3, 3, 34, 56, 77, 432};
        int temp = arr[0];
        for (int i = 0; i < arr.length; i++) {
//            arr[i] = arr[i] / arr[0];
            arr[i] = arr[i] / temp;
        }
        System.out.println(Arrays.toString(arr));
        // 说出下面的结果
        int[] arr = new int[10];
        System.out.println(arr);//[I@1b6d3586
        char[] arr1 = new char[10];
        System.out.println(arr1);//空 不是null值
    }
}

面试02

/*
方法的使用
哪个选项和show()方法重载
class Demo{
    void show(int a,int b,float c){}
}
A.void show(int a,float c,int b){}//yes
B,void show(int a,int b,float c){}//一模一样。不可以出现在同一个类中。
C.int show(int a,float c,int b){return a;}//yes。
D.int show(int a,float c){return a;}//yes
 */

面试03

/*
方法的重载
方法重载(overload)必须满足________
A. 在不同class中定义的方法     B.在同一类型中定义的方法
C. 方法名必须相同              D.返回类型必须相同
E. 参数一定不同                F.参数可以相同
答案:BCE
 */

面试04

/*
    写出输出结果
 */
    public static void main(String[] args) {
        show(0);//15
        show(1);//14
    }
    public static void show(int i) {
        switch (i) {
            default:
                i += 2;
            case 1:
                i += 1;
            case 4:
                i += 8;
            case 2:
                i += 4;
        }
        System.out.println("i=" + i);
    }

面试05

/*
写出输出结果 */
    public static void main(String[] args) {
        int x = 1;
        for (show('a'); show('b') && x < 3; show('c')) {
            show('d');
            x++;
        }
    }
    public static boolean show(char ch) {
        System.out.print(ch);//abdcbdcb
        return true;
    }

面试06

//以下代码的运行结果是什么?
    public static boolean foo(char c) {
        System.out.print(c);//ABDCBDCB
        return true;
    }
    public static void main(String[] args) {
        int i = 0;
        for (foo('A'); foo('B') && (i < 2); foo('C')) {
            i++;// 1 2
            foo('D');
        }
    }

面试07

面向对象三大特征的说明

答:面向对象有三大特点:封装、继承、多态。(如果要回答四个,可加上 抽象性 这一特点)

1.继承性:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。

2.封装性:

封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。

3. 多态性:

多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

4.抽象性:

抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。

面试08

/*
找错
public class Something {
   void doSomething () {
       private String s = "";
       int l = s.length();
   }
}

有错吗?

答案: 错。局部变量前不能放置任何访问修饰符 (private,public,和protected)。

面试09

Java的内存管理之垃圾回收

**分配:**由JVM自动为其分配相应的内存空间

**释放:**由JVM提供垃圾回收机制自动的释放内存空间

垃圾回收机制(GC:Garbage Collection):将垃圾对象所占用的堆内存进行回收。Java的垃圾回收机制是JVM提供的能力,由单独的系统级垃圾回收线程在空闲时间以不定时的方式动态回收。

垃圾对象:不再被任何引用指向的对象。

面试10

面试题:

问:在程序中是否可以通知垃圾回收机制过来回收垃圾?

能,通过调用System.gc();或Runtime.getRuntime().gc();

再问:调用了System.gc();或Runtime.getRuntime().gc();后是立刻执行垃圾回收吗?

不是,该调用并不会立刻启动垃圾回收机制开始回收,但会加快垃圾回收机制的运行。

代码演示:

public class TestGC{
  public static void main(String[] args)throws Exception{
    for(int i=0; i<10; i++){
      MyClass m = new MyClass();//这里本次循环完,本次创建的对象就成为垃圾了
      System.out.println("创建第" + (i+1) + "的对象:" + m);
    }
    //通知垃圾回收机制来收集垃圾
    System.gc();
    //为了延缓程序结束
    for(int i=0; i<10; i++){
      Thread.sleep(1);
      System.out.println("程序在继续....");
    }
  }
}
class MyClass{
  //这个方法是垃圾回收机制在回收它的对象时,自动调用,理解成对象留临终遗言的方法
  public void finalize(){
    System.out.println("轻轻的我走了.....");
  }
}

面试11

构造器

构造器Constructor是否可被override

答:构造器Constructor不能被继承,因此不能重写Override,但可以被重载Overload

面试12

//以下程序的运行结果是:
    public static void main(String[] args) {
        new A(new B());//BAAB
    }
}
class A {
    public A() {
        System.out.println("A");
    }
    public A(B b) {
        this();
        System.out.println("AB");
    }
}
class B {
    public B() {
        System.out.println("B");
    }

实验01

918d47db22d74eb0883338fd8435440d.png

package com.jerry.experiment1;
/**
 * @author jerry_jy
 * @create 2022-09-27 11:11
 */
public class Account {
    private int id;
    private double balance;
    private double annualInterestRate;
    public Account(int id, double balance, double annualInterestRate) {
        this.id = id;
        this.balance = balance;
        this.annualInterestRate = annualInterestRate;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public double getBalance() {
        return balance;
    }
    public void setBalance(double balance) {
        this.balance = balance;
    }
    public double getAnnualInterestRate() {
        return annualInterestRate;
    }
    public void setAnnualInterestRate(double annualInterestRate) {
        this.annualInterestRate = annualInterestRate;
    }
    @Override
    public String toString() {
        return "Account{" +
                "id=" + id +
                ", balance=" + balance +
                ", annualInterestRate=" + annualInterestRate +
                '}';
    }
    public void withdraw(double amount) {//取钱
        //System.out.println("请输入取款金额:");
        if (amount > balance) {
            System.out.println("余额不足,取款失败!");
        } else {
            balance -= amount;
            System.out.println("取款成功!本次成功取出:" + amount);
        }
    }
    public void deposit(double amount) {//存钱
        balance += amount;
        System.out.println("存款成功!本次成功存入:" + amount);
    }
}
package com.jerry.experiment1;
/**
 * @author jerry_jy
 * @create 2022-09-27 11:22
 */
public class Customer {
    private String firstName;
    private String lastName;
    private Account account;
    public Customer(){
    }
    public Customer(String firstName, String lastName){
        this.firstName=firstName;
        this.lastName=lastName;
    }
    public String getFirstName() {
        return firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public Account getAccount() {
        return account;
    }
    public void setAccount(Account account) {
        this.account = account;
    }
    @Override
    public String toString() {
        return "Customer{" +
                "firstName='" + firstName + '\'' +
                ", lastName='" + lastName + '\'' +
                ", account=" + account +
                '}';
    }
}
package com.jerry.experiment1;
/**
 * @author jerry_jy
 * @create 2022-09-27 11:25
 */
public class AccountTest {
    public static void main(String[] args) {
        Customer customer = new Customer("Jane", "Smith");
        System.out.println(customer.toString());
        Account account = new Account(1000, 2000, 0.0123);
        System.out.println(account.toString());
        customer.setAccount(account);
        account.deposit(100);
//        customer.getAccount();
        account.withdraw(960);
        account.withdraw(2000);
        System.out.println("Customer[" + customer.getLastName() + "," + customer.getFirstName() +
                "] has a account: id is " + customer.getAccount().getId() + ",annualInterestRate is "+
                customer.getAccount().getAnnualInterestRate() * 100 + "% ,balance is " + customer.getAccount().getBalance());
    }
}

实验02

699f1d6f34054e96af8a84e97f6efd36.png

3c9a47cef866471ba4698e8ec89bd1ad.png

package com.jerry.experiment2;
/**
 * @author jerry_jy
 * @create 2022-09-27 16:02
 */
public class Account1 {
    private double balance;
    public Account1() {
    }
    public Account1(double balance) {
        this.balance = balance;
    }
    public double getBalance() {
        return balance;
    }
    public void deposit(double amount) {//存钱
        balance += amount;
        System.out.println("存款成功!本次成功存入:" + amount);
    }
    public void withdraw(double amount) {//取钱
        //System.out.println("请输入取款金额:");
        if (amount > balance) {
            System.out.println("余额不足,取款失败!");
        } else {
            balance -= amount;
            System.out.println("取款成功!本次成功取出:" + amount);
        }
    }
}
package com.jerry.experiment2;
import com.jerry.experiment1.Account;
/**
 * @author jerry_jy
 * @create 2022-09-27 16:01
 */
public class Customer {
    private String firstName;
    private String lastName;
    private Account1 account;
    public Customer() {
    }
    public Customer(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
    public String getFirstName() {
        return firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public Account1 getAccount() {
        return account;
    }
    public void setAccount(Account1 account) {
        this.account = account;
    }
}
package com.jerry.experiment2;
/**
 * @author jerry_jy
 * @create 2022-09-27 16:04
 */
public class Bank {
    private Customer[] customers;
    private int numberOfCustomer;
    public Bank() {
        customers = new Customer[10];//构造器初始化赋值
    }
    public void addCustomer(String firstName, String lastName) {
        Customer customer = new Customer(firstName, lastName);
        customers[numberOfCustomer++]=customer;//把新new出来的customer放在customers数组中
    }
    public int getNumOfCustomers() {
        return numberOfCustomer;
    }
    public Customer getCustomer(int index) {
        return customers[index];
    }
}


package com.jerry.experiment2;
/**
 * @author jerry_jy
 * @create 2022-09-27 16:21
 */
public class BankTest {
    public static void main(String[] args) {
        Bank bank = new Bank();
        bank.addCustomer("Jin", "Yang");
        //连续操作
        bank.getCustomer(0).setAccount(new Account1(2000));
        bank.getCustomer(0).getAccount().withdraw(500);
        double balance = bank.getCustomer(0).getAccount().getBalance();
        System.out.println("客户:" + bank.getCustomer(0).getFirstName() + "的账户余额为:" + balance);
        System.out.println("***********************");
        bank.addCustomer("万里", "杨");
        System.out.println("银行客户的个数为:" + bank.getNumOfCustomers());
    }
}


相关文章
|
11天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
40 2
|
16天前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
22天前
|
存储 缓存 Oracle
Java I/O流面试之道
NIO的出现在于提高IO的速度,它相比传统的输入/输出流速度更快。NIO通过管道Channel和缓冲器Buffer来处理数据,可以把管道当成一个矿藏,缓冲器就是矿藏里的卡车。程序通过管道里的缓冲器进行数据交互,而不直接处理数据。程序要么从缓冲器获取数据,要么输入数据到缓冲器。
Java I/O流面试之道
|
18天前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
41 4
|
19天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
68 4
|
26天前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
15 2
|
1月前
|
存储 Java 程序员
Java面试加分点!一文读懂HashMap底层实现与扩容机制
本文详细解析了Java中经典的HashMap数据结构,包括其底层实现、扩容机制、put和查找过程、哈希函数以及JDK 1.7与1.8的差异。通过数组、链表和红黑树的组合,HashMap实现了高效的键值对存储与检索。文章还介绍了HashMap在不同版本中的优化,帮助读者更好地理解和应用这一重要工具。
55 5
|
30天前
|
存储 Java
[Java]面试官:你对异常处理了解多少,例如,finally中可以有return吗?
本文介绍了Java中`try...catch...finally`语句的使用细节及返回值问题,并探讨了JDK1.7引入的`try...with...resources`新特性,强调了异常处理机制及资源自动关闭的优势。
22 1
|
1月前
|
Java 程序员
Java 面试高频考点:static 和 final 深度剖析
本文介绍了 Java 中的 `static` 和 `final` 关键字。`static` 修饰的属性和方法属于类而非对象,所有实例共享;`final` 用于变量、方法和类,确保其不可修改或继承。两者结合可用于定义常量。文章通过具体示例详细解析了它们的用法和应用场景。
30 3
|
1月前
|
Java
Java面试题之cpu占用率100%,进行定位和解决
这篇文章介绍了如何定位和解决Java服务中CPU占用率过高的问题,包括使用top命令找到高CPU占用的进程和线程,以及使用jstack工具获取堆栈信息来确定问题代码位置的步骤。
110 0
Java面试题之cpu占用率100%,进行定位和解决

热门文章

最新文章

下一篇
无影云桌面