04.Java 语法

计算机基础知识

表达式(expression):Java中最基本的一个运算。比如一个加法运算表达式。1+2是一个表达式,a+b也是。

计算机内存的最小存储单元是字节(byte),一个字节就是一个8位二进制数,即8个bit。
它的二进制表示范围从00000000~11111111,换算成十进制是0~255,换算成十六进制是00~ff。

语句(statement):类似于平时说话时的一句话,由表达式组成,以;结束。比如 int a=3; y=a+9; System.out.println(y); 都是语句。
bit: 一个二进制的位叫做一个 bit。例如 1010 就是四个位,也就是4个bit。(常见于 网络带宽中的单位)
byte: 是八个二进制的位,组成一个 byte(也叫字节)。(常见于 硬盘等存储的单位)
byte: 是计算机中基本的衡量存储的单位,计算机在对外使用时不会用bit作为划分存储的单位。
字符集(Charset):字符集就是字符的集合。一般会包含一种语言的字符。比如GBK,是包含所有常用汉字字符的字符集。ASCⅡ是包含英文字符的字符集。
编码(Encoding): char代表一个字符,char的本质也是数字。将数字映射到字符,就叫编码

  • 将一个字符集映射到数字,就是给这个字符集编码。编码是有标准的,所有的计算机系统按照同一个编码标准执行。
  • 有时候编码和字符集会混用。
  • 字符就是Java中的char,char是character的简写。

常用字符集:

  • ASCII码,ASCII表:https://baike.baidu.com/item/ASCII/309296#3
  • Unicode 包含世界上所有常用字符,编码也有几种,包括UTF-8(8-bit Unicode Transformation Format),UTF-16等。
  • Unicode,GDK 等所有常用的字符集,都会兼容ASCII。举个例子,字符A在这些所有常用的字符集里,都是对应数字65。

转义符语法和常用的转义符

  • \n,换行符
  • ",双引号
  • \t,制表符
  • \uXXXX,Unicode编码对应的字符。

Java中的字符集

  • Java中用的是 UTF-16编码的Unicode。
  • UTF-16用16个 bit,即两个byte,也就是char占用两个byte的原因。当把char转成数字的时候,需要用int。

基本语法

编写 Java 程序时,应注意以下几点:

  • 大小写敏感:Java 是大小写敏感的,这就意味着标识符 Hello 与 hello 是不同的。
  • 类名:对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 MyFirstJavaClass 。
  • 方法名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。
  • 源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记 Java 是大小写敏感的),文件名的后缀为 .java。(如果文件名和类名不相同则会导致编译错误)。
  • 主方法入口:所有的 Java 程序由 public static void main(String[] args) 方法开始执行。

源文件声明规则

  • 一个源文件中只能有一个 public 类,但可以有多个非 public 类
  • 源文件的名称应该和 public 类的类名保持一致。例如:源文件中 public 类的类名是 Employee,那么源文件应该命名为Employee.java。
  • 如果一个类定义在某个包中,那么 package 语句应该在源文件的首行。
  • 如果源文件包含 import 语句,那么应该放在 package 语句和类定义之间。如果没有 package 语句,那么 import 语句应该在源文件中最前面。
  • import 语句和 package 语句对源文件中定义的所有类都有效。在同一源文件中,不能给不同的类不同的包声明。

Java修饰符

像其他语言一样,Java可以使用修饰符来修饰类中方法和属性。主要有两类修饰符:

1.访问控制修饰符 : default, public , protected, private

Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。

default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
public : 对所有类可见。使用对象:类、接口、变量、方法
protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。

image.png

2.非访问控制修饰符 : final, abstract, static, synchronized

static 修饰符,用来修饰类方法和类变量。
final 修饰符,用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。
abstract 修饰符,用来创建抽象类和抽象方法。
synchronized 和 volatile 修饰符,主要用于线程的编程。

Java 关键字

下面列出了 Java 关键字。这些保留字不能用于常量、变量、和任何标识符的名称。


1.png
2.png
3.png

Java 源程序与编译型运行区别

image.png

Java变量

Java语言支持的变量类型有:

1.类变量(静态变量):独立于方法之外的变量,用 static 修饰。
  • 类变量也称为静态变量,在类中以 static 关键字声明,但必须在方法之外。
  • 无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。
  • 静态变量除了被声明为常量外很少使用,静态变量是指声明为 public/private,final 和 static 类型的变量。静态变量初始化后不可改变。
  • 静态变量储存在静态存储区。经常被声明为常量,很少单独使用 static 声明变量。
  • 静态变量在第一次被访问时创建,在程序结束时销毁。
  • 与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为 public 类型。
  • 默认值和实例变量相似。数值型变量默认值是 0,布尔型默认值是 false,引用类型默认值是 null。变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化。
  • 静态变量可以通过:ClassName.VariableName的方式访问。
  • 类变量被声明为 public static final 类型时,类变量名称一般建议使用大写字母。如果静态变量不是 public 和 final 类型,其命名方式与实例变量以及局部变量的命名方式一致。
2.实例变量:独立于方法之外的变量,不过没有 static 修饰。
  • 实例变量声明在一个类中,但在方法、构造方法和语句块之外;
  • 当一个对象被实例化之后,每个实例变量的值就跟着确定;
  • 实例变量在对象创建的时候创建,在对象被销毁的时候销毁;
  • 实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息;
  • 实例变量可以声明在使用前或者使用后;
  • 访问修饰符可以修饰实例变量;
  • 实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见;
  • 实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;
  • 实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用完全限定名:ObejectReference.VariableName。
3.局部变量:类的方法中的变量。
  • 局部变量声明在方法、构造方法或者语句块中;
  • 局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁;
  • 访问修饰符不能用于局部变量;
  • 局部变量只在声明它的方法、构造方法或者语句块中可见;
  • 局部变量是在栈上分配的。
  • 局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。
public class Variable{
    static int allClicks=0;    // 类变量
    //salary是静态的私有变量(类变量)
    private static double salary;
    // DEPARTMENT是一个常量(类变量)
    public static final String DEPARTMENT = "开发人员";
    //(类变量)
    public static void main(String[] args){
        salary = 10000;
        System.out.println(DEPARTMENT+"平均工资:"+salary);
    }

    String str="hello world";  // 实例变量
    private/protected/public/default String str1="hello world-1";  // 实例变量

    public void method(){
        int i =0;  // 局部变量
    }
}
import java.io.*;
public class Employee{
   // 这个实例变量对子类可见
   public String name;
   // 私有变量,仅在该类可见
   private double salary;
   //在构造器中对name赋值
   public Employee (String empName){
      name = empName;
   }
   //设定salary的值
   public void setSalary(double empSal){
      salary = empSal;
   }  
   // 打印信息
   public void printEmp(){
      System.out.println("名字 : " + name );
      System.out.println("薪水 : " + salary);
   }
 
   public static void main(String[] args){
      Employee empOne = new Employee("RUNOOB");
      empOne.setSalary(1000.0);
      empOne.printEmp();
   }
}

Java 常量

  • 在 Java 中使用 final 关键字来修饰常量,声明方式和变量类似:final double PI = 3.1415927;

继承

  • 在 Java 中,一个类可以由其他类派生。如果你要创建一个类,而且已经存在一个类具有你所需要的属性或方法,那么你可以将新创建的类继承该类。
  • 利用继承的方法,可以重用已存在类的方法和属性,而不用重写这些代码。被继承的类称为超类(super class),派生类称为子类(subclass)。

运算符

  • 除赋值运算符外,运算符本身不会更改变量的值。
  • 运算符的运算结果类型有的是固定的,有时候会根据被计算的值变化。比如:

两个int相加结果的类型就是int,两个byte相加,结果的类型是int。
一个int一个double结果是double类型

比较运算符

">、 >=、 <、 <=、 !=、 =="

布尔运算符

!、 &、 &&、 |、 ||

&和&&、|和||的区别, ||和&&是带有短路逻辑(JS里好像是这么叫的)的。Java中要用&&和||不要用单个的

运算符优先级

()
!
*,/,%
+,-
<,<=,>,>=
==
!=
&,&&,|,||
=

Java中的位运算符

以0开头的整数为八进制
  • 05就是十进制的5
  • 011就是十进制的9
以0x开头的整数为十六进制(x可以是大写,可以是小写,一般都是写小写的)
  • 0xF就是十进制的15
  • 0x11就是十进制的17
按位运算符(可以理解为为二进制定制一种运算)
  • 按位并(AND):& (把二进制的每一位,对位运算,0和1结果就是0,1和1结果是1)
  • 按位或(OR):| (把二进制的每一位,对位运算,有其中一个位是1其结果是1)
  • 按位异或(XOR):^ (把二进制的每一位,对位运算,两个位如果一样就是0,不一样就是1)
  • 按位取反:~ (把二进制的每一位取反)
位移运算符(只是把指定的二进制拿出来进行计算,并不会修改原二进制数)
  >>:符号位不动(数字都是有符号位的,第一位是符号位,符号位为0是正数,符号位为1是负数),其余位又移,符号位后边补0,又称带符号右移
  >>>:符号位一起右移,左边补0,又称无符号右移
  <<:左移,右边补0。左移没有带符号位一说,因为符号位在最左侧
  例子: 
      int a=0x400
      a>>2

二进制数:0101 1101 并不是说符号位是负,那么就是负的101 1101。因为有一套补码规则在,了解就好。

自增和自减操作符

++、--
//前加加得到的是增加完成后的值,后加加得到的是为增加时的值。(这点与JS刚好相反)

条件语句

  • switch语句中用于比较的值,必须是int类型,---最新版本的Java switch可能也支持其他类型

类(class)语法元素

public class HelloWorld{}

  • public class 是类修饰符
  • HelloWorld 是类名,要与文件名一致
  • 大括号内是类的内容

class 是Java语言中的一等公民,Java程序就是一个个的类组成的
类由修饰符,类名和类的内容组成
类名必须与保存类源文件的文件名相同

main方法(main method)语法元素

public class HelloWorld{
   public static void main(String[] args){}
}
  • public static void 是方法修饰符
  • 小括号内String[] args是方法参数(parameter)
  • 大括号内是方法的内容,又称方法体(method body)
  • Main方法最为特殊的一点是,它是Java程序的入口。就好性游戏的开始按键

Main方法是Java程序执行的入口,一个Java文件可以有很多个方法,Java程序会从main方法开始执行。
方法由方法修饰符,方法名,参数列表和方法体等组成

System.out.printIn

public class HelloWorld{
   public static void main(String[] args){
      System.out.println();  //注意是ln,是line,一行的缩写
   }
}
  • System.out.println是Java平台提供的类库的内容(Java提供的内置功能)。可以将内容输出。(命令行里使用就是输出到命令行(command line))
  • 小括号里的内容还是参数(parameter)列表
  • 没有参数的情况下,System.out.println会输出一行空行,也就是类似于我们敲个回车(会换一行)。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容

  • 转载请标注原文地址,谢谢! Java 基础语法 对象和类 Java中有一个概念即“万物皆对象”,一个Java程序可...
    Unruly_Wind阅读 819评论 0 3
  • 标识符 定义 给包,类,方法,变量起名字的符号。 组成规则 标识符由字母、数字、下划线、美元符号组成。 命名原则:...
    JourWon阅读 3,668评论 0 6
  • foochane :https://foochane.cn/article/2019121501.html 1 基...
    foochane阅读 1,306评论 0 5
  • 参考菜鸟教程进行编写 一.基本语法 1.1 基本概念 一个Java程序可以认为是一系列对象的集合,而这些对象通过调...
    天蓝如染阅读 416评论 0 1
  • 一、关键字 用于定义数据类型的关键字 基本数据类型 整数型(默认为 int) byte(8...
    陈凯冰阅读 242评论 0 2