Java面向对象编程(2)

简介: Java面向对象编程(2)

A 派生出子类 B , B 派生出子类 C ,并且在 java 源代码有如下声明:

1. A a0=new A();

2. A a1=new B();

3. A a2=new C();

问以下哪个说法是正确的()

A. 只有第一行能通过编译

B. 第1、2行能通过编译,但第3行编译出错

C. 第1、2、3行能通过编译,但第2、3行运行时出错

D. 第1行,第2行和第3行的声明都是正确的

答案:D

下面代码将输出什么内容:() 题型

public class SystemUtil{

public static boolean isAdmin(String userId){

return userId.toLowerCase()=="admin";

}

public static void main(String[] args){

System.out.println(isAdmin("Admin"));

}

}

A. true

B. false

C. 1

D. 编译错误

答案:B

阅读如下代码。 请问,对语句行 test.hello(). 描述正确的有()

package NowCoder; class Test {

public static void hello() {

System.out.println("hello");

}

}

public class MyApplication {

public static void main(String[] args) {

// TODO Auto-generated method stub

Test test=null;

test.hello();

}

}

A. 能编译通过,并正确运行

B. 因为使用了未初始化的变量,所以不能编译通过

C. 以错误的方式访问了静态方法

D. 能编译通过,但因变量为null,不能正常运行

答案:D

在使用super和this关键字时,以下描述正确的是()

A. 在子类构造方法中使用 super() 显示调用父类的构造方法,super() 必须写在子类构造方法的第一行,否则编译不通过

B. super() 和 this() 不一定要放在构造方法内第一行

C. this() 和 super() 可以同时出现在一个构造函数中

D. this() 和 super() 可以在static环境中使用,包括static方法和static语句块

答案:A

如下代码的 结果是什么 ?

class Base {

Base() {

System.out.print("Base");

}

}

public class Alpha extends Base {

public static void main( String[] args ) {

new Alpha(); //调用父类无参的构造方法

new Base();

}

}

A. Base

B. BaseBase

C. 编译失败

D. 代码运行但没有输出

E. 运行时抛出异常

答案:B

如下代码的输出结果是什么?

public class Test {

public int aMethod(){

static int i = 0;

i++;

return i;

}

public static void main(String args[]){

Test test = new Test();

test.aMethod();

int j = test.aMethod();

System.out.println(j);

}

}

A. 0

B. 1

C. 2

D. 编译失败

答案:D

下列哪一种叙述是正确的()

A. abstract修饰符可修饰字段、方法和类

B. 抽象方法的body部分必须用一对大括号{ }包住

C. 声明抽象方法,大括号可有可无

D. 声明抽象方法不可写出大括号

答案:D

下列说法正确的有:()

A. class中的constructor不可省略

B. constructor必须与class同名,但方法不能与class同名

C. constructor在一个对象被new 时执行

D. 一个class只能定义一个constructor

答案:C

选项中哪一行代码可以替换 //add code here 而不产生编译错误

public abstract class MyClass {

public int constInt = 5;

//add code here

public void method() {

}

}

A. public abstract void method(int a);

B. consInt=constInt+5;

C. public int method();

D. public abstract void anotherMethod(){}

答案:A

在使用 interface 声明一个外部接口时,只可以使用( )修饰符修饰该接口。

A. private

B. protected

C. private protected

D. public

答案:D

排序子序列

题目描述:牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序的。牛牛有一个长度为n的整数数组A,他现在有一个任务是把数组A 分为若干段排序子序列,牛牛想知道他最少可以把这个数组分为几段排序子序列.

如样例所示,牛牛可以把数组A划分为[1,2,3]和[2,2,1]两个排序子序列,至少需要划分为2个排序子序列,所以输出2

输入描述:输入的第一行为一个正整数n(1 ≤ n ≤ 10^5) 第二行包括n个整数A_i(1 ≤ A_i ≤ 10^9),表示数组A的每个数字。

输出描述:输出一个整数表示牛牛可以将A最少划分为多少段排序子序列

public class Main3 {


   public static void main(String[] args) {


       Scanner scanner=new Scanner(System.in);


       int n=scanner.nextInt();


       //注意,这里申请n+1个内存空间!为了后序做准备!


       int[] array=new int[n+1];

       //往 数组中输入数据
       
for (int i = 0; i < n; i++) {
           
array[i]=scanner.nextInt();
       }
       
int i=0;
       
int count=0;//计数器
       
while (i<n){
           
if (array[i] < array[i+1]){
               
while (i<n && array[i] < array[i+1]){
                   i++;
               }
               count++;
               i++;
           }
else if (array[i] == array[i+1]){
               i++;
           }
else {
               
while (i<n && array[i] > array[i+1]){
                   i++;
               }
               count++;
               i++;
           }
       }
       
System.out.println(count);
   }
}

2. 倒置字符串

题目描述:将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I

输入描述:每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100

输出描述:依次输出倒置之后的字符串,以空格分割

方法1:

  1. 整体数据进行逆置
  2. 每个单词进行逆置
    public class Main4 {
       
    public static void reverse(char[] arr, int start ,int end){
           
    while (start < end){
               
    char tmp=arr[start];
               arr[start]=arr[end];
               arr[end]=
    tmp;
               start++;
               end--;
           }
       }
       
    public static void main(String[] args) {
           
    Scanner scanner=new Scanner(System.in);
           
    String str=scanner.nextLine();
           
    char[] ch= str.toCharArray();
           
    int len=str.length()-1;
           
    //1。整体进行逆置
           
    reverse(ch,0,len-1);
           
    int i=0;//遍历ch数组
           
    while (i < len){
               
    int j=i;
               
    while (j<len && ch[j] !=' '){
                   j++;
               }
               
    if (j<len){
                   reverse(
    ch,i,j-1);
                   i=j+
    1;
               }
    else {
                   reverse(
    ch,i,j-1);
                   i=j;
               }
           }
           
    String cur=new String(ch);
           
    System.out.println(cur);
       }
    }

方法2:

public class Main {


   //倒置字符串


   public static void main(String[] args) {


       Scanner scanner = new Scanner(System.in);


       String str = scanner.nextLine();


       //“ ” 空格进行分割!


       String[] array = str.split(" ");


       for (int i = array.length - 1; i >= 0; i--) {


           System.out.print(array[i] + " ");


       }


   }


}

相关文章
|
Java 开发者
在Java面向对象编程的广阔海洋中,多态犹如一股深邃的潜流,它推动着代码从单一走向多元,从僵化迈向灵活。
在Java面向对象编程的广阔海洋中,多态犹如一股深邃的潜流,它推动着代码从单一走向多元,从僵化迈向灵活。
113 7
|
Java 开发者
那些年,我们一同踏入Java编程的大门,多态,这个充满魔法的名字,曾无数次点亮我们探索面向对象编程的热情。
那些年,我们一同踏入Java编程的大门,多态,这个充满魔法的名字,曾无数次点亮我们探索面向对象编程的热情。
120 5
|
Java 程序员
Java中的继承和多态:理解面向对象编程的核心概念
【8月更文挑战第22天】在Java的世界中,继承和多态不仅仅是编程技巧,它们是构建可维护、可扩展软件架构的基石。通过本文,我们将深入探讨这两个概念,并揭示它们如何共同作用于面向对象编程(OOP)的实践之中。你将了解继承如何简化代码重用,以及多态如何为程序提供灵活性和扩展性。让我们启程,探索Java语言中这些强大特性的秘密。
|
Java
Java面向对象编程新篇章:多态,你准备好了吗?
【6月更文挑战第17天】Java的多态性是面向对象编程的核心,它允许通过统一的接口处理不同类型的对象。例如,在一个虚拟宠物游戏中,抽象类`Pet`定义了`speak()`方法,猫、狗和鹦鹉等子类各自重写此方法以实现独特叫声。在`main`方法中,使用`Pet`类型的引用创建子类对象并调用`speak()`,多态机制确保调用实际对象的方法,实现代码的灵活性和可扩展性。通过多态,我们能以更低的耦合度和更高的复用性编写更优雅的代码。
131 3
|
Java 开发者
Java 面向对象编程
总之,Java 的面向对象编程为开发者提供了一种有效的编程范式,帮助他们构建出高质量、可维护的软件系统。理解和掌握面向对象的概念和原则是成为优秀 Java 开发者的重要基础。
355 63
|
12月前
|
Java
Java 面向对象编程的三大法宝:封装、继承与多态
本文介绍了Java面向对象编程中的三大核心概念:封装、继承和多态。
623 15
|
12月前
|
Java 数据安全/隐私保护 开发者
【潜意识Java】深入理解 Java 面向对象编程(OOP)
本文介绍了Java中的面向对象编程(OOP)核心概念,包括封装、继承、多态和抽象。封装通过访问控制保护数据,提高安全性;继承支持代码复用,减少冗余;多态实现灵活的行为调用;抽象则隐藏细节,简化接口设计。掌握这些概念有助于编写高效、灵活且易于维护的代码。文章通过实例详细讲解了每个概念在Java中的应用,并总结了它们的优势。
594 3
|
Java
Java 面向对象编程:父类与子类的“传承”与“创新”之路
【6月更文挑战第16天】Java 中的父类与子类展示了面向对象的“传承”与“创新”。子类`Dog`继承`Animal`,获取其属性和方法如`name`和`makeSound`。子类通过`@Override`增强`makeSound`,显示多态性。设计父类时应考虑普遍性,子类创新专注自身特性,遵循继承最佳实践,利用复用提升效率,构建可维护的软件系统。
304 57
|
存储 前端开发 JavaScript
【前端学java】面向对象编程基础-类的使用(4)
【8月更文挑战第9天】面向对象编程基础-类的使用
114 0
【前端学java】面向对象编程基础-类的使用(4)
|
Java API 项目管理
Java中的函数式编程与传统面向对象编程对比
Java中的函数式编程与传统面向对象编程对比