零基础必学Java基础语法

开课吧开课吧锤锤2021-06-09 14:24

点赞
有用
分享分享

       Java是由C语言演变而来,其相较于C具有简单易学的优势,同时Java语言的跨平台性,也给诸多开发者带来很多的便利。这篇文章帮助大家梳理一下Java基础语法,希望通过这篇文章能够让初学者迅速入门。

Java

   一、变量与数据类型

    1.1变量

    变量就是系统为程序分配的一块内存单元,用来存储各种类型的数据。由于该存储单元中的数据可以发生改变,因此得名为”变量“。

    变量的分类:

    1、按所属的数据类型划分:

    基本数据类型变量

    引用数据类型变量

    2、按被声明的位置划分:

    局部变量:方法或语句块内部定义的变量

    成员变量:方法外部、类的内部定义的变量

    特别注意:类的外面不能有变量的声明

    1.2数据类型

    由于变量记录的数据内容大小不同,导致所需的存储单元大小不同,在Java语言中使用数据类型的概念加以描述.

    数据类型的分类:

Java

    1.3标识符

    Java对包、类、方法、参数和变量等要素命名时使用的字符序列称为标识符。规则如下:

    1、由字母、数字、下划线(_)和美元符号($)组成。

    2、不能以数字开头。

    3、区分大小。

    4、长度无限制。

    5、不能是Java中的保留关键字。

    注意:标识符命名习惯为见名知意。

    Java中关键字:

Java

    Java保留字:没有定义用途,但保留备用。goto、const。

    1.4类型转换

    boolean类型不能转换成任何其它数据类型。

    1、自动类型转换:容量小的类型自动转换成容量大的数据类型

    byte,short,int->float->long->double

    byte,short,int不会互相转换,它们三者在计算时会转换成int类型

    2、强制类型转换:容量大的类型转换成容量小的数据类型时,要加上强制转换符

    longl=100L;

    inti=(int)l;

    注意:强制类型转换有可能造成精度降低或数据溢出,使用时要小心。

    二、方法

    2.1方法的概述

    方法用于封装一段特定的逻辑功能。方法的主要要素有:权限修饰符、方法名、参数列表和返回值。

    2.2格式:

权限修饰符 返回值类型声明 方法名称(参数列表){
    方法中封装的逻辑功能;
    return 返回值;
}

    2.3权限修饰符

 修饰符  包  子类 其他包
public
protected ×
default × ×
private × × ×

    2.4返回值详解

    1、方法调用结束后可以返回一个数据,称之为返回值。

    2、方法在声明时必须指定返回值的类型。

    3、通过return语句返回,return语句的作用在于结束方法且将数据返回。

   4、 如果方法没有返回值(即方法不需要返回数据),需将返回值类型声明为void。

    2.5参数列表详解

    1、方法的参数列表:

    在调用时传递给方法,需要被方法处理的数据。

    2、在方法定义时,需要声明该方法所需要的参数变量。

    3、在方法调用时,会将实际参数值传递给方法的参数变量。

    必须保证传递参数的类型和个数符合方法的声明。

    2.6方法示例

public void say(int a, int b){

    System.out.println("方法say正在执行");
}

    三、运算符

    3.1算术运算符

    Java

    特殊:

    ++:

    如果是变量前缀:先对此变量加1,再执行其他的操作。如果是变量后缀:先执行当前语句的其他操作,再对此变量加1。

    --:

    如果是变量前缀:先对此变量减1,再执行其他的操作。如果是变量后缀:先执行当前语句的其他操作,再对此变量减1。

    示例:

int a = 10;
System.out.println(a++);//10
System.out.println(a);//11
int b = 10;
System.out.println(++b);//11
System.out.println(b);//11
int c = 10;
System.out.println(c--);//10
System.out.println(c);//9
int d = 10;
System.out.println(--d);//9
System.out.println(d);//9

    3.2赋值运算符

Java

    注意:赋值运算符作用是将一个值赋给一个变量,运算顺序从右到左

    3.3关系运算符

Java

    注意:关系运算符作用是比较两边的操作数,结果总是boolean型的。

    3.4逻辑运算符

Java

    注意:逻辑运算符用于对boolean型结果的表达式进行运算,运算结果总是boolean型。

    3.5字符串连接运算符

    “+”可以将不同的字符串进行连接,如:Strings=”He”+“llo”;结果”Hello”。

    “+”除了可用于字符串相连接,也能将字符串与其它的数据类型相连成一个新的字符串。如:Strings=”x”+123;结果”x123”。

    4.1注释

    在Java中3种标记注释的方式:

    使用//,其注释内容从//开始到本行结尾

System.out.println("Hello World!");  //你好世界!

    使用/**/,其注释内容为比较长篇的内容。

/*
 
 System.out.println("Hello");
 
 System.out.println("World!");
 
 */

    使用/***/,用来自动地生成文档。

Demo1.java
 
 /**
 
 *This is the first demo!
 
 *@version 1.0
 
 *@author yihangjou
 
 */
 
 public class Demo1 {
 
 public static void main(String[] args) {
         
    System.out.println("Everything will be OK!");
         
    }
 
 }

    注意:在Java中,/**/注释不能嵌套。

    4.2数据类型

    4.2.1整型

    整型用于表示没有小数部分的数值,它允许是负数。Java提供了4中整型:

Java

    4.2.2浮点类型

    浮点类型用于表示有小数部分的数值。在Java中有两种浮点类型:

Java

    4.2.3char类型

    char类型的字面量值要用单引号括起来。

    char类型的值可以表示为十六进制值,其范围从\u0000到\Uffff。

    在Java中char类型描述了UTF-16编码中的一个代码单元。

    建议不要在程序中使用char类型,除非确实需要处理UTF-16代码单元。最好将字符串作为抽象数据类型处理。

    4.2.4boolean类型

    boolean(布尔)类型有两个值:false和true,用来判定逻辑条件。

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

    4.3变量

    4.3.1变量的初始化

    声明一个变量之后,必须用赋值语句对变量进行显式初始化,不能使用未初始化的变量。

    变量的声明尽可能地靠近变量第一次使用的地方。

    4.3.2常量

    在Java中,利用关键字final指示常量。

    关键字final表示这个变量只能被赋值一次。一旦被赋值之后,就不能够再更改了。

    习惯上,常量名使用全大写。

    使用关键字staticfinal设置一个类常量,可以实现某个常量可以在一个类中的多个方法中使用。(类常量的定义位于main方法的外部)

Demo2.java
     
 public class Demo2 {
 
 public static final INCH = 3.14;
 
 public static void mian(String[] args) {
 
 double width =8.5;
 
 double weight = 11;
 
 System.out.println("Paper size in:" + width\*NCH + "by" + weight\*INCH);
 
 }
 
 }

    4.4运算符

    算术运算符:+、—、*、/、++、——

    &&(与)、||(或)、!(非)

    注意:整数被0除将会产生一个异常,而浮点数被0除将会得到无穷大或NaN结果。

    4.4.1数值类型之间的转换

Java

    【标注】:实心箭头表示无信息丢失的转换;虚箭头表示可能有精度损失的转换。

    如果两个操作数中有一个是double类型,另一个操作数就会转换为double类型

    否则,如果其中一个操作数是float类型,另一个操作数将会转换为float类型

    否则,如果其中一个操作数是long类型,另一个操作数将会转换为long类型

    否则,两个操作数都将被转换为int类型

    4.4.2强制类型转换

    语法格式:在圆括号中给出想要转换的目标类型,后面紧跟待转换的变量名。

double x = 9.997;
 
 int y = (int) x;
 
 // 结果:y = 9

    4.4.3关系和boolean运算符

    &&和||运算符是按照“短路”方式来求值的:如果第一个操作数已经能够确定表达式的值,第二个操作数就不必计算了。

    4.4.4位运算符

    处理整型类型时,可以直接对组成整型数值的各个位完成操作。这意味着可以使用掩码技术得到整数中的各个位。位运算符包括:

&(“and”) |(“or”) ^(“xor”) ~(“not”)

    >>和<<运算符将位模式左移或者右移

    4.4.5运算符优先级

Java

    4.5字符串

    4.5.1子串

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

String hi = "hello";
 String s = hi.substring(0,3);
 
 //计算子串的长度:
 String length = s.substring(b-a);

    4.5.2拼接

    Java语言使用+号连接(拼接)两个字符串。

    4.5.3字符串比较

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

    使用equalsIgnoreCase方法检测两个字符串是否相等,而不区分大小写。

    4.5.4空串和Null串

    空串“”是长度为0的字符串。

    String变量可以存放一个特殊的值,名为null,表示目前没有任何对象与改变量关联。

    4.5.5实战演示

public class Demo3 {
     public static void main(String args[]) {
         String str = "Java is the best language!";
         int num1 = str.indexOf("ava");// 字符串查找
         System.out.println("ava最先出现的位置是"+num1);
         int num2 = str.lastIndexOf("lan");
         System.out.println("lan最后出现的位置是"+num2);
         char str1 = str.charAt(6); // 获取指定索引位置的字符
         System.out.println("第六个字符为:"+str1);
         String str2 = str.substring(6); // 获取子字符串
         System.out.println("第六个以后的字符串为"+str2);
         String str3 = str.substring(6, 9);
         System.out.println("六到九的字符串为:"+str3);
         String str4 = str.trim(); // 去除空格
         System.out.println("去掉空格后的字符串为:"+str4);
         // 字符串替换
         String str5 = str.replace("Java", "Chinese");// 方法可实现将指定的字符或字符串替换成新的字符或字符串
         System.out.println("将java替换为chinese"+str5);
 
         // 判断字符串的开始与结尾
         Boolean bl1 = str.startsWith("J");
         System.out.println("字符串以J开头:"+bl1);
         Boolean bl2 = str.endsWith("J");
         System.out.println("字符串以J结尾:"+bl2);
 
         // 字母大小写转换
         String str6 = str.toLowerCase();
         System.out.println("全转为小写后:"+str6);
         String str7 = str.toUpperCase();
         // 字符串分割
         System.out.println("全转换为大写后"+str7);
         String[] str8 = new String[8];
         str8 = str.split("a", 5);
         System.out.println("将字符串用a分隔开,结果为:");
         for(int i=0;i<str8.length;i++){
             System.out.print(str8[i]);
        }
         System.out.print("结束");
    }
 
 }

    4.6输入输出

    4.6.1读取输入

    打印输出到“标准输出流”(控制台窗口)是一件非常容易的事情,只要调用System.out.println即可。然而,读取“标准输入流”System.in,通过控制台输入,首先需要构造一个Scanner对象,并与“标准输入流”System.in关联。

 Scanner in = new Scanner(System.in);

    nextLine方法将输入一行:

 String name = in.nextLine();

    使用nextLine方法是以为在输入行中有可能包含空格。要想读取一个单词(以空白符作为分隔符),可以调用:

String name = in.next();

    要想读取一个整数,就调用nextInt()方法:

 int age = in.nextInt();

    要想读取一个浮点数,就调用nextDouble()方法。依次类推。

    Scanner类定义在java.util中。当使用的类不是定义在基本java.lang包中时,一定要使用import指示将相应的包加载进来。

    【注释】读取密码

    因为输入是可见的,所以Scanner类不适用于从控制台读取密码。JavaSE6特别引入了

    Console类实现这个目的。要想读取一个密码,可以采用下列代码:

Console cons = System.console();
 String username = cons.readline("User name:");
 char[] passwd = cons.readPassword("Password:");

    为了安全起见,返回的密码存放在一堆字符数组中,而不是字符串中。在对密码进行处理之后,应该马上用一个填充值覆盖数组元素。

    采用Comsole对象处理输入不如采用Scanner方便。每次只能读取一行输入,而没有能够读取一个单词或一个数值的方法。

    4.6.2格式化输出

    使用System.out.print(x)将数值x输出到控制台上。这条命令将以x对应的数据类型所允许的最大非0数字位数打印输出x。

double x = 1000.0 / 3.0;
 System.out.print(x);
 // 打印结果:3333.3333333333335

    在早期的Java版本中,格式化数值曾经引起过一些争议。庆幸的是,JavaSE5.0沿用了C语言库函数中的printf方法。例如:

 System.out.printf("%8.2f",x);
 // 打印结果: 3333.33

    可以用8个字符的宽度和小数点后两个字符的精度打印x。也就是说,打印一个空格和7个字符。

    在printf中可以使用多个参数:

 System.out.printf("Hello, &s.Nexyear,you`ll be %d", name, age);

    每一个用%开始的格式说明符号都用相应的参数替换。格式说明符后面的转换符号指示被格式化的数值类型:f表示浮点数,s表示字符串,d表示十进制整数。用于printf的转换符号,如下图所示:

Java

    另外,还可以给出控制格式化输出的各种标志。例如,逗号标志增加了分组的分隔符。

 System.out.printf("%,.2f",10000.0 / 3.0);
 // 打印结果: 3,333.33

    可以使用多个标志,例如,""%,(.2f)"使用分组的分隔符并将负数括在括号内。用于printf的标志:

Java

    注释:可以使用s转换符号格式化任意的对象。对于任意实现了Formattable接口的对象都将条用formatTo方法;否则将调用toString方法,它可以将对象转换为字符串。

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

 String message = String.format("Hello,%s.Next year, you`ll be %d",name,age);

    printf方法中日期与时间的格式化选项。首先,我们先看一下日期和时间的转换符:

Java

Java

    图中只给出指定日期的部分信息。如果需要多次对日期操作才能实现对每一部分进行格式化的目的就太过繁琐。为此,可以采用一个格式化的字符串指出要被格式化的参数索引。所以必须紧跟在%后面,并以$终止。

 System.out.printf("%1$s %2$tB %2$te,%2$tY", "Due date:", new Date());
 // 打印结果:Due date:August 30, 2020

    还可以选择使用<标志。它指示前面格式说明中的参数将被再次使用。下列语句将与前面语句同样的输出结果:

 System.out.printf("%s %tB %<te, %<tY","Due date:",new Date());

    提示:参数索引值从1开始,而不是从0开始,%1$…对第1个参数格式化。这就避免了与0表示混淆。

    4.6.3文件输入与输出

    要想对文件进行读取,就需要一个用File对象构造一个Scanner对象,如下所示:

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

    如果文件名中包含反斜杠符号,就要记住在每个反斜杠之前再加一个额外的反斜杠:”c:\\mydirctory\\myfile.txt"。

    要想写入文件,就需要构造一个PrintWriter对象。在构造器中,只需要提供文件名:

 PrintWriter out = new PrintWriter("myfile.txt", "UTF-8");

    4.7控制流程

    Java使用条件语句和循环结构确定控制流程。

    4.7.1块作用域

    块(复合语句),是指由一对大括号括起来的若干条简单的Java语句。块确定了变量的作用域。一个块可以嵌套在另一个块中。

    但是,不能再嵌套的两个块中声明同名的变量。

    4.7.2条件语句

    在Java中,条件语句的格式为:

if(condition) statement  //这里的条件必须用括号扩起来

    在Java中,更一般的条件语句格式如下所示:

if(condition) statement1 else statement2

    其中else部分是可选的。else子句与最邻近的if构成一组。

Java

    4.7.3循环

    当条件为true时,while循环执行一条语句/一个语句块。一般格式为:

while(condition) statement

    如果开始循环条件的值就为false,则while循环体一次也不执行。

Java

    do/while循环语句

    它的语法格式为:

do statement while (condition);

    这种循环语句先执行语句/语句块,再检测循环条件;然后重复语句,再检测循环条件,依次类推。

    4.7.4确定循环

    for循环语句是支持迭代的一种通用结构,利用每次迭代之后更新的计数器或类似的变量来控制迭代次数。

Java

    如果在for语句内部定义一个变量,这个变量就不能再循环体之外使用。如果希望在for循环体之外使用循环计算的最终值,就要确保这个变量在循环语句的前面且在外部声明。

    4.7.5多重选择:switch语句

Java

    switch语句将从与选项值相匹配的case标签处开始执行知道遇到break语句,或者执行到switch语句的结束处位置。如果没有相匹配的case标签,而有default子句,就执行这个子句。

    4.7.6中断控制流程语句

    break

    不带标签的break语句,与用于退出switch语句的break语句一样,它也可以用于退出循环语句。

 while(years <= 100) {
     balance += payment;
     double interest = balance * interestRate / 100;
     balance += interest;
     if(balance >= goal) break;
     years++;
 }

    在循环开始时,如果years>100,或者在循环体中balance>=goal,则退出循环语句。

    带标签的break语句,标签必须放在希望跳出的最外层循环之前,并且必须紧跟一个冒号。

Scanner in = new Scanner(System.in);
 int n;
 read_data:
 while(……) {
     for(……) {
         System.out.print("Enter a number >= 0:");
         n = in.nextInt();
         if(n < 0)
             break read_data;
    }
 }

    如果输入有误,通过执行带标签的break跳转到带标签的语句块末尾。对于任何使用break语句的代码都需要检测循环是正常结束,还是由break跳出。

    continue

    与break语句一样,continue将中断正常的控制流程。continue语句将控制转移到最内层循环的首部。

    如果n<0,则continue语句越过了当前循环体的剩余部分,立刻跳到循环首部。

    还有一种带标签的continue语句,将跳到与标签匹配的循环首部。

Scanner in = new Scanner(System.in);
 while(sum < goal) {
     System.out.print("Enter a number:");
     n = in.nextInt();
     if(n<0) continue;
     sum += n;
 }

    break和continue的区别:

    break用于完全结束一个循环,跳出循环体执行循环后面的语句。

    continue和break有点类似,区别在于continue只是终止本次循环,接着还执行后面的循环,break则完全终止循环。可以理解为continue是跳过当次循环中剩下的语句,执行下一次循环。

    4.8大数值

    如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math包中的两个很有用的类:BigInteger和BigDecimal。这两个类可以处理包含任意长度数字序列的数值。BigInteger类实现了任意精度的整数运算,BigDecimal实现了任意精度浮点数运算。

    使用静态的valueOf方法可以将普通数值转换为大数值:

BigInteger a = BigInteger.valueOf(100);

    加减乘除

// 普通计算:
 yihang = yihang * (n - i + 1) / i;
 // 大数值计算:
 yihang = yiahng.multiply(BigInteger.valueOf(n-i+1)).divide(BigInteger.valueOf(i));

    4.9数组

    数组是一种数据结构,用来存储同一类型值得集合。通过一个整型下标可以访问数组中的每一个值。在声明数组变量时,需要指出数组类型(数据元素类型紧跟[])和数组变量的名字。

int[] a;   //声明数组变量a

int[] a = new int[100]; //初始化a为一个长度为100的数组,数组的下标从0~99

    创建一个数组数组时,所有元素都初始化为0。boolean数组的元素会初始化为false。对象数组的元素则初始化为一个特殊值null,这表示这些元素(还)为存放任何对象。

String[] names = new String[10]; //表示创建了一个包含10个字符串的数组,所有字符串都为null。

    要想获取数组中元素的个数,可以使用array.length。

    4.9.1foreach循环

    Java有一种功能很强的循环结构,可以用来依次处理数组中的每个元素(其他类型的元素集合亦可)而不必为指定下标值而分心。

for (variale: collection) statement

    定义一个变量用于暂存集合中的每一个元素,并执行相应的语句/语句块。collection这一集合表达式必须是一个数组或者是一个实现了Iterable接口的类对象(ArrayList)。

 for(int element: a)
     System.out.println(element);
 
 //使用for循环也可以获得同样的效果,但是for each 语句相比更加简洁、不易出错
 for(int i = 0;i < a.length; i++)
     System.out.println(a[i]);

    4.9.2数组初始化以及匿名数组

    在Java中,提供了一种创建数组对象并同时赋予初始化值得简化书写形式。

int[] smallPrimes = {2,3,4,5,6,7};
 
 //初始化一个匿名的数组
 new int[] {11,32,123,6,45}

    在Java中,允许数组长度0。在编写一个结果为数组的方法时,如果碰巧结果为空,则这种语法形式就显得非常有用。注意,数组长度与null不同。

    4.9.3数组拷贝

    在Java中,允许将一个数组变量拷贝给另一个数组变量。这时两个变量将引用同一个数组:

 int[] arr = smallPrimes;
 arr[3] = 5;

    如果要将一个数组的所有值拷贝到一个新的数组中去,就要使用Arrays类的copyOf方法:

 int copyArray = Arrays.copyOf(arr, arr.length);

    4.9.4命令行参数

    每一个Java应用程序都有一个带Stringarg[]参数的main方法。这个参数表明main方法将接收一个字符串数组,也就是命令行参数。

    4.9.5数组排序

    要想对数值型数组进行排序,可以使用Arrays类中的sort方法:

    这个方法使用了优化的快速排序算法。

 int[] a = new int[1000];
 ……
 Arrays.sort(a);

    4.9.6多维数组

    多维数组将使用多个下标访问数组元素,它适用于表示表格或更加复杂的排列形式。

    声明一个二维数组:

double[][] balances;

    以上就是小编为大家整理的的“零基础必学Java基础语法”一文,更多Java教程相关内容尽在开课吧广场Java教程频道!

免责声明:本站所提供的内容均来源于网友提供或网络搜集,由本站编辑整理,仅供个人研究、交流学习使用。如涉及版权问题,请联系本站管理员予以更改或删除。
有用
分享