整理(一)

这篇博客讨论了Java中的并发编程概念,解释了`synchronized`关键字如何确保线程安全并给出了一个示例。同时,文章还介绍了Java对象的序列化能力,需要实现`Serializable`接口来启用。此外,还探讨了类的成员访问权限,特别是静态方法的调用规则。最后,文章提出了一个关于统计字符串插入回文串的可能性的编程问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.执行如下程序,输出结果是(C )

class Test
{
    private int data;
    int result = 0;
    public void m()
    {
        result += 2;
        data += 2;
        System.out.print(result + " " + data);
    }
}
class ThreadExample extends Thread
{
    private Test mv;
    public ThreadExample(Test mv)
    {
        this.mv = mv;
    }
    public void run()
    {
        synchronized(mv)
        {
            mv.m();
        }
    }
}
public class ThreadTest {

    public static void main(String args[])
    {
        Test mv = new Test();
        Thread t1 = new ThreadExample(mv);
        Thread t2 = new ThreadExample(mv);
        Thread t3 = new ThreadExample(mv);
        t1.start();
        t2.start();
        t3.start();
    }
}

A .0 22 44 6
B. 2 42 42 4
C .2 24 46 6
D. 4 44 46 6

使用了synchronized关键字,所以三次new出来的对象依次进入线程开始执行
t1、t2、t3进入线程顺序不一定,但是对最终结果没有影响
第一次start():result=2;data=2,输出为2 2
第二次start():result=4;data=4,输出为4 4
第三次start():result=6;data=6,输出为6 6
由于没有换行,所以最终结果为2 24 46 6
2.要使对象具有序列化能力,则其类应该实现如下哪个接口(A)

A java.io.Serializable
B java.lang.Cloneable
C java.lang.CharSequence
D java.lang.Comparable

类的序列化由实现java.io.Serializable接口的类启用。 序列化接口没有方法或字段,仅用于标识可串行化的语义。
一个类实现Cloneable接口,以指示Object.clone()方法,该方法对于该类的实例进行现场复制是合法的。
CharSequence是char值的可读序列。 该界面提供统一的,只读访问许多不同类型的char序列。
该接口对实现它的每个类的对象强加一个整体排序。 这个排序被称为类的自然排序 ,类的compareTo方法被称为其自然比较方法 。
3.假设 A 类有如下定义,设 a 是 A 类的一个实例,下列语句调用哪个是错误的?(C)

public class A
{
    public int i;
    static String s;
    void method1(){}
    static void method2(){}
}

A System.out.println(a.i);
B a.method1();
C A.method1();
D A.method2();

static修饰的成员变量和方法,既可以直接通过类名进行调用,也可以通过实例(也就是对象)调用。
无static修饰的只能通过实例(也就是对象)调用
4.【统计回文】“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。花花非常喜欢这种拥有对称美的回文串,生日的时候她得到两个礼物分别是字符串A和字符串B。现在她非常好奇有没有办法将字符串B插入字符串A使产生的字符串是一个回文串。你接受花花的请求,帮助她寻找有多少种插入办法可以使新串是一个回文串。如果字符串B插入的位置不同就考虑为不一样的办法。
例如:
A = “aba”,B = “b”。这里有4种把B插入A的办法:
在A的第一个字母之前: “baba” 不是回文
在第一个字母‘a’之后: “abba” 是回文
在字母‘b’之后: “abba” 是回文
在第二个字母’a’之后 “abab” 不是回文
所以满足条件的答案为2

输入描述

每组输入数据共两行。
第一行为字符串A
第二行为字符串B
字符串长度均小于100且只包含小写字母

输出描述

输出一个数字,表示把字符串B插入字符串A之后构成一个回文串的方法数

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str1 = scanner.nextLine();
        String str2 = scanner.nextLine();
        int count = 0;
        for (int i = 0; i <= str1.length(); i++) {
            StringBuilder sb = new StringBuilder(str1);
            sb.insert(i,str2);
            if (isHuiWen(sb.toString())){
                count++;
            }
        }
        System.out.println(count);
    }

    public static boolean isHuiWen(String str){
        int i = 0;
        int j = str.length()-1;
        while (i<j){
            if (str.charAt(i) != str.charAt(j)){
                return false;
            }
            i++;
            j--;
        }
        return true;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值