基础语法

一、注释

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

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

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

 

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  陈待有  阅读(55)  评论(0)    收藏  举报