基础语法

一、注释

  • 平时我们编写代码,在代码量比较少的时候,我们自己还可以看得懂,担当项目结构一旦复杂起来,我们就需要用到注释了。

  • 注释并不会被执行,是给我们写代码的人看的

  • 书写注释是一个非常好的习惯

 

Java中的注释有三种:

  • 单行注释 //

  • 多行注释 /* */

  • 文档注释 /** **/

 

二、关键字和标识符

关键字

Java关键字类别Java关键字关键字含义
访问控制 private 一种访问控制方式:私用模式,访问控制修饰符,可以应用于类、方法或字段(在类中声明的变量)
访问控制 protected 一种访问控制方式:保护模式,可以应用于类、方法或字段(在类中声明的变量)的访问控制修饰符
访问控制 public 一种访问控制方式:共用模式,可以应用于类、方法或字段(在类中声明的变量)的访问控制修饰符。
类、方法和变量修饰符 abstract 表明类或者成员方法具有抽象属性,用于修改类或方法
类、方法和变量修饰符 class 声明一个类,用来声明新的Java类
类、方法和变量修饰符 extends 表明一个类型是另一个类型的子类型。对于类,可以是另一个类或者抽象类;对于接口,可以是另一个接口
类、方法和变量修饰符 final 用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变,用来定义常量
类、方法和变量修饰符 implements 表明一个类实现了给定的接口
类、方法和变量修饰符 interface 接口
类、方法和变量修饰符 native 用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的
类、方法和变量修饰符 new 用来创建新实例对象
类、方法和变量修饰符 static 表明具有静态属性
类、方法和变量修饰符 strictfp 用来声明FP_strict(单精度或双精度浮点数)表达式遵循IEEE 754算术规范
类、方法和变量修饰符 synchronized 表明一段代码需要同步执行
类、方法和变量修饰符 transient 声明不用序列化的成员域
类、方法和变量修饰符 volatile 表明两个或者多个变量必须同步地发生变化
程序控制 break 提前跳出一个块
程序控制 continue 回到一个块的开始处
程序控制 return 从成员方法中返回数据
程序控制 do 用在do-while循环结构中
程序控制 while 用在循环结构中
程序控制 if 条件语句的引导词
程序控制 else 用在条件语句中,表明当条件不成立时的分支
程序控制 for 一种循环结构的引导词
程序控制 instanceof 用来测试一个对象是否是指定类型的实例对象
程序控制 switch 分支语句结构的引导词
程序控制 case 用在switch语句之中,表示其中的一个分支
程序控制 default 默认,例如:用在switch语句中,表明一个默认的分支。Java8 中也作用于声明接口函数的默认实现
错误处理 try 尝试一个可能抛出异常的程序块
错误处理 catch 用在异常处理中,用来捕捉异常
错误处理 throw 抛出一个异常
错误处理 throws 声明在当前定义的成员方法中所有需要抛出的异常
包相关 import 表明要访问指定的类或包
包相关 package 包
基本类型 boolean 基本数据类型之一,声明布尔类型的关键字
基本类型 byte 基本数据类型之一,字节类型
基本类型 char 基本数据类型之一,字符类型
基本类型 double 基本数据类型之一,双精度浮点数类型
基本类型 float 基本数据类型之一,单精度浮点数类型
基本类型 int 基本数据类型之一,整数类型
基本类型 long 基本数据类型之一,长整数类型
基本类型 short 基本数据类型之一,短整数类型
基本类型 null 空,表示无值,不能将null赋给原始类型(byte、short、int、long、char、float、double、boolean)变量
基本类型 true 真,boolean变量的两个合法值中的一个
基本类型 false 假,boolean变量的两个合法值之一
变量引用 super 表明当前对象的父类型的引用或者父类型的构造方法
变量引用 this 指向当前实例对象的引用,用于引用当前实例
变量引用 void 声明当前成员方法没有返回值,void可以用作方法的返回类型,以指示该方法不返回值
保留字 goto 保留关键字,没有具体含义
保留字 const 保留关键字,没有具体含义,是一个类型修饰符,使用const声明的对象不能更新
  • Java所有的组成部分都需要名字。类名,变量名以及方法名都被称为标识符

标识符

标识符注意点:

  • 所有的标识符都应该以字母(A-Z或者a-z),美元符($),或者下划线(_)开始

  • 首字符之后可以说字母(A-Z或者a-z),美元符($),下划线(_)或者数字的任何字符组合

  • 不能使用关键字作为变量名或者方法

  • 标识符是大小写敏感的

  • 合法标识举例:age,$salary,_value,__1_value

  • 非法标识符举例: 123abc, -salary, #abc、

  • 可以使用中文命名,但是一般不建议这样子去使用,也不建议使用拼音,很low

    public static void main (String[] args){
       String 王者荣耀 = "最强王者";
       System.out.println(王者荣耀);
    }

 

三、数据类型

  • Java是强类型语言

    要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用

  • Java的数据类型分为两大类

    基本数据类型

    引用类型

img

序号数据类型位数默认值取值范围举例说明
1 byte(位) 8 0 -2^7 - 2^7-1 byte b = 10;
2 short(短整数) 16 0 -2^15 - 2^15-1 short s = 10;
3 int(整数) 32 0 -2^31 - 2^31-1 int i = 10;
4 long(长整数) 64 0 -2^63 - 2^63-1 long l = 10L;
5 float(单精度) 32 0.0 -2^31 - 2^31-1 float f = 10.0F;
6 double(双精度) 64 0.0 -2^63 - 2^63-1 double d = 10.0D;
7 char(字符) 16 'u0000' (空字符) 0 - 2^16-1 char c = 'c';
8 boolean(布尔值) 8 false true、false boolean b = true;

除了基本类型,其余默认值都为空(null)。

什么是字节

  • 位(bit):是计算机 内部数据 储存的最小单位,11001100是一个八位二进制数。

  • 字节(byte):是计算机中 数据处理 的基本单位,习惯上用大写B来表示

  • 1B(byte,字节)= 8bit (位)

  • 字符: 是指计算机中使用的字母,数字,字和符号

1bit表示1位 1Byte表示一个字节 1B=8b

1KB = 1024B 1M = 1024KB 1G = 1024M 1TB = 1024G

 

拓展

整数拓展: 进制

进制 二进制0b 十进制 八进制0 十六进制0x

int i1 = 10;
int i2 = 010;   //八进制0
int i3 = 0x10;   //十六进制0x
​
System.out.println(i1);   //10
System.out.println(i2);  //8
System.out.println(i3);   //16

 

浮点数拓展 BigDecimal

银行业务怎么表示钱?

答:BigDecimal 数学工具类

float 有限 离散 , 有舍入误差 大约 接近但不等于

double

float f = 01.f;  //0.1
double d= 1.0/10;  //.01
System.out.println(f==d);   //false
​
float d1 = 231312132132132f;
float d2 = d1 + 1;
System.out.println(d1==d2); //true

得出结论:最好完全避免使用浮点数进行比较

 

字符拓展 本质和转义

char c1 = 'a';
char c2 = '中';
​
System.out.println(c1);   //a
System.out.println((int)c1);  //97
System.out.println(c2);   //中
System.out.println((int)c2);   //20013

所有的字符本质还是数字

编码 Unicode 表 :(97 = a 65 = A)2字节 0-65536

Unicode表 是 16进制表

// Unicode 范围: U0000  - UFFFF 
char c3 = '\u0061';  //97的16进制为61
System.out.println(c3);   //a

转义字符

  \t   制表符  跟tab使用差不多
 \n   换行

对象 从内存分析

String s1 = new String("hello world");
String s2 = new String("hello world");
System.out.println(s1==s2);  //false
​
String s3 = "hello world";
String s4 = "hello world";
System.out.println(s3==s4); //true

s1 与 s2是 new出来的 ,为两个对象 , s1=s2比较的是地址值 不同对象地址值不同。

s3 ,s4创建方式是 在内存中新建一个"hello world"对象,将这个对象赋值给s3,s4.两者指向同一个地址值

布尔值拓展

boolean flag = true ;
if(flag){
}

代码要精简易读

四、类型转换

  • 由于java是强类型语言,所以要进行有些运算的时候,需要用到类型转换

低 -----> 高

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

  • 运算中,不同类型的数据先转化为同一类型,然后进行运算。

char c = 'a';
int d = c + 1;
System.out.println(d); //98
System.out.println((char)d);  //b

 

  • 强制转换

(类型)变量名 高 - - 低

/**
强制转换-内存溢出
**/
int i = 128;
byte b = (byte) i;  //内存溢出 byte的范围 -128 到 127
System.out.println(b);  // -128 出现异常
/**
强制转换-精度问题
**/
System.out.println((int)23.7);  //23
System.out.println((int)-45.89f);  //-45
  • 自动转换

    高 - - 低

int i = 128;
double b = (double) i;  
System.out.println(b);  //128.0

注意点

  1. 不能对布尔值进行转换

  2. 不能把对象类型转换为不相干的类型

  3. 在把高容量转换到低容量的时候,强制转换

  4. 转换的时候可能存在内存溢出,或者精度问题!

拓展

JDK7新特性,数字之间可以用下划线分割。

操作比较大的数的时候,注意溢出问题

int money = 10_0000_0000;
System.out.println(money);   //1000000000
​
int yeats = 20;
int total = money*years;  
System.out.println(total); //-1474836480 ,计算的时候溢出了
​
long total2 = money*years; //-1474836480 ,默认是int ,转换之前就已经出问题了
long total3 = money*((long)years);//正确 ,先将一个数转换为long

 

五、变量

  • 变量是什么? 就是可以变化的量!

  • Java是一种强类型语言,每个变量都必须声明其类型。

  • Java变量是 程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。

 

注意事项:

  • 每个变量都有类型,类型可以是基本类型,也可以是引用类型。

  • 变量名必须是合法的标识符。

  • 变量声明是一条完整的语句,因此每一个声明都必须以分号结束。

 

变量作用域

  • 类变量

从属于类,随类出现和消失,可以直接使用,不需要新建对象。

  • 实例变量

从属于对象;如果不自行初始化,会自行设置类型的默认值

使用时,要新建对象。

  • 局部变量

    必须声明和初始化

public class Variable {

//类变量 static
static double salary = 2500;

//实例变量:从属于对象;如果不自行初始化,会自行设置类型的默认值
String name;
int age;

public static void main(String[] args){
//局部变量:必须声明和初始化
int i = 10;
System.out.println(i); //10

//实例变量 变量类型 变量名字 = new Variable();
Variable variable = new Variable();
System.out.println(variable.age); //0
System.out.println(variable.name); //null

//类变量
System.out.println(salary); //可以直接使用
}

//其他方法
public void add(){

}
}

常量

  • 常量:初始化后不能再改变值!不会变动的值。

  • 所谓常量可以理解成一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变。

final 常量名 = 值;
final double PI = 3.14;
  • 常量名一般使用大写字符。

变量的命名规范

  • 所有变量,方法,类名:见名知意

  • 类成员变量:首字母小写和驼峰原则:monthSalary

  • 局部变量:首字母小写和驼峰原则

  • 常量:大写字母和下划线:MAX_VALUE

  • 类名:手写字母大写和驼峰原则:Man,GoodMan

  • 方法名:首字母小写和驼峰原则:run( ),runRun( )

 

六、运算符

Java语言支持如下运算符: 优先级()

  • 算术运算符:+ , - , * , / , % , ++ , --

  • 赋值运算符 : =

  • 关系运算符 : > , < , >= ,<= , == , !=instanceof

  • 逻辑运算符:&& , || , !

  • 位运算符:& ,| , ^ , ~ , >> , << , >>>(了解!!!)

  • 条件运算符 ? :

//  x ? y :z
// 如果x==true,则结果为y,否则位z
int score = 80;
String type = score < 60 ? "不及格":"及格"
System.out.println(type); // "及格"
  • 扩展赋值运算符: += , -= , *= , /=

int a+=b;  // a = a+b;
int a-=b; // a = a-b;
long a = 1231231212313L;
int b = 123;
short c = 10;
byte d = 8;
int e = 128;

System.out.println(a+b+c+d); //long
System.out.println(b+c+d); //int
System.out.println(c+d); //int

System.out.println(b/e); //0 错误
System.out.println(b/(double)e); 正确

 

a++与++a

int a = 3;

int b = a++; //执行完这行代码后,先给b赋值,再自增
//a = a + 1;
System.out.println(a); //4
System.out.println(b); //3

//a = a + 1;
int c = ++a; //执行完这行代码前,先自增,再给b赋值
System.out.println(a); //5
System.out.println(C); //5

Math 数学工具类

很多运算,我们会使用一些工具类来操作

//幂运算 2^3
double pow = Math.pow(3,2);
System.out.println(pow); //8

逻辑运算符

与(and),或(or),非(取反)

boolean a = true;
boolean b = false;
System.out.println(a&&b); //false 俩个变量都为真,结果才为真
System.out.println(a||b); //true 两个变量都为假,结果才为假
System.out.println(!b); //true

&& ,|| 为短路运算

int c =5;
boolean d =(c<4)&&(c++<4);
System.out.println(d);//false
System.out.println(c);//5 说明c++没有执行

位运算(面试题)

/*
A = 0011 1100
B = 0000 1101

A&B = 0000 1100 有0则0
A|B = 0011 1101 有1则1
A^B = 0011 0001 相同则0,不同则1 (异或)
~B = 1111 0010 取反
*/

位运算的常见面试题

如何快速计算2*8?

/*  << 左移 相当于*2 , >> 右移 相当于/2
2*8 = 2*2*2*2

0000 0000 0
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
0000 1000 8
0001 0000 16
*/
System.out.println(2<<3); //最快

<< 左移 相当于*2

>> 右移 相当于/2

字符串连接符 + (面试题)

""+a+b 与 a+b+"" 的区别?

答:"" 在前面 ,a和b直接拼接,"" 在后面 ,a和b先运算再与空字符串拼接

int a = 10;
int b = 20;

System.out.println(""+a+b); // 1020
System.out.println(a+b+""); // 30

+ 前后有String类型 则为字符串连接符

 

七、包机制

  • 为了更好的组织类,Java提供了包机制,用于区别类名的命名空间。

  • 包语句的语法格式为:

package pkg1[.pkg2[.pkg3...]];
  • 一般公司域名倒置作为报名;

  • 为了能够使用某一个包的成员,我们需要在Java程序中明确导入该包,使用"import"语句可完成此功能

import package1[.package2...].(classname|*);

八、JavaDoc

  • JavaDoc命令是用来生成自己API文档的

  • 参数信息

@author 作者名

@version 版本号

@since 指明需要最早使用的jdk版本

@param 参数名

@return 返回值情况

@throws 异常抛出情况

 

生成文档:

①打开类文件 存储位置

②在URL 前加 cmd 打开命令窗口

③输入javadoc -encoding UTF-8 -charset UTF-8 java文件

 

 

 

 

 

 

 

 

posted on 2021-12-07 20:56  陈待有  阅读(101)  评论(0)    收藏  举报