当前位置: 首页 > 科技观察

20道热门Java高级面试题汇总

时间:2023-03-22 11:04:57 科技观察

这是Java高级面试题系列的最新篇。这部分讨论变量参数、断言、垃圾收集、初始化器、标记化、日期、日历和其他核心Java问题。程序员面试指南:https://www.youtube.com/watch?v=0xcgzUdTO5MJava面试题集锦指南:https://www.youtube.com/watch?v=GnR4hCvEIJQ什么是可变参数?断言有什么用?什么时候使用断言?什么是垃圾收集?用例子解释垃圾收集?垃圾回收什么时候运行?垃圾收集的最佳实践?什么是初始化数据块?什么是静态初始化器?什么是实例初始化块?什么是正则表达式?什么是代币化?举个代币化的例子?如何使用扫描仪类(ScannerClass)标记化?如何将小时(小时)添加到日期对象(DateObjects)?如何格式化日期对象?Java中日历类(CalendarClass)的用途是什么?如何在Java中获取日历类的实例?解释一下Calendar类中的一些重要方法?数字格式类的目的是什么?什么是可变参数?可变参数允许使用不同数量的参数调用方法。请参阅下面示例中的sum方法。可以使用1个int参数,或2个int参数,或多个int参数调用此方法。//int(type)followed...(threedot's)issyntaxofvariableargument.publicintsum(int...numbers){//insidethemethodavariableargumentissimilartoanarray.//numbercanbetreatedasifitisdeclaredasint[]numbers;intsum=0;for(intnumber:numbers){sum+=number;}returnsum;}publicstaticvoidmain(String[]args){VariableArgumentExamplesexample=newVariableArgumentExamples();//3ArgumentsSystem.out.println(example.sum(1,4,5));//10//4ArgumentsSystem.out.println(example.sum(1,4,5,20));//30//0ArgumentsSystem.out.println(example.sum());//0}什么是断言?Java1.4中引入了断言。它允许您检验假设。如果断言失败(即返回false),则抛出AssertionError(如果启用断言)。一个基本的断言如下所示。privateintcomputerSimpleInterest(intprincipal,floatinterest,intyears){assert(principal>0);return100;}什么时候使用断言?断言不应用于验证公共方法或命令行参数的输入数据。IllegalArgumentException将是更好的选择。在公共方法中,只使用断言来检查不应该发生在它们身上的事情。什么是垃圾收集?垃圾收集是Java中自动内存管理的另一个名称。垃圾收集的目的是为程序保留尽可能多的空闲堆。JVM删除堆上不再从堆中引用的对象。用例子解释垃圾收集?例如,将从函数调用以下方法。voidmethod(){Calendarcalendar=newGregorianCalendar(2000,10,30);System.out.println(calendar);}通过引用函数第一行代码中的变量calendar在堆上创建一个GregorianCalendar类的对象.函数执行完毕后,引用变量calendar不再有效。因此,不会在方法中创建对该对象的引用。JVM认识到这一点并从堆中删除该对象。这称为垃圾收集。#p#垃圾回收什么时候运行?垃圾收集运行在JVM的一时兴起(还不错)。运行垃圾回收的可能场景是:可用堆内存不足CPU空闲垃圾回收的最佳实践?以编程方式,我们可以要求(记住这只是一个请求-而不是命令)JVM通过调用System.gc()方法运行垃圾收集。当内存已满并且堆上没有可用于垃圾回收的对象时,JVM可能会抛出OutOfMemoryException。对象在通过垃圾回收从堆中移除之前运行finalize()方法。我们建议不要使用finalize()方法编写任何代码。什么是初始化数据块?初始化块——创建对象或加载类时运行的代码。初始化块有两种类型:静态初始化程序:加载类时运行的代码实例初始化程序:创建新对象时运行的代码什么是静态初始化程序?看看下面的例子:static{和}之间的代码称为静态初始值设定项。它仅在第一次加载类时运行。在静态初始值设定项中只能访问静态变量。虽然创建了三个实例,但静态初始化程序只运行一次。publicclassInitializerExamples{staticintcount;inti;static{//Thisisastaticinitializers.RunonlywhenClassisfirstloaded.//OnlystaticvariablescanbeaccessedSystem.out.println("StaticInitializer");//i=6;//COMPILERRORSystem.out.println("CountmainwhenStaticInitialize+count)staticrunning;(String[]args){InitializerExamplesexample=newInitializerExamples();InitializerExamplesexample2=newInitializerExamples();InitializerExamplesexample3=newInitializerExamples();}}输出示例创建类实例的时间。publicclassInitializerExamples{staticintcount;inti;{//这是一个instanceinitializers.Runeverytimeanobjectiscreated.//staticandinstancevariablescanbeaccessedSystem.out.println("InstanceInitializer");i=6;count=count+1;System.out.println("CountwhenInitializerisrunis"+count);}publicstaticvoidmain(String[]args){InitializerExamplesexample=newInitializerExamples();InitializerExamplesexample1=newInitializerExamples();InitializerExamplesexample2=newInitializerExamples();}}示例输出InstanceInitializerCountwhenInstanceInitializerisrunis1InstanceInitializerCountwhenInstanceInitializerisrunis2InstanceInitializerCountwhenInstanceInitializerisrunis3什么是正则表达式?Regularexpressionsmakeitveryeasytoparse,scan,and拆分字符串。Java中常用的正则表达式-Patter、Matcher和Scanner类。什么是代币化?标记化是指根据分隔符将字符串拆分为多个子字符串。例如,分隔符;将字符串ac;bd;def;e拆分为四个子字符串ac、bd、def和e。分隔符本身也可以是一个普通的正则表达式。String.split(regex)函数将正则表达式作为参数。举个代币化的例子?privatestaticvoidtokenize(Stringstring,Stringregex){String[]tokens=string.split(regex);System.out.println(Arrays.toString(tokens));}tokenize("ac;bd;def;e",";");//[ac,bd,def,e]如何使用扫描器类(ScannerClass)标记化?privatestaticvoidtokenizeUsingScanner(Stringstring,Stringregex){Scannerscanner=newScanner(string);scanner.useDelimiter(regex);Listma??tches=newArrayList();while(scanner.hasNext()){matches.add(扫描仪.next());}System.out.println(matches);}tokenizeUsingScanner("ac;bd;def;e",";");//[ac,bd,def,e]如何添加小时(小时)到日期对象(日期对象)?现在,让我们看看如何向日期对象添加小时数。所有对date的日期操作都需要在date上加上毫秒。比如我们要加上6小时,那么我们需要把6小时换算成毫秒。6小时=6*60*60*1000毫秒。请看下面的例子。Datedate=newDate();//增加时间6小时date.setTime(date.getTime()+6*60*60*1000);System.out.println(date);//减少时间6小时date=newDate();date.setTime(date.getTime()-6*60*60*1000);System.out.println(日期);如何格式化日期对象?格式化日期需要使用DateFormat类来完成。让我们看几个例子。//格式化日期System.out.println(DateFormat.getInstance().format(date));//10/16/125:18AM带语言环境的格式化日期如下所示:System.out.println(DateFormat.getDateInstance(DateFormat.FULL,newLocale("it","IT")).format(date));//marted“16ottobre2012System.out.println(DateFormat.getDateInstance(DateFormat.FULL,Locale.ITALIAN).format(date));//marted“16ottobre2012//这个使用默认localeUSSystem.out.println(DateFormat.getDateInstance(DateFormat.FULL).format(date));//2012年10月16日,星期二System.out.println(DateFormat.getDateInstance().format(date));//2012年10月16日format(date));//10/16/12System.out.println(DateFormat.getDateInstance(DateFormat.MEDIUM).format(date));//Oct16,2012System.out.println(DateFormat.getDateInstance(DateFormat.LONG)).format(date));//October16,2012Java中日历类(CalendarClass)的作用是什么?日历类(Youtube视频链接-https://www.youtube.com/watch?v=hvnlYbt1ve0)在Java中用于处理日期。Calendar类提供了方便的方法来递增和递减日、月和年。它还提供了很多与日期相关的详细信息(一年中的哪一天?星期几?等等)如何在Java中获取日历类(CalendarClass)的实例?无法使用新日历创建日历类。获取Calendar类实例的最佳方法是使用Calendar中的getInstance()静态方法。//Calendarcalendar=newCalendar();//COMPILERRORCalendarcalendar=Calendar.getInstance();解释一下日历类(CalendarClass)中的一些重要方法?在Calendar对象上设置日、月或年并不难。为日、月或年调用适当的常量设置方法。下一个参数是值。calendar.set(Calendar.DATE,24);calendar.set(Calendar.MONTH,8);//8-Septembercalendar.set(Calendar.YEAR,2010);calendarget方法获取特定日期-2010年的信息9月24日。我们可以使用日历获取方法。传递的参数表示我们要从日历中获取的值-日或月或年或...您可以从日历中获取的值如下:System.out.println(calendar.get(Calendar.YEAR));//2010System.out.println(calendar.get(Calendar.MONTH));//8System.out.println(calendar.get(Calendar.DATE));//24System.out.println(calendar.get(Calendar.WEEK_OF_MONTH));//4System.out.println(calendar.get(Calendar.WEEK_OF_YEAR));//39System.out.println(calendar.get(Calendar.DAY_OF_YEAR));//267System.out.println(calendar.getFirstDayOfWeek());//1->Calendar.SUNDAY数字格式类(NumberFormatClass)的用途?数字格式用于将数字格式化为不同的语言环境和不同的格式。使用默认语言环境的数字格式System.out.println(NumberFormat.getInstance().format(321.24f));//321.24使用语言环境的数字格式使用荷兰语语言环境格式化数字:System.out.println(NumberFormat.getInstance(newLocale)("nl")).format(4032.3f));//4.032,3使用德语语言环境格式化数字:System.out.println(NumberFormat.getInstance(Locale.GERMANY).format(4032.3f));//4.032,3使用默认语言环境格式化货币System.out.println(NumberFormat.getCurrencyInstance().format(40324.31f));//$40,324.31使用语言环境格式化货币使用荷兰语语言环境格式化货币:System.out.println(NumberFormat.getCurrencyInstance(newLocale("nl")).format(40324.31f));//?40.324,31根据TheCodeProjectOpenLicense(CPOL)许可本文以及任何相关的源代码和文档。

最新推荐
猜你喜欢