0x03:Java基础语法

Java帝国


Java初生

  • Java 2标准版(J2SE):桌面领域(桌面开发,控制台开发....)
  • Java 2移动版(J2ME):手机领域(嵌入式开发,收集小家电)
  • Java 2企业版(J2EE):服务器领域(web端,服务器开发)

Java发展

  • 基于Java开发了巨多的平台,系统,工具
    • 构建工具:Ant,Maven,Jekins
    • 应用服务器:Tomcat,Jetty,Jboss,Websphere,Weblogic
    • Web开发:Eclipse,NetBean,intellij IDEA,
    • ........
  • 2006年:Hadoop(大数据领域)
  • 2008:Android (手机端)

Java特性和优势

  • 简单性
  • 面向对象
  • 可移植性
  • 高性能
  • 分布式
  • 动态性
    • 反射
  • 多线程
  • 安全性
  • 健壮性
  • 思考:Java为啥这么成功:天时地利人和。

JDK、JRE、JVM

  • JDK:Java Development kit
  • JRE:JavaRuntime Environment
  • JVM:Java Virtual Machine

0x03:Java基础语法


Java开发环境搭建

  • JDK下载与安装

百度搜索JDK8,找到下载地址-->同意协议-->下载电脑对应版本-->双击安装JDK-->记住安装路径

  • 配合环境变量
    • 1.我的电脑-->右键-->属性
    • 2.环境变量-->JAVA_HOME
    • 3.配置path变量
  • JDK目录介绍
  • Hello World及简单的语法规则
  • Notepad++ 安装和使用

HelloWorld

  • 1.新建一个文件夹,存放代码
  • 2.新建一个java文件
    • 文件后缀为.java
    • Hello.java
    • 坑点:系统可能没有显示文件名,需要手动打开
  • 编写代码
public class Hello{
	public static void main(String[] args){
		System.out.print("Hello,World");
	}
} 
  • 编译 javac java文件,会生成一个class文件
  • 运行class文件,java class文件,不用写后缀
    0x03:Java基础语法

Java程序运行机制

  • 编译型
  • 解释型
  • 程序运行机制
    0x03:Java基础语法

注释、标识符、关键字


1.注释

注释并不会被执行,是写给我们人看的,平时写代码,一定要注意规范。

  • Java中的注释有三种:
    • 单行注释
      0x03:Java基础语法
    • 多行注释
      0x03:Java基础语法
    • 文档注释
      0x03:Java基础语法

2.标识符

标识符注意点

  • 所有的标识符都应该以字母(A-Z或者a-z),美元符号($),或者下划线(_)开始
  • 首字母之后可以是字母(A-Z或者a-z),美元符号($),下划线(_)或数字的任何字符组合
  • 不能使用关键字作为变量名或方法名
  • 标识符是大小写敏感
  • 合法标识符举例:age、$salary、_value、__1_value
  • 非法标识符举例:123abc、-salary、[[abc]]
  • 可以使用中文命名,但是一般不建议这样去使用,也不建议使用拼音,很Low
public class Demo01 {  
    public static void main(String\[\] args) {  
  
        String 王者荣耀 \= "百星王者"; //可以使用中文命名,但是一般不建议这样去使用,也不建议使用拼音,很Low  
 String \_王者荣耀 \= "倔强青铜"; //可以使用中文命名,但是一般不建议这样去使用,也不建议使用拼音,很Low  
  
 System.out.println(王者荣耀); //打印变量王者荣耀  
 System.out.println(\_王者荣耀); //打印变量\_王者荣耀  
  
 //大小写敏感  
 String Man = "Taoing"; //变量名 大小写敏感  
 String man = "Taoing"; //变量名 大小写敏感  
  
 String Ahello = "Taoing";  
 String hello = "Taoing";  
 String $hello = "Taoing";  
 String \_hello = "Taoing";  
  
 String hekko1 = "Taoing";  
  
 //String 1hello = "Taoing";  
 //String [[hello]] = "Taoing";  
 }  
}

0x03:Java基础语法


3.关键字

obstract assert boolean break byte
case catch char class const
continue default do double else
enum extends final finally float
for goto if implements import
instanof int interface long native
new package private protected public
return strictfp short static super
switch synchronized this throw throws
transient try void volatile while
  • Java所有的组成部分都需名字。类名、变量名以及方法名都被称为标识符

3. 数据类型

  • 强类型语言
    • 要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用
  • 弱类型语言
    • 要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用
  • Java的数据类型分为两大类
    • 基本类型(primitive type)
      0x03:Java基础语法
public class Demo02 {  
    public static void main(String\[\] args) {  
        //八大基本数据类型  
  
 //整数  
 int num1 = 10; //最常用  
 byte num2 = 20;  
 short num3 = 30;  
 long num4 = 40L; //long类型要在数字后面加个L  
  
 //小数:浮点数  
 float num5 = 50.1F; //float类型要在数字后边加个F  
 double num6 = 3.141592653589793238462643;  
  
 //字符  
 char name = 'T';  
 //字符串,String不是关键字,类  
//        String namea = "Taoing The heack";  
  
 //布尔值  
 boolean flag = true;  
 boolean flag1 = false;  
  
 }  
}
  • 引用类型 (reference type)

0x03:Java基础语法


数据类型拓展及面试题讲解

public class Demo03 {  
    public static void main(String\[\] args) {  
        //整数拓展:进制  二进制:0b开头   十进制  八进制:0开头  十六进制:0x开头  
  
 int i = 10; //十进制  
 int i2 = 010; //八进制0  
 int i3 = 0x10; //十六进制0x    0~9  A~F   16  
  
 System.out.println(i);  
 System.out.println(i2);  
 System.out.println(i3);  
 System.out.println("==========================================================");  
  
 //==========================================================  
 //浮点数拓展? 银行业务怎么表示?  
 //BigDecimal  --->数学工具类  
 //==========================================================  
 //float; 表示的字符是有限的  离散的  舍入误差 大约 接近但不等于  
 //double;  
 //最好完全使用浮点数进行比较  
 //最好完全使用浮点数进行比较  
 //最好完全使用浮点数进行比较  
 float f = 0.1f; //0.1  
 double d = 1.0 / 10; //0.1  
  
 System.out.println(f == d); //false  
 System.out.println(f);  
 System.out.println(d);  
  
 float d1 = 2313131231212313f;  
 float d2 = d1 + 1;  
 System.out.println(d1 == d2); //true  
  
 //========================================================== //字符串拓展?  
 //==========================================================  
 System.out.println("==========================================================");  
  
 char c1 = 'a';  
 char c2 = '中';  
 System.out.println(c1);  
 System.out.println((int) c1); //强制转换  
  
  
 System.out.println(c2);  
 System.out.println((int) c2); //强制转换  
  
 //所有的字符本质还是数字  
 //编码 Unicode表:97代表小写a ,65代表大写A 占有2个字节 0~65536个字符 Excel表格 2 16次方 = 65536 //U0000 UFFFF char c3 = '\\u0061';  
 System.out.println(c3); //a  
  
  
 //转义字符  
 // \\t 制表符  
 // \\n 换行  
 // ...更多百度  
 System.out.println("==========================================================");  
  
  
 System.out.println("Hello\\tWorld");  
 System.out.println("Hello\\nWorld");  
  
 //==========================================================  
 //对象从内存分析  
 System.out.println("==========================================================");  
 //不相等  
 String sa = new String("hello world");  
 String sb = new String("hello world");  
 System.out.println(sa == sb);  
  
 //相等  
 String sc = "hello world";  
 String sd = "hello world";  
 System.out.println(sc == sd);  
  
 //==========================================================  
 //布尔值拓展  
 System.out.println("==========================================================");  
 boolean flag = true;  
 if (flag == true) {}    //新手  
 if (flag){}     //老手  
 //Less is More!  代码要精简易读  
  
 }  
}

类型转换

  • 由于Java是强类型语言,所以要进行有些运算的时候,需要用到类型转换
低 ------------------------>高
byte,short,char-> int -> long -> float -> double
  • 运算中,不同类型的数据先转化为同一类型,然后进行运算。
  • 强制类型转换
  • 自动类型转换
public class Demo05 {  
    public static void main(String\[\] args) {  
        int i = 128;  
 byte b = (byte) i;//内存溢出  
  
 double c = i; //自动转换 格式: (类型)变量名  低\--->高  
  
 //强制转换 格式: (类型)变量名  高\--->低  
 //自动转换 格式: (类型)变量名  低\--->高  
  
 System.out.println(i);  
 System.out.println(b);  
 System.out.println(c);  
  
 /\*注意点:  
 1.不能对布尔值进行转换  
 2.不能将对象类型转换为不相干类型。  
 3.在把大容量转换到低容量的时候,强制转换,  
 4.转换的时候可能存在内存溢出,或者精度问题!  
 \*/  
 System.out.println("=========================================");  
  
 System.out.println((int) 23.7); //23  
 System.out.println((int)-45.89f);  
  
  
 System.out.println("=========================================");  
 char r = 'a';  
 int d  = r + 1;  
 System.out.println(d);  
 System.out.println((char) d);  
  
 }  
}

public class Demo06 {  
    public static void main(String\[\] args) {  
        //操作比较大的数的时候,注意溢出问题  
 //JDK7新特性,数字之间可以用下划线分隔  
 int money = 10\_0000\_0000;  
 int years = 20;  
 int total=  money \* years; //-1474836480,计算的时候溢出了  
 System.out.println(total);  
  
 long tital2 = money \* years; //默认是int,转换前已经存在问题  
 System.out.println(tital2);  
  
  
 long tital3 = money \* ((long)years); //先把一个数转换为long  
 System.out.println(tital3); //20000000000  
 }  
}

变量、常量、作用域


1.变量

  • 变量就是可以变化的量!
  • Java是一种强类型语言,每个变量都必须声明其类型
  • Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。
type	 varName [=value] [{,varName[=value]}];
//数据类型 变量名  =值; 可以使用逗号隔开来声明多个同类型变量。
  • 注意事项:
    • 每个变量都有类型,类型可以是基本类型,也可以是引用类型。
    • 变量名必须是合法的标识符
    • 变量声明是一条完整的语句,因此每一个声明都必须以分号结束。

2.变量作用域

  • 类变量
  • 实例变量
  • 局部变量
public class Demo08 {  
  
    //类变量:static  
 static double salary \= 2500;  
  
 //属性:变量  
  
 //实例变量:从属于对象;如果不自行初始化,这个类型的默认值 0 0.0 u0000 //布尔值:默认false  
 //除了基本类型,其余默认值都是null  
 String name;  
 int age;  
  
  
 //main方法  
 public static void main(String\[\] args) {  
  
        //局部变量,必须声明和初始化值  
 int i = 10;  
 System.out.println(i);  
  
 //变量类型 变量名字 ==  new Demo08(); Demo08 demo08 = new Demo08();  
  
 System.out.println(demo08.age);  
 System.out.println(demo08.name);  
  
 //类变量 static System.out.println(salary);  
  
  
 }  
  
  
    //其他方法  
  
 public void add() {  
//        System.out.println(i);  
  
 }  
}

常量


  • 常量(Constant):初始化(initialize)后不能在改变值!不会变动的值
  • 所谓常量可以理解为一种特殊的变量,它的值被设定后,在程序运行过程中不允许改变。
final 常量名 = 值;
final double PI = 3.14;
public class Demo09 {  
  
    //修饰符,不存在先后顺序  
 static  final  double PI = 3.14;  
 final static  double PI1 = 3.1415926;  
  
 public static void main(String\[\] args) {  
        System.out.println(PI);  
 System.out.println(PI1);  
 }  
}
  • 常量名一般使用大写字符。

变量的命名规范

  • 所有变量 、方法名、类名:见名知意
  • 类成员变量:首字母小写和驼峰原则:monthSalary
  • 局部变量:首字母小写和驼峰原则
  • 常量:大写字母和下划线:MAX_VALUE
  • 类名:首字母大写和驼峰原则:Man,GoodMan
  • 方法名:首字母小写和驼峰原则:run(),runRun()

运算符

  • Java语言运算符:
    • 算术运算符:+, - , * , / , % , ++ ,--
    • 赋值运算符:=
    • 关系运算符:>,<,>=,==,!=instanceof
    • 逻辑运算符:&&,||,!
    • 位运算符:&,|,^,~,>>,<<,(>>>了解)
    • 拓展运算符:+=,-+,*=,/=
  • 案例Demo01:
package operator;  
  
public class Demo01 {  
    public static void main(String\[\] args) {  
        //二元运算符  
 int a = 10;  
 int b = 20;  
 int c = 25;  
 int d = 25;  
  
 System.out.println(a + b);  
 System.out.println(a - b);  
 System.out.println(a \* b);  
 System.out.println(a/ (double)b);  
  
 }  
}
  • 案例Demo02:
package operator;  
  
public class Demo02 {  
    public static void main(String\[\] args) {  
        long a = 123123123123123L;  
 int b = 123;  
 short c = 10;  
 byte d = 8;  
  
 System.out.println(a+b+c+d); //long  
 System.out.println(b+c+d); //int  
 System.out.println(c+d); //int  
 }  
}
  • 案例Demo03:
package operator;  
  
public class Demo03 {  
    public static void main(String\[\] args) {  
        //关系运算符返回的结果:正确,错误   布尔值  
 int a = 10;  
 int b = 20;  
 int c = 21;  
  
 System.out.println(c % a); //  c / a    21 / 10 = 2 ....1 取余数,模运算  
 System.out.println(a > b); //false  
 System.out.println(a < b); //true  
 System.out.println(a == b); //false  
 System.out.println(a != b); //true  
 }  
}

自增自减运算符、初始Math类

package operator;  

public class Demo04 {  
  public static void main(String\[\] args) {  
      // ++(自增)  --(自减) 一元运算符  

int a = 3;  


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

int c = ++a; //++a a = a + 1; 执行完这行代码前,先给自增,再c赋值  


System.out.println(a);  
System.out.println(b);  
System.out.println(c);  

//幂运算 2^3    2\*2\*2 = 8; 数学类:Math  
double pow = Math.pow(2,3);  
System.out.println(pow);  

double pow1 = Math.pow(3,2);  
System.out.println(pow1);  
}  
}

逻辑运算符、位运算符

package operator;  
//位运算  
public class Demo06 {  
   public static void main(String\[\] args) {  
        /\*  
A = 0011 1100 B = 0000 1101\-------------------------------------------------------------------  
A&B 0000 1100 如果两个都是1它就为1,否则都为0  
A|B 0011 1101 如果都是0则为0,如果有一个1就为1  
A^B 0011 0001 如果两个数值相同则为0,否则为1  
~B  1111 0010 取反完全取反值  
 
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);  
 
}  
 
 
 
 
}

三元运算符及总结

  • 拓展运算符
package operator;  
 
public class Demo07 {  
   public static void main(String\[\] args) {  
       int a = 10;  
		int b = 20;  
		a+=b; //a = a + b  
 
a-=b; //a = a - b  
System.out.println(a);  
System.out.println(a);  
 
//字符串连接符 +, String System.out.println(a+b);  
System.out.println(""+a+b);  
}  
}
  • 三元运算符
package operator;  
 
public class Demo08 {  
   public static void main(String\[\] args) {  
       // x ? y : z  
   	 //如果x==true,则结果为y,否则为z  
   	 int results = 90;  
   	 int score = 80;  
   	 String type = score < 60 ? "不及格" : "及格";  
   	 System.out.println(type);  

   	 String type1 = results < 100 ?"不及格":"及格";  
   	 System.out.println(type1);  
   	 }  
}

包机制

  • 为了更好地组织类,Java提供了包机制,用于区别类名的命名空间。
  • 包语句的语法格式为:
	package pkg1[.pk2[.pk3....]];
  • 一般利用公司域名倒置作为包名;
  • 例如:www.baidu.com ==>com.baidu.www
  • 为了能够使用某一个包的成员,我们需要在Java程序中明确导入该包。使用"import"语句即可完成此功能
	import package1[.package2...].(classname|*);

IDEA中建包的时候如何才能把包分开

==================
原先我们创建包时输入com.atguigu.web时,idea只会有一个包。那么如何变成层级结构的两个包呢?
0x03:Java基础语法
如上图在项目结构附近有小齿轮的图标,点击它会出现选择框把compact Middle Packages 这个选项取消勾选,这样就我们创建包时就会自动分层级。

这样我们用包扫描时,编译进target文件夹中的接口文件才会和xml映射文件才会在同一个包下。


JavaDoc生成文档

  • Javadoc命令用来生成自己API文档
  • 参数信息
    • @author 作者名
    • @version版本号
    • @since指明需要最早使用的jdk版本
    • @param参数名
    • @return返回值情况
    • @throws异常抛出情况
上一篇:《算法竞赛进阶指南》0x03差分


下一篇:0x03 设备漏洞---QEMU使用