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 关系型数据库
2025 年最新华为 Java 面试题及答案,全方位打造面试宝典
Java面试高频考点与实践指南(150字摘要) 本文系统梳理了Java面试核心考点,包括Java基础(数据类型、面向对象特性、常用类使用)、并发编程(线程机制、锁原理、并发容器)、JVM(内存模型、GC算法、类加载机制)、Spring框架(IoC/AOP、Bean生命周期、事务管理)、数据库(MySQL引擎、事务隔离、索引优化)及分布式(CAP理论、ID生成、Redis缓存)。同时提供华为级实战代码,涵盖Spring Cloud Alibaba微服务、Sentinel限流、Seata分布式事务,以及完整的D
601 1
|
8月前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
10月前
|
缓存 Java API
Java 面试实操指南与最新技术结合的实战攻略
本指南涵盖Java 17+新特性、Spring Boot 3微服务、响应式编程、容器化部署与数据缓存实操,结合代码案例解析高频面试技术点,助你掌握最新Java技术栈,提升实战能力,轻松应对Java中高级岗位面试。
655 0
|
8月前
|
Java
Java基础语法与面向对象
重载(Overload)指同一类中方法名相同、参数列表不同,与返回值无关;重写(Override)指子类重新实现父类方法,方法名和参数列表必须相同,返回类型兼容。重载发生在同类,重写发生在继承关系中。
233 1
|
10月前
|
Java 数据库连接 数据库
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
本文全面总结了Java核心知识点,涵盖基础语法、面向对象、集合框架、并发编程、网络编程及主流框架如Spring生态、MyBatis等,结合JVM原理与性能优化技巧,并通过一个学生信息管理系统的实战案例,帮助你快速掌握Java开发技能,适合Java学习与面试准备。
463 2
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
|
8月前
|
存储 Java 关系型数据库
Java 项目实战基于面向对象思想的汽车租赁系统开发实例 汽车租赁系统 Java 面向对象项目实战
本文介绍基于Java面向对象编程的汽车租赁系统技术方案与应用实例,涵盖系统功能需求分析、类设计、数据库设计及具体代码实现,帮助开发者掌握Java在实际项目中的应用。
349 0
|
8月前
|
算法 Java
50道java基础面试题
50道java基础面试题
|
9月前
|
安全 Java 编译器
Java面向对象
本文深入讲解了Java面向对象编程(OOP)的四大特性:封装、继承、多态与抽象,以及方法的设计与使用。通过示例展示了如何用类和对象组织代码,提升程序的可维护性与扩展性。
|
10月前
|
存储 Java 测试技术
Java基础 - 面向对象
面向对象编程是Java的核心,包含封装、继承、多态三大特性。封装隐藏实现细节,提升代码可维护性与安全性;继承实现类间IS-A关系,支持代码复用;多态通过继承、重写与向上转型,实现运行时方法动态绑定,提升系统扩展性与灵活性。
170 0