牛客网刷题day04

本文深入探讨Java中不同类型的内存区域,如字符串常量区、堆、栈、静态域和常量池的作用,以及final关键字的使用规则。通过具体代码示例,解析String对象的内存分配和引用变化,展示final类和变量的特性。同时,文章详细介绍了Java异常处理机制,包括try、catch、finally、throw和throws关键字的应用,以及如何使用jdb.exe进行程序调试。

1.String str1 = “abc”,“abc”分配在内存哪个区域?

  • 字符串常量区
  • 用new创建的对象在堆区

    函数中的临时变量在栈区

    java中的字符串在字符串常量区

  • 栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中

    堆:存放用new产生的数据

    静态域:存放在对象中用static定义的静态成员

    常量池:存放常量

    非RAM存储:硬盘等永久存储空间

2.关于final说法正确的是?  ( )

  • final类的方法能否被同一个包的类访问不是由final决定
  • final变量,如果是基本数据类型,则其数值一旦初始化后就不能被改变。如果是引用类型的变量,则对其初始化后,便不能再指向另一个对象,但是其里面的值是可以改变的。引用变量所指向的对象中的内容是可以改变的。

3.下列java程序的输出结果为____。

public class Example{
    String str=new String("hello");
    char[]ch={'a','b'};
    public static void main(String args[]){
        Example ex=new Example();
        ex.change(ex.str,ex.ch);
        System.out.print(ex.str+" and ");
        System.out.print(ex.ch);
    }
    public void change(String str,char ch[]){
        str="test ok";
        ch[0]='c';
    }
}

 4.观察以下代码:

public class Example{
    String str=new String("hello");
    char[]ch={'a','b'};
    public static void main(String args[]){
        Example ex=new Example();
        ex.change(ex.str,ex.ch);
        System.out.print(ex.str+" and ");
        System.out.print(ex.ch);
    }
    public void change(String str,char ch[]){
        str="test ok";
        ch[0]='c';
    }
}
  • hello and cb
  • String类是final类型的,不能继承和修改这个类。str=“tesk ok”,其实是隐含的让Java生成一个新的String对象,那么就与原来的“Hello”没有任何关系,当函数结束,str作用结束,所以输出的还是“Hello”。 char ch[] 是传递引用,修改了原内容。

5. 观察以下代码:

class Car extends Vehicle
{
    public static void main (String[] args)
    {
        new  Car(). run();
    }
    private final void run()
    {
        System. out. println ("Car");
    }
}
class Vehicle
{
    private final void run()
    {
        System. out. println("Vehicle");
    }
}

下列哪些针对代码运行结果的描述是正确的?

  • Car
  • 首先final声明的方法是不能被覆盖的,但是这里并不错误,因为方法是private的,也就是子类没有继承父类的run方法,因此子类的run方法跟父类的run方法无关,并不是覆盖。new Car().run()也是调用子类的run方法。
  • 此题的父类方法有private修饰,所以对子类不可见,子类不能覆盖。所以子类方法和父类是两个方法。

    扩展:如果父类方法将private改为public 会怎样?

            会报错,因为父类方法有final修饰,不能被覆盖。

6.以下关于JAVA语言异常处理描述正确的有?

  • try是用于检测被包住的语句块是否出现异常,如果有异常,则抛出异常,并执行catch语句。
  • finally语句块是不管有没有出现异常都要执行的内容。
  • Java语言中的异常处理包括声明异常、抛出异常、捕获异常和处理异常四个环节。

    throw用于抛出异常。

    throws关键字可以在方法上声明该方法要抛出的异常,然后在方法内部通过throw抛出异常对象。

    try是用于检测被包住的语句块是否出现异常,如果有异常,则抛出异常,并执行catch语句。

    cacth用于捕获从try中抛出的异常并作出处理。

    finally语句块是不管有没有出现异常都要执行的内容。

7.下列哪个选项是Java调试器?如果编译器返回程序代码的错误,可以用它对程序进行调试。

  • javac.exe是编译.java文件

  • java.exe是java虚拟机,执行编译好的.class文件

  • javadoc.exe用来制作java文档

  • jdb.exe是java的调试器

  • javaprof,exe是剖析工具

     

 

 

### 关于蓝桥杯竞赛中的C语言回文字符串练习及其解法 对于蓝桥杯竞赛中涉及的回文字符串问,在C语言环境下可以通过多种方式实现。下面提供一种常见的解决方案,该方案不仅适用于比赛环境下的快速编写需求,同时也能够帮助理解如何高效处理此类逻辑。 #### 定义与初步准备 首先定义什么是回文串——即正读反读均相同的序列。为了简化输入输出过程并提高程序可移植性,这里假设已经通过标准输入获取了一个不含空白符的纯字母数字组成的字符串[^1]。 #### 实现思路 核心在于构建两个指针分别指向待检测字符串首尾两端并向中间靠拢比较对应位置上的字符是否相等直到相遇为止;如果过程中遇到不匹配的情况则立即返回不是回文的结果;反之当循环结束仍未发现差异时说明给定字符串确实构成回文特性。 ```c #include <stdio.h> #include <string.h> int isPalindrome(char str[]) { int i = 0; int j = strlen(str) - 1; // 获取字符串长度减去终止符'\0'的位置 while(i < j){ if(str[i++] != str[j--]) return 0; // 若有任意一对不同,则非回文 } return 1; // 所有对比项相同视为回文 } void main(){ char testStr[]="level"; if(isPalindrome(testStr)){ printf("%s 是回文。\n",testStr); }else{ printf("%s 不是回文。\n",testStr); } } ``` 上述代码展示了基本框架以及具体操作细节,其中`isPalindrome()`函数负责执行实际判定工作而`main()`部分用于测试验证目的。 #### 进一步优化建议 考虑到可能存在的大小写字母混杂情况或是其他特殊符号干扰因素,在正式比赛中应当先对原始数据做适当预处理比如统一转换成小写形式或者忽略掉所有非字母字符后再进行后续分析以确保准确性[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值