每日五题-java面试题220807



1、日期和时间:

  • 如何取得年月日、小时分钟秒?

    创建 java.util.Calendar 实例,调用其get()方法传入不同的参数即可获得参数所对应的值。 Java 8 中可以使用 java.time.LocalDateTime 来获取,代码如下所示。

    package day220807;
    
    import java.time.LocalDate;
    import java.time.LocalDateTime;
    import java.util.Calendar;
    public class DateTimeTest {
        public static void main(String[] args) {
            Calendar calendar = Calendar.getInstance();
            System.out.println("年:"+calendar.get(Calendar.YEAR));  // 2022
            System.out.println("月:"+(calendar.get(Calendar.MONTH)+1));  // 8
            System.out.println("日:"+calendar.get(Calendar.DAY_OF_MONTH)); // 7
            System.out.println("时:"+calendar.get(Calendar.HOUR_OF_DAY)); // 18
            System.out.println("分:"+calendar.get(Calendar.MINUTE));  // 40
            System.out.println("秒:"+calendar.get(Calendar.SECOND));  //23
    
    
    //        java 8
            LocalDateTime dateTime = LocalDateTime.now();
            System.out.println(dateTime.getYear());
            System.out.println(dateTime.getMonthValue());
            System.out.println(dateTime.getDayOfMonth());
            System.out.println(dateTime.getHour());
            System.out.println(dateTime.getMinute());
            System.out.println(dateTime.getSecond());
        }
    }
    
  • 如何取得从 1970年 1月 1日 0时 0分 0秒到现在的毫秒数?

    System.out.println(Calendar.getInstance().getTimeInMillis());
    System.out.println(System.currentTimeMillis());
    System.out.println(Clock.systemDefaultZone().millis());
    
  • 如何取得某月的最后一天?

    @Test
    void test1(){
        /*获取某月的最后一天*/
        Calendar time = Calendar.getInstance();
        System.out.println(time.getActualMaximum(Calendar.DAY_OF_MONTH));
    }
    
  • 如何格式化日期?

    利用 java.text.DateFormat 的子类(如 SimpleDateFormat类)中的 format(Date) 方法可将日期格式化。 Java 8 中可以用 java.time.format.DateTimeFormatter 来格式化时间日期,代码如下所示。

    @Test
    void test2(){
        /*格式化日期*/
        SimpleDateFormat oldFormatter = new SimpleDateFormat("yyyy-MM-dd");
        Date date = new Date();
        System.out.println(oldFormatter.format(date));
    
    
        // java8
        DateTimeFormatter newFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        LocalDate date1 = LocalDate.now();
        System.out.println(date1.format(newFormatter));
    }
    

补充:

Java 的时间日期 API一直以来都是被诟病的东西,为了解决这一问题,Java8 中引入了新的时间日期API,其中包括 LocalDate、LocateTime、LocalDateTime、Clock、Instant 等类,这些类的设计都使用了不变模式,因此是线程安全的设计。


2、打印昨天的当前时刻

返回目录

@Test
public void test3(){
    /*打印昨天的当前时刻*/
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Calendar calendar = Calendar.getInstance();
    calendar.add(Calendar.DATE,-1);
    System.out.println(simpleDateFormat.format(calendar.getTime()));

    /*java8 实现方式*/
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    LocalDateTime today = LocalDateTime.now();
    LocalDateTime yesterday = today.minusDays(1);
    System.out.println(yesterday.format(formatter));
}

3、比较一下 Java 和 JavaScript

返回目录
JavaScript 与 Java 是两个公司开发的不同的两个产品。 Java 是原 SunMicrosystems 公司推出的面向对象的程序设计语言,特别适合于互联网应用程序开发;而 JavaScript 是 Netscape 公司的产品,为了扩展Netscape 浏览器的功能而开发的一种可以嵌入 Web 页面中运行的基于对象和事件驱动的解释性语言。 JavaScript 的前身是 LiveScript; 而 java 的前身是 Oak语言。

异同比较:

  1. 基于对象和面向对象:Java 是一种真正的面向对象的语言,即使是开发简单的程序,必须设计对象;JavaScript 是种脚本语言,它可以用来制作与网络无关的,与用户交互作用的复杂软件。它是一种基于对象(Object-Based) 和事件驱动(Event-Driven)的编程语言,因而它本身提供了非常丰富的内部对象供设计人员使用。
  2. 解释和编译:java 的源代码在执行之前,必须经过编译。JavaScript 是一种解释性编程语言,其源代码不需要经过编译,由于浏览器解释执行。(目前的浏览器几乎都使用了 JIT(即时编译)技术来提升 JavaScript 的运行效率。
  3. 强类型变量和类型弱变量:Java 采用强类型变量检查,即所有变量在编译之前必须作声明;JavaScript 中变量是弱类型的,甚至在使用变量前可以不做声明,JavaScript 的解释器在运行时检查推断其数据类型。
  4. 代码格式不一样。

补充:

上面列出的四点是网上流传的所谓的标准答案。其实 java 和 JavaScript 最重要的区别是一个是静态语言,一个是动态语言。目前的编程语言的发展趋势是函数式语言和动态语言。在 Java中类(class)是一等公民,而 JavaScript 中 函数(function)是一等公民,因此JavaScript 支持函数式编程,可以使用Lambda函数和闭包(closure),当然 Java8 也开始支持函数式编程,提供了对 Lambda 表达式以及函数式接口的支持。


4、什么时候用断言(assert)?

返回目录
断言在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。一般来说,断言用于保证程序最基本,关键的正确性。断言检查通常在开发和测试时开启。为了保证程序的执行效率,在软件发布后断言检查通常是关闭的。断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true;如果表达式的值为 false,那么系统会报告一个 AssertionError。 断言的使用如下面的代码所示。

@Test
public void test5(){
    int a = -1;
    assert (a>0);

}

在这里插入图片描述
断言可以有两种形式:

assert Experssion1;

assert Expression1:Expression2

Expression1 应该总是产生一个布尔值。

Expression2 可以是得出一个值的任意表达式;这个值用于生成显示更多调试信息的字符串消息。

要在运行时启用断言,可以在启动 JVM时使用 -enableassertions 或 -ea 标记。要在运行时选择禁用断言,可以在启动 JVM 时使用 -da 或 -disableassertions 标记。要在系统类中启用或禁用断言,可使用 -esa 或 -dsa 标记。还可以在包的基础上启用或禁用断言。

注意:断言不应该以任何方式改变程序的状态。简单的说,如果希望在不满足某些条件时阻止代码的执行,就可以考虑用断言来阻止它。


5、Error 和 Exception 有什么区别?

返回目录
Error 表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困难的情况下的一种严重问题;比如内存溢出,不可能指望程序能处理这样的情况。

Exception 表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题;也就说,它表示如果程序运行正常,从不会发生的情况。

源链接-掘金

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值