Java基础

Java常用类

Date

类Date表示特定的瞬间,精确到毫秒

date.get API

        Robot robot=new Robot();
        robot.delay(3000);
        
        while(true) {
            robot.mouseMove(500, 500);
            
            Date date=new Date();
            if(date.getMinutes()==53) {//53记得换
            break;
        }
        
    }
            

注意:getMonth()是得到的数据是0~11,0表示第一个月

getTime()得到的是从1970年1月1日到现在所经过的毫秒数

getTimezoneOffset() 方法可返回格林威治时间和本地时间之间的时差,以分钟为单位。

getClass()方法是Date类继承Object类中的方法。

日期格式化

SimpleDateFormat类(简单日期格式化)

SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

日期转成String(format)

String 换成Date(parse)

Calendar(日历)

  • Calendar是一个抽象类,用于表示日历。因为Date类在设计上存在一些缺陷,所以Java提供Calendar类来更好的处理日期和时间。

  • Calendar类不能直接创建,可以通过类方法来创建一个Calendar的子类,Java本身提GregorianCalendar子类,通过getInstance()方法返回默认时区和语言环境获得一个日历,返回的实例就是Java提供的默认子类。

    public static void main(String[] args)  throws Exception{
            Calendar cal = Calendar.getInstance();
            System.out.println(cal);  
            System.out.println(calendar.getTime());
            System.out.println(calendar.getTimeInMillis());
    }

    Calendar与Date都是表示日期的工具类,他们之间可以相互转换。

    public static void main(String[] args)  throws Exception{
            Calendar cal = Calendar.getInstance();
            Date date = new Date(calendar.getTimeInMillis());
            System.out.println(date);
            
        }

Calendar类提供的常用方法

注:calendar.getTime()得到的是当前时间

getTime()、getTimeInMillis()

(1) void add(int field,int amount):根据日历的规则,为给定的日历字段添加或减去指定的时间量。

(2) int get(int field):返回指定日历字段的值。

(3) int getActualMaximum(int field):返回指定日历字段的可能拥有的最大值。

(4) int getActualMinimum(int field):返回指定日历字段的可能拥有的最小值。

(5) void roll(int field,int amout):与add方法相似,区别在于超过该字段的最大范围时,也不会向上一个字段进位。

(6) void set(int field,int value):将给定的日历字段设置为给定值。

(7) void set(int year,int month,int date):设置Calendar对象的年、月、日3个字段值。

(8) void set(int year,int month,int date,int hourOfDay,int minute,int second):设置Calendar对象的年、月、日、时、分、秒6个字段的值。

Random

.nextInt()

Math

Java提供了最简单加、减、乘、除、取模等基本运算。同时还提供了Math类来进行更复杂的数学运算。

Math不用new ,直接点

PI圆周率,abs取绝对值(正数是他本身,负数是他相反数),sin,tan,,,数学求角度,max,,min,,传两个参数,返回的就是最大的,最小的那个数

Math.random()~0到1之间的随机数

BigDecimal

double、float浮点数在进行数据基本运算时会发生数据丢失现象,这种情况不仅仅是在Java语言中,在其他语言中同样存在。

System.out.println(0.05+0.01); System.out.println(1.0-0.42); System.out.println(4.015*100); System.out.println(123.3/100);

Java提供了BigDecimal类,用于处理进行基本运算发生的数据丢失问题。使用BigDecimal构造器创建对象时,建议优先使用String类型对象作为参数传入进行初始化。

例如:BigDecimal decimal = new BigDecimal(“12.5”);

BigDecimal类提供了add()加、subtract()减、multiply()乘、divide()除,pow()取余等方法对精确浮点数进行常规算术运算。

String

charAt() 根据下标拿对应的字符

indexOf()根据字符拿下标,不存在返回-1

lastindexOf()最后一个字符出现的下标

concat()拼接字符串

contains()判断是否包含某个字符串

endWith()判断是否以什么结尾

startsWith()判断是否以什么开始

equals()判断两个字符串是否相等 ==

equalsIgnoreCase()忽略大小写判断

isEmpty()判断是否为空

replace()字符替换并不改变原有值

split()分割字符串

substring()截取字符串 包前不包后

内存问题

String定义的字符串为一个常量,一旦被赋值,不可被改变。

使用String a="hello";定义字符串时,系统会先去堆内存(常量池)中查找有没有hello存在,如果有则会直接放回该对象的地址,如果没有,则新建该对象再返回地址值。

使用new String("hello");时,因为new关键字的存在,每次都会创建新对象

==面试题==

写出下面的输出结果

String s1=new String("abc");
String s2="abc";
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
​
String s3="bbb";
String s4="bbb";
System.out.println(s3==s4);
​
String s5=new String("ccc");
String s6=new String("ccc");
System.out.println(s5==s6);
​
String s7="hello";
String s8="world";
String s9="helloworld";
​
System.out.println(s9==s7+s8);
System.out.println(s9=="hello"+"world");

==重点==:

  • 字符串如果是变量相加,先开空间,再拼接

  • 字符串如果是常量相加,先拼接,然后再常量池找,如果有就直接返回,没有再创建

StringBuffer和StringBuilder

可变字符串、方法一模一样

二者的区别:前者是线程安全的可变字符串,后者线程不安全

    //StringBuffer() 无参构造方法
    StringBuffer buffer = new StringBuffer();
    System.out.println("buffer"+buffer);
    System.out.println("buffer.capacity()"+buffer.capacity());
    System.out.println("buffer.length()"+buffer.length());
    System.out.println("------------------");
        
    //StringBuffer(int capacity)  指定容量的字符串缓冲区对象
    StringBuffer buffer2 = new StringBuffer(50);
    System.out.println("buffer2"+buffer2);
    System.out.println("buffer2.capacity()"+buffer2.capacity());
    System.out.println("buffer2.length()"+buffer2.length());
    System.out.println("-----------------------");
    
    //StringBuffer(String str)  指定字符串内容的字符串缓冲区对象
    StringBuffer buffer3 = new StringBuffer("hello");
    System.out.println("buffer3"+buffer3);
    System.out.println("buffer3.capacity()"+buffer3.capacity());
    System.out.println("buffer3.length()"+buffer3.length());

常见方法

  • 添加:

    • append

    • insert

  • 删除:

    • deleteCharAt

    • delete

  • 替换

    • replace

  • 反转

    • reverse

==面试==

  • String,StringBuffer,StringBuilder的区别

    • String内容不可变,后两个内容可变

    • StringBuffer是线程同步的,数据安全,效率低;后者线程不同步,数据不安全,效率高

  • String,StringBuffer作为参数传递(值传递和引用传递,面向对象讲)

Scanner

Scanner scanner = new Scanner(System.in);

String类型 scanner.next();

int类型 scanner.nextInt();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值