2021-10-14每日一练

本文主要涵盖了Java编程的基础知识,包括选择题的解析和蓝桥杯大赛历年真题的解答。涉及内容包括数据类型、内存管理、面向对象、异常处理、集合框架、并发编程等多个核心概念。通过实例分析,加深了对Java语言特性的理解和运用。
摘要由CSDN通过智能技术生成

一丶java选择题

  1. 程序Demo.java编译运行后输出的结果是:( )
    复制代码
    public class Demo{
    int x=1;
    int y;
    public static void main(String [] args){
    int z=2;
    Demo t=new Demo();
    System.out.println(t.x+t.y+z);
    }
    }
    正确答案: A 你的答案: A (正确)
    3
    12
    1
    5

成员变量为int类型可以不初始化,默认值为0
局部变量为int类型必须初始化,没有默认值

局部变量参与运算前是必须要初始化的,比如下面的代码就会编译出错,提示y必须要初始化
public static void main(String[] args) {
int x = 1;
int y;
int z = x + y;
}

  1. 如果子类要调用父类的无参构造函数,则通过super()调用来实现。
    正确答案: A 你的答案: A (正确)
    正确
    错误

super关键字在子类内部使用,代表父类对象。
访问父类的属性 super.属性名
访问父类的方法 super.方法名()
子类构造方法需要调用父类的构造方法时,在子类的构造方法体里最前面的位置:super()

  1. 编译 Java 源程序文件产生的字节码文件的扩展名为()
    正确答案: B 你的答案: A (错误)
    java
    class
    html
    exe

java源文件的后缀名是.java。源文件通过jvm虚拟机编译后会生成二进制字节码文件,后缀是.class

  1. int i = 3;
    String result = new String();
    switch (i) {
    case 1:
    result = result + "him ";
    case 2:
    result = result + "her ";
    case 3:
    result = result + "it ";
    default:
    result = result + "me ";
    }
    System.out.println(result);
    请给出最终输出内容。
    正确答案: A 你的答案: A (正确)
    it me
    him her it me
    him her
    me

没有break;会向下穿透,执行default
如果有break就会跳出,不执行以下程序
属于分支结构的一种,先判断条件,再选择执行代码块

  1. 定义:String s1 = “uml”; String s2 = “uml”; String s3= new String(“uml”); String s4= new String(“uml”);那么,s1==s2;s3 == s4;s1.equals(s3); 判断正确与否
    正确答案: A 你的答案: A (正确)
    T,F,T
    F,T,F

== 的作用:
  基本类型:比较值是否相等
   Java中的8种基本数据类型(byte,short,char,int,long,float,double,boolean)
  引用类型:比较内存地址值是否相等

equals 的作用:
  引用类型:默认情况下,比较内存地址值是否相等。可以按照需求逻辑,重写对象的equals方法。

= =:比较两个引用的地址和值
equals:比较两个引用的值
1、s1==s2 true s1和s2指向字符串常量池中同一个地址
2、s3 和 s4 都显示使用了new,是不同的对象, 当然不相等
3、s1 和 s3 的值都是 “uml”,当然相等

  1. java中,用( )关键字定义常量?
    正确答案: A 你的答案: A (正确)
    final
    #define
    float
    const

final关键字可用于修饰类、变量和方法。final修饰变量时,表示该变量一旦获得了初始值就不可被改变,final既可以修饰成员变量也可以修饰局部变量、形参。

const是C和C++中的常量关键字

final关键字
1.final修饰变量,则等同于常量
2.final修饰方法中的参数,称为最终参数。
3.final修饰类,则类不能被继承
4.final修饰方法,则方法不能被重写。

  1. 类Test1定义如下:
    public class Test1{//1
    public float aMethod(float a,float b){}//2
    //3
    }//4
    将以下哪种方法插入行3是不合法的。
    正确答案: C 你的答案: C (正确)
    public int aMethod(int a,int b){}
    private float aMethod(int a,int b,int c){}
    public float aMethod(float a,float b){}
    public float aMethod(float a,float b,float c){}

方法重载具体规范

  1. 方法名一定要相同。
  2. 方法的参数表必须不同,包括参数的类型或个数,以此区分不同的方法体。
  3. 方法的返回类型、修饰符可以相同,也可不同。
  1. 关于AOP错误的是?
    正确答案: C 你的答案: C (正确)
    AOP将散落在系统中的“方面”代码集中实现
    AOP有助于提高系统可维护性
    AOP已经表现出将要替代面向对象的趋势
    AOP是一种设计模式,Spring提供了一种实现

AOP 和 OOP的区别:

  1. 面向方面编程 AOP 偏重业务处理过程的某个步骤或阶段,强调降低模块之间的耦合度,使代码拥有更好的移植性。
  2. 面向对象编程 (oop) 则是对业务分析中抽取的实体进行方法和属性的封装。
    也可以说 AOP 是面向业务中的动词领域, OOP 面向名词领域。
    AOP 的一个很重要的特点是源代码无关性,也就是说如果我们的系统中引用了 AOP 组件,即使我们把该组件去掉,系统代码也应该能够编译通过。要实现这一点,可以使用动态 proxy 模式。
  1. 正则表达式语法中 \d 匹配的是?()
    正确答案: A 你的答案: A (正确)
    数字
    非数字
    字母
    空白字符

\d 匹配一个数字字符。等价于 [0-9]。
\D 匹配一个非数字字符。等价于 [^0-9]。
\f 匹配一个换页符。等价于 \x0c 和 \cL。
\n 匹配一个换行符。等价于 \x0a 和 \cJ。
\r 匹配一个回车符。等价于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t 匹配一个制表符。等价于 \x09 和 \cI。
\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。
\w 匹配字母、数字、下划线。等价于’[A-Za-z0-9_]’。
\W 匹配非字母、数字、下划线。等价于 ‘[^A-Za-z0-9_]’。

  1. 下列关于修饰符混用的说法,错误的是( )
    正确答案: D 你的答案: D (正确)
    abstract不能与final并列修饰同一个类
    abstract 类中不建议有private的成员
    abstract 方法必须在abstract类或接口中
    static方法中能直接处理非static的属性

A、abstract修饰的类,不可实例化,所以需要子类去继承,然后重写其中的抽象方法。但是final修饰类是不可继承的。两者属性相冲。
B、看清楚,人家说的是不建议有,不是不能有。
C、抽象类中可以没有抽象方法,但是抽象方法必须在抽象类中或者接口中
D、static不可以修饰非static的属性,因为类加载的时候,static属性比非static先初始化,那么一个存在的总不能访问一个没有存在的吧。

  1. 在委托事件模型中,源生成事件并把它发送给一个或多个监听器,每个监听器必须向事件源注册。
    正确答案: A 你的答案: B (错误)
    T
    F
  2. Java 的屏幕坐标是以像素为单位,容器的左下角被确定为坐标的起点。
    正确答案: B 你的答案: B (正确)
    正确
    错误

容器的左上角被确定为坐标的起点。

  1. 下面代码的执行结果是 :
    class Chinese{
    private static Chinese objref =new Chinese();
    private Chinese(){}
    public static Chinese getInstance() { return objref; }
    }
    public class TestChinese {
    public static void main(String [] args) {
    Chinese obj1 = Chinese.getInstance();
    Chinese obj2 = Chinese.getInstance();
    System.out.println(obj1 == obj2);
    }
    }
    正确答案: A 你的答案: B (错误)
    true
    false
    TRUE
    FALSE

单例模式,obj1和obj2其实是一个对象,应该返回true

  1. 下列程序test 类中的变量c 的最后结果为
    public class Test {
    public static void main(String args[]) {
    int a = 10;
    int b;
    int c;
    if (a > 50) {
    b = 9;
    }
    c = b + a;
    }
    }
    正确答案: D 你的答案: D (正确)
    10
    0
    19
    编译出错

方法内定义的变量没有初始值,必须要进行初始化。 类中定义的变量可以不需要赋予初始值,默认初始值为0。

  1. 在Java中,以下数据类型中,需要内存最多的是()
    正确答案: B 你的答案: C (错误)
    byte
    long
    Object
    int

Object 是引用数据类型,只申明而不创建实例,只会在栈内存中开辟空间,默认为空,空占1 bit.

byte:8位,最大存储数据量是255,存放的数据范围是-128~127之间。
short:16位,最大数据存储量是65536,数据范围是-32768~32767之间。
int:32位,最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1。
long:64位,最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1。
float:32位,数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F。
double:64位,数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加。
boolean:只有true和false两个取值。
char:16位,存储Unicode码,用单引号赋值。
注:一个字节=8位。
所以,整型数据类型中,需要内存空间最多的是long。

  1. BufferedReader的父类是以下哪个?
    正确答案: D 你的答案: D (正确)
    FilterReader
    InputStreamReader
    PipedReader
    Reader
    在这里插入图片描述
  2. 检查程序,是否存在问题,如果存在指出问题所在,如果不存在,说明输出结果。
    public class Example {
    String str = new String(“good”);
    char[] ch = {‘a’,‘b’,‘c’};
    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]= ‘g’;
    }
    }
    正确答案: D 你的答案: D (正确)
    test okandabc
    test okandgbc
    goodandabc
    goodandgbc

java 中String是 immutable的,也就是不可变,一旦初始化,其引用指向的内容是不可变的。
也就是说,String str = “aa”;str=“bb”;第二句不是改变“aa”所存储地址的内容,而是另外开辟了一个空间用来存储“bb”;同时由str指向
原来的“aa”,现在已经不可达,GC时会自动回收。
因此String作为参数传进来时候,str= “test ok”; 实际给副本引用str指向了新分配的地址,该地址存储“test ok”。
因此,原先的str仍然指向“good”

  1. 关于访问权限,说法正确的是? ( )
    正确答案: A 你的答案: A (正确)
    类A和类B在同一包中,类B有个protected的方法testB,类A不是类B的子类(或子类的子类),类A可以访问类B的方法testB
    类A和类B在同一包中,类B有个protected的方法testB,类A不是类B的子类(或子类的子类),类A不可以访问类B的方法testB
    访问权限大小范围:public > 包权限 > protected > private
    访问权限大小范围:public > 包权限 > private > protected

访问权限大小范围:public>protected>包权限(default)>private
在这里插入图片描述

  1. 已知如下类说明:
    public class Test{
    private float f=1.0f;
    int m=12;
    static int n=1;
    public static void main(String args[]){
    Test t=new Test();
    }
    }
    如下哪些使用是正确的()
    正确答案: D 你的答案: C (错误)
    t.f = 1.0
    this.n
    Test.m
    Test.n

A:编译不成功,因为float浮点类型默认是double类型 所以float f=1.0f;(必须加上f 强调定义的是float)此处是精度由高(double)向低(float)转型所以会报错 但是若是float f=1;这里是默认类型是Int 类型 精度由低(int)向高转型(float)不丢失精度不会报错。
B:this的使用时针对在方法内部使局部变量等值于实例变量而使用的一个关键字,此处的n是静态变量而非实例变量 所以this的调用会出错(试想一下,static本来是全类中可以使用的,是全局的,你非得this去调用,这不是区分局部变量和实例变量的分水线吗?但是此处是全局的,不需要区分)
C:m是实例变量,什么是实例变量:就是需要new 一个对象出来才能使用的,这里直接用类名就调用了,jvm怎么知道m是谁?
D:类变量可以通过类直接调用

  1. 下面有关java hashmap的说法错误的是?
    正确答案: C 你的答案: B (错误)
    HashMap 的实例有两个参数影响其性能:“初始容量” 和 “加载因子”。
    HashMap 的实现不是同步的,意味着它不是线程安全的
    HashMap通过开放地址法解决哈希冲突
    HashMap中的key-value都是存储在Entry数组中的

hashmap采用拉链法解决冲突

  1. 要使某个类能被同一个包中的其他类访问,但不能被这个包以外的类访问,可以( )
    正确答案: A 你的答案: C (错误)
    让该类不使用任何关键字
    使用private关键字
    使用protected关键字
    使用void关键字

default和protected的区别是:
前者只要是外部包,就不允许访问。
后者只要是子类就允许访问,即使子类位于外部包。

总结:default拒绝一切包外访问;protected接受包外的子类访问
22以下哪几个是java中的集合类型?
正确答案: A B D 你的答案: C D (错误)
Vector
Set
String
List.

  1. 单例模式中,两个基本要点是
    正确答案: A D 你的答案: A D (正确)
    构造函数私有
    静态工厂方法
    以上都不对
    唯一实例

什么是单例模式?
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

单例模式有分为饿汉式和懒汉式

特点:
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
应用实例:

1、一个班级只有一个班主任。
2、Windows 是多进程多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同时操作一个文件的现象,所以所有文件的处理必须通过唯一的实例来进行。
3、一些设备管理器常常设计为单例模式,比如一个电脑有两台打印机,在输出的时候就要处理不能两台打印机打印同一个文件。
优点:

1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例)。
2、避免对资源的多重占用(比如写文件操作)。
缺点:没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。

使用场景:
1、要求生产唯一序列号。
2、WEB 中的计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来。
3、创建的一个对象需要消耗的资源过多,比如 I/O 与数据库的连接等。
注意事项:getInstance() 方法中需要使用同步锁 synchronized (Singleton.class) 防止多线程同时进入造成 instance 被多次实例化。
实例

  1. 以下哪些方法是Object类中的方法
    正确答案: A B C D 你的答案: C D (错误)
    clone()
    toString()
    wait()
    finalize()
  2. Gadget has-a Sprocket and Gadget has-a Spring and Gadget is-a Widget and Widget has-a
    Sprocket 以下哪两段代码可以表示这个关系? (选择两项) ( )
    正确答案: A C 你的答案: B (错误)
    class Widget { Sprocket s; }
    class Gadget extends Widget { Spring s; }
    class Widget { }
    class Gadget extends Widget { Spring s1; Sprocket s2; }
    class Widget { Sprocket s1; Spring s2; }
    class Gadget extends Widget { }
    class Gadget { Spring s; }
    class Widget extends Gadget{ Sprocket s; }
  3. 关于下列代码的执行顺序,下面描述正确的有哪些选项()
    public class HelloA {
    public HelloA() {
    System.out.println(“A的构造函数”);
    }
    {
    System.out.println(“A的构造代码块”);
    }
    static {
    System.out.println(“A的静态代码块”);
    }
    public static void main(String[] args) {
    HelloA a = new HelloA();
    }
    }
    正确答案: A B C 你的答案: A B C (正确)
    打印顺序A的静态代码块> A的构造函数
    打印顺序A的静态代码块> A的构造代码块
    打印顺序A的构造代码块> A的构造函数
    打印顺序A的构造函数> A的构造代码块

加载顺序:
1.父类静态代码块
2.子类静态代码块
3.父类构造代码块
4.父类构造函数
5.子类构造代码块
6.子类构造方法
总结:先静态后非静态,先父类后子类。

  1. 根据下面这个程序的内容,判断哪些描述是正确的:( )
    public class Test {
    public static void main(String args[]) {
    String s = “tommy”;
    Object o = s;
    sayHello(o); //语句1
    sayHello(s); //语句2
    }
    public static void sayHello(String to) {
    System.out.println(String.format(“Hello, %s”, to));
    }
    public static void sayHello(Object to) {
    System.out.println(String.format(“Welcome, %s”, to));
    }
    }
    正确答案: C D 你的答案: B E (错误)
    这段程序有编译错误
    语句1输出为:Hello, tommy
    语句2输出为:Hello, tommy
    语句1输出为:Welcome, tommy
    语句2输出为:Welcome, tommy
    根据选用的Java编译器不同,这段程序的输出可能不同

  2. JDK1.7版本之前,接口和抽象类描述正确的有( )
    正确答案: B C 你的答案: A C (错误)
    抽象类没有构造函数。
    接口没有构造函数。
    抽象类不允许多继承。
    接口中的方法可以有方法体。

  3. 下面哪些赋值语句是正确的()
    正确答案: A B D 你的答案: A D (错误)
    long test=012
    float f=-412
    int other =(int)true
    double d=0x12345678
    byte b=128

A和B中long和float,正常定义需要加l和f,但是long和float属于基本类型,会进行转化,所以不会报出异常。AB正确
boolean类型不能和任何类型进行转换,会报出类型异常错误。所以C错。
D选项可以这样定义,D正确。
E选项中,byte的取值范围是-128—127。报出异常: cannot convert from int to byte.所以E选项错误。

  1. 以下语句返回值为 true 的是()
    正确答案: A B 你的答案: A C (错误)
    a1= =a2
    d1= =d2
    b1= =b2
    c1= =c2

对于-128到127之间的数, Integer直接从数组中取, 故a1, a2指向的是同一个对象, A正确.
其余都是new出来的对象, 显然地址都不相同.
int类型与Integer类型比较时, 先将Integer拆箱, 再比较值, 故B正确.

二、蓝桥杯大赛历届真题

在这里插入图片描述

public class Test01 {
	public static void main(String[] args) {
		int a = 0;
		String s = "";
		for (int i = 1; i <= 2020; i++) {
			s = s + i;
			for (int j = 0; j < s.length(); j++) {

				if (s.charAt(j) == '2') {
					a++;
					break;
				}
			}
			s = "";
		}
		System.out.println(a);//563
	}
}
  1. 一个数如果除了 1 和自己还有其他约数,则称为一个合数。
    例如:1, 2, 3不是合数,4, 6 是合数。
    请问从 1 到 2020 一共有多少个合数。
public class Test02 {
	public static void main(String[] args) {
		int n = 0;
		for (int i = 2; i <= 2020; i++) {
			for (int j = i - 1; j > 1; j--) {
				if (i % j == 0) {
					n++;
					break;
				}
			}
		}
		System.out.println(n);

	}
}

在这里插入图片描述

public class Test01 {
	public static void main(String[] args) {
		int a = 0;
		String s = "";
		for (int i = 1; i <= 2020; i++) {
			s = s + i;
			for (int j = 0; j < s.length(); j++) {

				if (s.charAt(j) == '2') {
					a++;
				//	break;
				}
			}
			s = "";
		}
		System.out.println(a);//563
	}
}

在这里插入图片描述

import java.util.Scanner;

public class Test04 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("请输入要计算num行和列的数字");
		int num = input.nextInt();		
		System.out.println(num * num + (num - 1) * (num - 1));
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值