Java语言的基本语法

303 阅读11分钟

走进Java

Java是一面向对象的编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里面难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

Java现状

最近几年,Go、Python 等语言快速崛起,大有挑战 Java 地位的趋势,但是 Java 毋庸置疑仍是当前互联网行业里招聘需求量最大的。

众多大厂:阿里、美团、快手、拼多多、滴滴、网易等,都是以 Java 为公司的主语言,部分大厂:腾讯、百度、字节等,虽然以其他语言为主语言,但是多多少少也会有一些 Java 岗。

所以,Java 的现状及未来,我觉得都是比较不错的。岗位多也代表着机会多,对于新人来说比较友好,所以我个人是比较推荐新人学 Java 的。

第一个函数

相信大家刚开始学习编程的时候,都是打印Hello World!吧。

//注释 : 对代码的解释说明
//公共的  class类 类名 : 类名与文件名保持一致,类,每个单词的首字母大写
public class HelloWorld{ //类的开始
		
	//主方法:  程序执行的入口 ,逐行执行主方法中的代码
	//公共的 静态的 没有返回值的 主要的  ()->参数列表
	public static void main(String[] args){ //方法开始
		//系统 输出 打印 ()->输出的内容   "内容" -> 原封不动输出打印(字符串)
		System.out.println("Hello World!!!"); // ; 结束语句
				
	} //方法结束
	
}//类的结束

//注意: 一对{}中的内容就要缩进一个 tab键
//所有符号都是英文状态下的符号 
//一个java文件中可以定义多个类,但类名不能相同
//被public修饰的类只能存在一个,要求与文件名保存一致

main方法,正如注释所说,这是程序开始执行的第一行。对于一个Java应用程序来说,main方法是必需的,Java解释器在没有生成任何对象的情况下,以main作为入口来执行程序。每个类中可以定义多个方法,但main方法只能有一个。关键字public表示访问权限,指明所有的类都可以使用这一方法。本例中,main必须被定义为public类型,因为当程序开始执行时它需要被它的类之外的代码调用。关键字static指明该方法是一个类方法。关键字void指明main()方法不返回任何值。main方法圆括号中定义的String args[]是传送给main方法的参数,参数名为args,它是类String的一个对象。方法的参数用“类名参数名”来指定,多个参数间用逗号分隔。该行的最后一个字符是“{”,它表示了main程序体的开始,一个方法中包含的所有代码都将包括在这对花括号中间。另外,main仅是解释器开始工作的地方,一个复杂的程序可能包含几十个类,但这些类仅需要一个main方法。

接下来,我们就从Java的语法开始!

1.1 注释

注释分为单行注释多行注释文档注释

//单行注释 
/*多行注释*/
/**文档注释*/
/**
	注释
		作用:  对程序的解释说明
		
		分类:
			单行注释
				作用域:  当前行有效
				颜色: 绿色
				嵌套问题:  可以嵌套单行,不可以嵌套多行和文档注释
				定义位置: 行的上面,行尾
			多行注释
				作用域: 多行内有效
				颜色:  绿色
				嵌套问题: 可以嵌套单行注释,不可以嵌套多行和文档注释
				定义位置: 方法上面|类的上面
			文档注释
				作用域: 多行内有效]
				颜色: 蓝黑色
				嵌套问题: : 可以嵌套单行注释,不可以嵌套多行和文档注释
				定义位置: 方法上面|类的上面
			
			多行和文档注释的区别:
				1.开发工具中,方法的上面定义文档注释,会自动带有一个提示,而多行注释没有
				2.多行注释的内容,会显示在生成的类的API文档中 
					API文档: 类的说明手册
			
		注意:
			注释的内容不会被编译
			编写代码一定要养成习惯添加注释
*/
public class Demo01{ 
		
	/**
		主方法
		程序的入口
	*/
	public static void main(String[] args){  //方法开始
		
		System.out.println("Demo01");
				
	} 
	

	
}

1.2 标识符

1.2.1 标识符的概念

Java 对各种变量、方法和类等要素命名时使用的字符序列称为标识符 凡是自己可以起名字的地方都叫标识符。

1.2.2 标识符的合法规则

Java 对各种变量、方法和类等要素命名时使用的字符序列称为标识符 凡是自己可以起名字的地方都叫标识符。

1.2.3 Java中的一些命名规范

包名:多单词组成时所有字母都小写。 类名、接口名:多单词组成时,所有单词的首字母大写。 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写: 常量名:所有字母都大写。多单词时每个单词用下划线连接:PRIVATE_CONSTANT 例如public static final double PI=3.14; //使用final关键字修饰一个常量。

1.3 关键字

关键字又称保留字,是指Java语言中自带的用于标志数据类型或者程序构造名等的标识符,如public、double等。当定义标识符时,不要让标识符和关键字相同,否则将引起错误。 在这里插入图片描述 在这里插入图片描述

1.4 数据类型、基本数值类型、运算符

1.4.1 数据类型

在这里插入图片描述

1.4.2 数值类型

在这里插入图片描述

1.4.3 运算符

Java语言的运算符与C语言基本一致,包括算术运算符、关系运算符、逻辑运算符、赋值运算符、位运算符、条件运算符和其他运算符在这里插入图片描述 算术运算符 在算术运算符中,优先级最高的时单目运算符(++和--)和正负(+和-),其次时(*、/、%),最低的是加减(+、-)。因为"()"的优先级最高,所以可以通过加“()”改变表达式中各个部分的运算优先级。

接下来,我们完成一些练习,以掌握算术运算符。

public class Demo02{
	   public static void main(String args[]){
	      int i1=10;
	      int i2=i1++;
	      int i3=10;
	      int i4=++i3; 
	      System.out.println("i1="+i1+"\ti2="+i2+"\ti3="+i3+"\ti4="+i4);
	      float f1=6.7f%3.3f;
	      int f2=(-13)%5;
	      int f3=13%(-5);
	      int f4=(-13)%(-5);
	      System.out.println("f1="+f1+"\tf2="+f2+"\tf3="+ f3+"\tf4="+f4);
	   }
	}

关系运算符 不知道关于逻辑运算符的练习你都做对了吗

i1=11	i2=10	i3=11	i4=11
f1=0.099999905	f2=-3	f3=3	f4=-3

好,接下来我们继续理解关系运算符 关系运算符包括>、<、>=、<=、==、!=等6个运算符。 关系运算符可用于逻辑表达式或关系表达式,比较结果为boolean型数据。 boolean型数据不能强制类型转换成其他数据类型,不能在数值表达式中出现。 关系运算符(<、<=、>、>=)的运算优先级比(==、!=)高。 关系运算符对两个浮点型数值比较时,由于浮点型数据是一种不精确数据类型,产生与预期不一致的结果。

逻辑运算符 逻辑运算符只能应用于结果为逻辑值的表达式,不能用于其他类型; 三个运算符有优先级,最高的是非(!)、接着是与(&&)、或最低; 逻辑运算符(&&和||)优先级比关系运算符低。 在这里插入图片描述

赋值运算符 数值运算符“+、-、、/、%”与赋值运算符结合,形成复合赋值符, “+=、-=、=、/=、%=”,如: y+=x+10; //相当于y=y+(x+10) z*=15-x; //相当于z=z*(15-x) 赋值运算在所有运算符中,优先级别最低; 赋值表达式的结合性是从右到左; 赋值运算符可以连接不同类型的变量、表达式,但是赋值运算符左边只能是变量,不允许是常量、表达式等。

位运算符 在这里插入图片描述 在这里插入图片描述 运算符的优先级 在这里插入图片描述 在这里插入图片描述

1.5 数据的基本转化

自动类型转换:容量小的类型自动转换为容量大的数据类型。数据类型按容量大小排序为:在这里插入图片描述 ①有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。 ②byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型。 ③当把任何基本类型的值和字符串值进行连接运算时(+),基本类型的值将自动转化为字符串类型。

byte和short涉及到赋值都会转换,但是特殊运送不会

String类 值null可以赋值给任何引用类型(类、接口、数组)的变量,用以表示这个引用类型变量中保存的地址为空。 String类属于引用类型,可用null赋值。 String对象创建出来就不可能被改变,每次复制都需要创建新的对象。

强制类型转换 ①自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符,例如(int),但可能造成精度降低或溢出,格外要注意。 ②通常,字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换成基本类型。 如: String a = “43”; int i = Integer.parseInt(a); boolean类型不可以转换为其它的基本数据类型。

char、byte、short之间不相互转换,涉及到运算转换成int,转成int不会自动转回来。

以下是一个强制转化的例子:

public class Demo03 {
	public static void main(String[] args) {
	   int  a;                                     //定义整型变量
      a='2' ;                                    //对变量进行赋值
      System.out.println(a);

      int  b;
      b='2' ;
      System.out.println((char)b);               //输出转换后的值
	}
}

1.6 程序流程控制语句

1.顺序结构:程序直接从上执到下,中间没有任何判断和跳转 2.分支结构:根据判断选择性的执行某段代码,有if…else和switch两种分支语句 3.循环结构:根据循环条件,重复性的执行某段代码。有while、do…while、for三种循环语句。JDK1.5提供了foreach循环,方便的遍历集合、数组元素。

循环语句的四个组成部分 初始化部分(init_statement) 循环条件部分(test_exp) 循环体部分(body_statement) 迭代部分(alter_statement) if语句三种格式:

1.  if (条件表达式) {
	执行代码块;
     }


2.  if (条件表达式) {
	执行代码块;
      } else {
	执行代码块;
      }

3.  if (条件表达式1) {
	执行代码块1;
      } else if (条件表达式2) {
	执行代码块2;
      } else if (条件表达式3) {
	执行代码块3;
      }
       …… else {
	执行代码块n;
       }

Switch用法:

switch(变量){
case 常量1:
	语句1;
	break;
case 常量2:
	语句2;
	break;
… …
case 常量N:
	语句N;
	break;
default:
	语句;
	break;
 } 

switch(表达式)中表达式的返回值必须是下述几种类型之一:byte,short,char,int,String, 枚举; case子句中的值必须是常量,且所有case子句中的值应是不同的; default子句是可任选的,当没有匹配的case时,执行default。 break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有break,程序会顺序执行到后面第一个break语句或直接执行到switch结尾(这种现象称为穿透)。

return:并非专门用于结束循环的,它的功能是结束一个方法。当一个方法执行到一个return语句时,这个方法将被结束。

switch和if语句的对比: 如果判断的具体数值不多,而且符合byte、 short 、int、 char这四种类型。虽然两个语句都可以使用,建议使用switch语句。因为效率稍高。

其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。

for用法:

for(初始化表达式;循环条件;操作表达式){
         执行语句
         ……
}

while用法:

while( 布尔表达式 ) {

  // 循环体
}

在此时,只要布尔表达式为真,while就会一直循环下去

do..while用法“

do {
    //代码语句

}while(布尔表达式);

布尔表达式在循环体的后面,所以语句块在检测布尔表达式之前已经执行了

如果布尔表达式的值为 true,则语句块一直执行,直到布尔表达式的值为 false。