java基础知识二

Wesley13
• 阅读 522

数据类型

Java是一种强类型语言,必须为每一个变量声明一种类型java基础知识二 Java声明一个变量以后,必须显式初始化。 习惯上常量名使用全大写。 Java7开始可以在数字中使用下划线,增加辨识度,比如:10_000_000等

关系运算符与boolean运算符

  1. && 短路与
  2. || 短路或
  3. !非 其中使用短路与或,当左边操作数已经确定表达式的值,右边的操作数就不必计算。

位运算符

&与 |或 ^异或 ~非

Math类

在Math类中,为了达到最快性能,所有的方法都使用计算机浮点单元中的例程。如果得到一个完全可预测的结果比运行速度更重要的话,那么应该使用StrictMath类,可以确保所有平台得到相同的结果。

数值间的转换

java基础知识二 实线箭头表示转换数据无丢失,虚线箭头表示转换数据精度可能会丢失。就是字节数小的可以转换成字节数大的,相同大小字节不能转换,其中,整型可以转换成浮点数类型,浮点数类型转换成整型就可能丢失精度。 如果两个操作数,有一个是double类型,另一个操作数会转换成double; 否则,如果其中一个是float类型,另一个将会转换成float; 否则,如果其中一个是long类型,另一个将会转换成long; 否则,两个数将会转换成int类型。

字符串

String的substring方法可以从一个大的字符串提取一个子串。 String类没有提供用于修改字符串的方法,String是一个不可变类型,不可变类型的有点是:编译器可以让字符串共享。

检测字符串是否相等

可以使用equals方法检测两个字符串是否相等:

Str为字符串变量

Str.equals(otherString);
//注:值为null的变量是不能调用方法的,所以Str需要先检测是否为空
if(Str != null){
    Str.equals(otherString);
}

//或者已定的字符串常量放前面
otherString.equals(Str);

值传递

public class StringDemo{
    public static void main(String[] args){
         String s1 = "hello";
        String s2 = "world";
        System.out.println(s1 + "--------" +s2);
        change(s1, s2);
        System.out.println(s1 + "--------------" + s2); 
        
         StringBuffer sb1 = new StringBuffer("hello");
        StringBuffer sb2 = new StringBuffer("world");
        System.out.println(sb1 + "--------" +sb2);
        change(sb1, sb2);
        System.out.println(sb1 + "--------------" + sb2); 
    }
    //String等包装类是值传递的,所以s1和s2是在main方法中定义的,change方法中的操作无法影响到main方法中的输出
    //一个方法不能修改基本数据类型的参数
    public static void change(String s1, String s2){
        s1 = s2;
        System.out.println("this s1 = " + s1);
        s2 = s1 + s2;
        System.out.println("this s2 = " + s2);
    }
    //java 里只有值传递,一个方法不能实现让对象参数引用另一个新的对象,但是一个方法可以改变一个对象参数状态, 
    //下面change方法中sb1的地址值值改变了,main方法中sb1的地址值没变,sb2的地址值没变,但是地址中的参数改变了。
    //StringBuffer的append方法可以改变sb2的状态,而sb1是企图让对象参数引用另一个新的对象,这个是无法影响到main方法中的

    public static void change(StringBuffer sb1, StringBuffer sb2){
        sb1 = sb2;        
        System.out.println("this sb1 = " + sb1);
        sb2 = sb2.append(sb1);
    }
} 

java基础知识二

空串

""空串

str.length() == 0;
str.equals("");

有时候需要检查字符串是否是空串和空值null,这里要先检测是否为空值null,空串和空值是不一样的。

代码点和代码单元

代码点:是指一个编码表中的某个字符对应的代码值,也就是Unicode编码表中每个字符对应的数值。在UTF-16中的基本多语言级别中,每一个字符用16位表示,通常被称为代码单元。因为UTF-16编码采用不同长度的编码表示所有的Unicode代码点,因此增补字符采用的是一对连续的代码单元进行编码。

构建字符串

使用StringBuilder类的append()方法构建:

StringBuilfer sb = new StringBuilder();

//添加
sb.append("要添加的东西");

//通过toString()方法就可以得到一个String对象
String s = sb.toString();

输入输出

控制台读取输入输出

 import java.util.Scanner;

public class ScannerTest{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        if(sc.hasNext()){
            System.out.println(sc.next());
        }
        
    }
}

文件的输入输出

import java.util.Scanner;
import java.nio.file.Paths; 
import java.nio.file.Path;
public class ScannerTest2{
    public static void main(String[] args) throws Exception{
        Scanner sc = new Scanner(Paths.get("D:\\javatest\\ScannerTest2.java"));
        while(sc.hasNextLine()){
            System.out.println(sc.nextLine());
        }
    }
}

格式化输出

使用System.out.printf()格式化输出

printf("x = %d, y = %f\n", x, y); //格式化输出
/**
*    %s表示字符串
*    %d表示十进制证书
*    %f表示定点浮点数
*    %e表示指数浮点数
*    %表示通用浮点数
*    %c表示字符
*    %b表示布尔
*/

System.out.printf("%,.4f", 10000.0/3.0); //逗号表示分隔符
System.out.printf("%.4f", 10000.0/3.0); //.点后面的数字表示保留的小数位数

还可以使用String类的静态方法format创建一个格式化字符串,而不用打印输出:

String s = String.format("hello, %s next year, you'll be %s;" ,name, nice);

类的执行顺序

/*
* 父类静态初始化块
* 子类静态初始化块
* 父类初始化块
* 父类构造方法
* 子类初始化块
* 子类构造方法
*/
public class StaticClass extends sc{
    static{
        System.out.println("子类静态初始化块");
    }
    {
        System.out.println("子类初始化块");
    }
    public StaticClass(){
        System.out.println("子类构造方法");
    }
    public static void main(String[] args){
        StaticClass ss = new StaticClass();
    }
}
class sc{
    static{
        System.out.println("父类静态初始化块");
    }
    {
        System.out.println("父类初始化块");
    }
    public sc(){
        System.out.println("父类构造方法");
    }
}

枚举类 在比较两个枚举类型的值时,不要用equals方法,直接调用==就可以 toString的逆方法是valueOf();

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Java爬虫之JSoup使用教程
title:Java爬虫之JSoup使用教程date:201812248:00:000800update:201812248:00:000800author:mecover:https://imgblog.csdnimg.cn/20181224144920712(https://www.oschin
Wesley13 Wesley13
2年前
Java日期时间API系列31
  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
2年前
Java日期时间API系列30
  实际使用中,经常需要使用不同精确度的Date,比如保留到天2020042300:00:00,保留到小时,保留到分钟,保留到秒等,常见的方法是通过格式化到指定精确度(比如:yyyyMMdd),然后再解析为Date。Java8中可以用更多的方法来实现这个需求,下面使用三种方法:使用Format方法、 使用Of方法和使用With方法,性能对比,使用
Wesley13 Wesley13
2年前
Java变量类型
在Java语言中,所有的变量在使用前必须声明。声明变量的基本格式如下:typeidentifiervalue,identifiervalue...;格式说明:type为Java数据类型。identifier是变量名。可以使用逗号隔开来声明多个同类型变量。Java语言支持的变量类型有:类变量:独
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这