Java学习Part1:基础知识

 

 

Java学习Part1:基础知识

数据类型

一共有8种基本类型,4种整型,2种浮点类型,1种用于表示Unicode编码的字符单元的字符类型char和1种用于表示真值的boolean型。

 

  1. 整型

byte  short  int  long

 

长整型数值后面有一个L(l),如400000000000L。

java没有无符号类型。

 

  1. 浮点型

float  double

一般都用double。

float型后面有个F(f),如果浮点数后面不跟字母F,则默认为double型,double型也可以在后面加D(d)。

溢出和出错的三种情况:

正无穷大;

负无穷大;

NaN(不是一个数字);

例如:一个整数除以0的结果为正无穷大,0/0或者负数的平方根的结果为NaN。

 

 

 

 

  1. char型

char类型的字面量值要用单引号括起来。char只能表示单个字符。char 数据类型是一

个采用 UTF - 16 编码表示 Unicode 码点的代码单元。

双引号的是String型。

有些特殊字符要用两个代码单元才能表示,以后再说。

\u的字符转义序列可以出现在引号外面。比如public static void main (String\u005B\u005D args),分别代表[ 和 ]。

 

 

  1. boolean型

false 和true。

整型值和布尔型不能相互转换。

 

 

  1. 变量

变量类型+变量名。(初始化)

变量名必须以字母(包括_、$、甚至是表示字母的Unicode字符)开头,由字母和数字组成。另外不能使用保留字。

 

  1. 常量

常量用final指定,一般常量名用大写字母。常量被指定后不可修改。

 

 

运算符

+、-、*、/表示加减乘除。%求余。

 

  1. 数学函数与常量

数学函数在math类中。

sqrt(x) 函数求平方根。

pow(x,a) 函数求幂运算,x的a次幂。

 

 

 

 

 

 

  1. 数值类型转换

 

虚线代表会有信息丢失。

 

强制类型转换:

很轻松的,int就能转换成double,比如int a;double b;b=a-1;此时a-1里的a就是double型。但是如果需要把double转换成 int就需要强制类型转换。

double a=2.333;int b=(int)a;

强制转换是以牺牲精度为代价的(无法避免)。

上面这种强制转换是将小数点后的内容直接去掉。

如果需要四舍五入,就要用到round函数。

 

  1. 结合赋值和运算符

比如x+=5;+可以换成-*/%等。

 

  1. 自增自减运算符

++;--;

注意区别a++和++a:前缀加号会先运算加法再赋值,后缀加号先赋值再运算加法。

a=10;

b=a++;//a=11但是b=10;

c=++a;//a=11而且b=11;

 

  1. 关系和boolean运算符

==、!=、>、>=、<、<=等,可以用逻辑与&&和逻辑或||链接多个判断。

三元操作符:      ?:

例子:            条件a ? 结果b : 结果c

若果条件a为true,表达式的结果就是结果1,否则为结果2。

 

  1. 位运算符

&与,|或,^异或,~非。<<和>>移位,左移和右移。

 

  1. 运算符优先级

 

 

  1. 枚举类型

enum Num{1,2,3,4,5};

Num a=Num.1;

 

 

字符串

 

  1. 子串

String类的substring方法可以从一个较大的字符串中提取出一个子串。

String greeting=”Hello World!”;

String son =greeting.substring(4,8);//提取o Wo,这个区间也是左闭右开。

 

  1. 拼接

使用+无缝拼接。

String str1=”Hello ”;

String str2=”World!”;

String str3=str1+str2;

和py不同。如果有str+int,py会要求你把int转换成str,但是java会自动把int转换为str。

对了,而且py没有单双引号的区别。

如果需要把多个字符串连在一起并用定界符分隔,可以用join方法。

String.join(“拼接符”,字符串1,2,3……)

 

  1. 修改字符串

String类是不可修改的。

百度方法可以用StringBuilder和StringBuffer。

 

  1. 检测字符串是否相等

用equals方法

str1.equals(str2);//如果str1和str2相等返回true,不等返回false。字符串既可以是字面量也可以是变量。

尽量一定避免用==来判断。

原因:

其实看不太懂。。。

 

  1. 空串和NULL串

空串””是长度为0的字符串。有自己的长度(0)和内容(空)。

null可能就类似于不存在?

 

 

  1. 码点和码点单元

这里,看不懂了。

str.length()方法返回的是代码单元的数量,不是码点的数量。一个char值是一个代码单元。

咱也体会不到区别,咱也百度不到。那个特殊字符是复制的教材上的“占用两个代码单元的”符号。

 

看不懂先把内容贴到这,以后再来体会吧。

 

  1. String API

这个就是你需要那个查哪个吧,查阅API文档。

 

  1. 构建字符串

StringBuilder。

StringBuilder builder =new StringBuilder();

每次连接时就builder.append();

最后生成String型数据;

String result =builder.toString();

 

输入输出

这里教材说我太辣鸡了,让我掌握控制台的输入输出就行了,教材让我滚。

好的。

第10-12章我再来。

 

  1. 读取输入

标准输入流:System.in

要想同过控制台进行输入,首先要构造一个Scanner对象,并与“标准输入流”System.in关联。

Scanner in =new Scanner(System.in);

String name=in.nextLine();//这个in自己起名字,不过一般用in多好

还得带上这个包;import java.util.Scanner;

这里使用nextLine的原因是输入中可能包含空格,nextline读到换行结束。

next方法以空格为分隔符,想要读取一个单词就用next,因为next读到空格结束。

还有nextint nextdouble等。

没有搞懂next,nextint和nextdouble。

 

 

 

这是说,next方法读取完之后,剩下的输入值还作为下次的输入值?

经过测试,确实是这么回事。next每次只读取一个单词,剩下的还在缓冲区,还可以继续调用方法来读,那剩下的内容没读完之前就不能输入了吗?

网上方法很多,有很多还没学到的知识,这里先总结一个,重新new输入流。

 

另外在百度时了解到nextInt方法读取缓冲数据时,遇到回车或者空格,数据就会被读走,剩下一个回车或者空格在缓冲区,接下来如果你调用nextLine方法就可能出现意料之外的错误,因为直接读到了回车,就直接跳过去了。

 

uploading.4e448015.gif转存失败重新上传取消

 

uploading.4e448015.gif转存失败重新上传取消

 

 

  1. 格式化输出

 

System.out.print()  输出目标数据类型所允许的最大非0数字位数打印输出。

System.out.printf(,)  

 

 

 

 

uploading.4e448015.gif转存失败重新上传取消

 

uploading.4e448015.gif转存失败重新上传取消

 

 

可以使用String.format方法创建一个格式化的字符串而不打印输出。

String str=String.format(“”,)

 

  1. 文件输入与输出

 

需要一个用File对象构造一个Scanner对象。

输出:

Scanner in =new Scanner(Paths.get(“myfile.txt”),”UTF-8”);

System.out.println(in.nextLine())

输入:

Printwriter out =new Printwriter(“myfile.txt”,”utf8”);

out.println(“”);

out.close;

 

今天学习用的代码:

import java.io.IOException;
import java.io.PrintWriter;
import java.nio.file.Paths;
import java.util.Scanner;

import static java.lang.Math.*;

public class trydouble {
    enum Sizee{
        Small,Middle,Big,Large
    }
    public static void main(String[] args) throws IOException {
        int a=2;//整型
        double b=1.1;//浮点型
        double c=a-b;//浮点运算,二进制和十进制的差异,存在误差。
        char d='\u005B';//字符型
        String e="Ab";//字符串型
        final int F=66;//常量
        a=a+3;//变量啊,可以‘变’。
        /*F=6;
        不可行,报错,因为F是常量,不能更改。
         */
        int g1=5;
        for(int g2=0;g2<10;g2++){//求余
            g1--;
            //System.out.println(g1+"除以3的余数:"+g1%3);
            //System.out.println(floorMod(g1,3));//求余函数

        }

        double h1=5.555;
        int h2=(int)h1;//普通强制转换
        int h3=(int)round(h1);//round函数强制类型转换

        String greeting ="Hello World!";
        String son = greeting.substring(4,8);//提取子串o Wo

        String str1="Hello ";
        String str2="World!";
        String str3=str1+str2;//+拼接字符串

        String str4=String.join("@",str1,str2,str3);

        System.out.println("浮点运算(2-1.1):"+c);
        System.out.println("char字符型:"+d);
        System.out.println("字符串型:"+e);
        System.out.println("不可更改常量:"+F);
        System.out.println("普通强制类型转换(5.555 to int):"+h2);
        System.out.println("round函数强制类型转换(5.55 to int):"+h3);
        System.out.println("枚举值:"+Sizee.Big);
        System.out.println("提取的子串:"+son);
        System.out.println("str1和str2拼接:"+str3);
        System.out.println("join拼接字符串(@):"+str4);

        if(str1.equals(null)){//判断是否为null
            System.out.println("NULL");
        }
        else System.out.println("不为NULL:"+str1);
        if(str1.substring(0,3)=="He") System.out.println("He");//测试==和equals方法
        else System.out.println("==出问题了");
        if(String.join("",str1,str2)=="Hello World!")
            System.out.println("== run correctly");
        else
            System.out.println("==又出问题了");
        if(String.join("",str1,str2).equals("Hello World!"))
            System.out.println("equals函数正常");
        else
            System.out.println("equals方法也不正常了");

        /*String str5 = "hello⑪";
        int n = str5.length();
        System.out.println("代码单元长度,即char值个数:"+n);
        int cp=str5.codePointCount(0,n);
        System.out.println("码点数量:"+cp);
        char str6=str5.charAt(5);
        System.out.println(str6);*/
        StringBuilder builder= new StringBuilder();//使用StringBuilder构建字符串
        builder.append(str1);
        builder.append(str2);
        System.out.println(builder);
        String result =builder.toString();
        System.out.println(result);//这个builder和result有什么区别呢?

        Scanner input=new Scanner(System.in);//标准输入流
        String inputs=input.nextLine();
        System.out.println("刚刚你输入的现在还给你:"+inputs);
        String inputs2=input.next();
        System.out.println("别什么垃圾都往我这扔啊,还你:"+inputs2);
        /*int inputs3=input.nextInt();
        double inputs4=input.nextDouble();
        System.out.println("你的int:"+inputs3+"\n你的double:"+inputs4);
*/
        String inputs5=input.nextLine();//清空输入缓冲区

        Scanner fileout = new Scanner(Paths.get("D:\\001student\\myfile.txt"),"utf8");
        String file1=fileout.nextLine();//读文件
        String file2=fileout.nextLine();
        System.out.println(file1+"\n"+file2);

        PrintWriter filein =new PrintWriter("D:\\001student\\myfile2.txt","utf8");
        filein.println("Nice to meet U!");//写入
        filein.close();
    }
}

 

今天学了一天都没学完一章,不开心。在学下去,学习效率也跟不上了,到此为止。

 

 

 

TO BE CONTINUE...

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值