Java基础语法

Java基础语法

1.注释

  • 养成使用注释,有助于自己或是别人看得懂代码的意思(注释是不会被执行的)
  • Java中有三种注释,所有注释不能添加到代码的前面,新的一行或是代码后面
  1. 单行注释
//注释
  1. 多行注释
/*
注释
*/
  1. 文档注释//javaDoc
/**
注释
*/

标识符

关键字(不能使用关键字命名)

abstractassertbooleanbreakbyte
casecatchcharclassconst
continuedefaultdodoubleelse
enumextendsfinalfinallyfloat
forgotoifimplementsimport
instanceofintinterfacelongnative
newpackageprivateprotectedpublic
returnstrictfpshortstaticsuper
switchsynchronizedthisthrowthrows
transienttryvoidvolatilewhile
  1. Java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。

标识符注意点

  • 关键字不能命名

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

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

  • 大小写十分敏感

  • 不建议中文或是拼音命名,最好是英文为主

数据类型

强类型语言

  • 要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用(也就是每个东西必须要命名了之后才可以拿来使用)

弱类型语音

  • 可以随便玩,不是很安全
  1. Java的数据类型分为两大类

基本类型(primitive type)

1.数值类型
  1. byte占一个字节范围:-128-127
  2. short占2个字节范围:-32768-32767
  3. int占4个字节范围:-2147483648-2147483647(常用)
  4. long占8个字节范围:-9223372036854775808-9223372036854775807(long后面要加个L)
2.浮点类型(小数点)
  1. float占4个字节 (float后面要加个F)

  2. double占8个字节(常用)

3.字符类型char占2个字节(只能是一个字母、符号、或是文字)
4.boolean类型:占1位其值只有truefalse两个
5.String类型
   public class demo03 {
       public static void main(String[] args) {
           //八大基本数据类型
   
           //整数
           byte num2 = 20;//-128-127
           short num3 = 30;//-32768-32767
           int num1 = 10; //最常用 -2147483648-2147483647
           long num4 = 30L;//-9223372036854775808-9223372036854775807(long后面要加个L)
   
           //浮点数(小数)
           float num5 = 50.1F;//float后面需要加个F
           double num6 = 3.141587644446464;//(常用这个)
   
           //字符
           char name ='国';//(只能是一个字母、符号、或是文字)
           String namea = "中国";//这不是一个关键字,是一个class
   
           //布尔值:是与否,二选一
           boolean flag = true;
           //boolean flag = false;
       }
   }
  • 引用类型(reference type)
    1. 接口
    2. 数组
  1. 什么是字节

    • 位(bit):是计算机内部数据存储的最小单位,11001100是一个八位二进制数。
    • 字节(byte):是计算机中数据处理的基本单位,习惯上用大写的B来表示。
    • 1B(byte,字节)=8(bit,位)
    • 字符:是指计算机中使用的字母,数字,字和符号
  2. 换算单位

    • 1bit表示一位、一个数字
    • 1Byte表示一个字节 1B=8b
    • 1024B=1KB
    • 1024KB=1M
    • 1024M=1G

拓展

整数拓展

  • 二进制(开头0b)
  • 八进制(开头0)
  • 十进制
  • 十六进制(开头0x)
public class Demo4 {
    public static void main(String[] args) {
        //整数拓展 进制  二进制0b 八进制0  十进制  十六进制0x
        int i = 10;  //十进制
        int i2 = 010; //八进制0
        int i3 = 0x10; //十六进制0x 0~9 A~F
        System.out.println(i); //结果为10
        System.out.println(i2);//结果为8
        System.out.println(i3);//结果16
    }
}

浮点拓展(银行业务怎么表示)

  • float 是一个有限的小数点、离散的、会舍入误差、大约、接近但不等于

  • double 同上

  • 精确的表示数字使用数字工具类BigDecimal

  • 禁止用浮点数进行比较

public class Demo {
    public static void main(String[] args) {
        //银行业务表示钱或是一些精确的数字只能用数字工具类 BigDecimal
        //float 是一个有限的小数点,离散的,会舍入误差的、大约、接近但不等于
        //double
        //表示精确的数字一定不要使用浮点数进行比较
        float f = 0.1f;  //0.1
        double d = 1.0/10;  //0.1
        System.out.println(f==d); //false 否
        float d1 =2322345644567f;
        float d2 = d1 + 1; //d2明显比d1多了1但是结果却是相等的
        System.out.println(d1==d2);  //true 是
    }
}

字符拓展

  • 所有的字符都会在Unicode编码表里代表着相应的数字,也就是所有的字符本质还是数字,一般都是从0-65536,(例如97=a,65=A)
  • 字符是可以强制转换成数字的
  • Excel表格数值是有限的65536
public class Demo {
    public static void main(String[] args) {
        //所以的字符本质还是数字,每个字符都会对应编码表 Unicode的每一个数字,从0 - 65536 例如(97=a,65=A)U00000-UFFFF
        //所有字符其实可以强制转换成unicode中的对应数字
        char c1 = 'A';
        char c2 = '中';
        System.out.println(c1);
        System.out.println((int)c1);//强制转换 A等于65
        System.out.println(c2);
        System.out.println((int)c2);//强制转换 中等于20013
        char c3 = '\u0061';
        System.out.println(c3);//结果等于a

    }
}

转义字符拓展

  • 转义字符是有个相对应的表格的例如(\t=中间有个tab一样的空格,\n=换行)可以去查询转义字符表
public class Demo {
    public static void main(String[] args) {
        //转义字符表
        // \t  =  tab空格
        // \n  =  换行
        System.out.println("Hello\nWorld");//换行
        System.out.println("Hello\tWorld");//tab空格

    }
}

布尔值拓展

  • less is more! 代码要精简易读
public class Demo {
    public static void main(String[] args) {
        boolean flag = true;
        if (flag==true){执行内容} //如果flag是正确会执行内容,新手书写方式
        if (flag){执行内容}  //如果flag是正确会执行内容,新手书写方式
        //Less is More 代码要精简
    }
}

类型转换

  • 由于java是强类型语言,所以要进行有些运算的时候,需要用到类型转换
  • 优先级byte-short-char-int-long-float-double
  • 运算中,不同类型的数据先转换为同一类型,然后进行运算
  • 强制类型转换 (需要转换的类型)变量名。(只有高转低需要)
  • 自动类型转换**(低到高不需要)**
  • 如果强制转换的时候超出类型的设定上限会导致结果出错,也就是内存溢出,或是精度问题!
  • 字符也是可以进行数字转换的,对应着Unicode编码表数字
public class Demo {
    public static void main(String[] args) {
        int i = 128;
        byte b = (byte) i; //高转低需要强制转换
        double v = i;  //低转高不需要强制转换
        System.out.println(v);  //结果128.0没问题
        System.out.println(i);  //结果是128没有问题
        System.out.println(b);  //结果是-128,有问题
        //强制转换的时候超出类型的设定上限会导致结果出错,也就是内存溢出!!
        System.out.println((int)23.7);  //结果是23,已经舍去了后面的小数点
        System.out.println((int)-45.89f);  //结果是23,已经舍去了后面的小数点
        //所以强制转换的时候也会出现精度问题
        char c = 'a'; //在编码表里这也是一个数字
        int d = c+1;  //所以它们可以相加
        System.out.println(d); //结果是等于98
        System.out.println((char)d);  //结果是b
    }
}

注意点

  • 不能对布尔值进行转换
  • 不能把对象类型转换为不相干的类型
  • 在把高容量转换到低容量的时候,需要强制转换,反之不需要
  • 转换的时候可能存在内存溢出,或是精度问题!!!
  • 大数容易溢出!
public class Demo {
    public static void main(String[] args) {
    //JDK7新特性,数字之间可以用下划线分割
    //计算比较大的数字时,注意溢出问题
    int money = 10_0000_0000;
    int years = 20;
    int total = money*years;  //-1474836480,计算的时候已经溢出了int的最大值
    long tatal2 = money*years;  //计算的时候还是按照默认的int来进行计算,然后再转换成long所以还是出错
    long total3 = money*((long)years); //在计算的时候转换成long来计算,所以没有问题
        System.out.println(total); //结果-1474836480
        System.out.println(tatal2);  //结果-1474836480
        System.out.println(total3); //结果20000000000没问题
    }
}

变量

  1. 变量就是可以变化的量!方式:数据类型 变量名 = 值(int i = 10;)
  2. java是一种强类型语音,每个变量都必须声明其类型
  3. java变量是程序中最基本的储存单元,其要素包括变量名,变量类型和作用域

注意事项

  1. 每个变量都有类型,类型可以是基本类型(int、type…),也可以是引用类型(String)
  2. 变量名必须是合法的标识符
  3. 变量声明是一条完整的语句,因此每个声明都必须以分号结束
        // int a=1,b=2,c=3; 不建议如此定义变量,一定要程序可读性!!!最好是以下面方式定义
        int a = 1 ;
        int b = 2 ;
        int c = 3 ;
        String name = "chuck";
        char x = 'x';
        double pi = 3.14;
	//等等很多种定义变量

变量作用域

类变量
  1. 类变量必须在类的里面方法的外面设定

  2. static 数据类型 变量名 =
  3. 在方法里面调动起就比较方便一点

实例变量
  1. 实例变量必须是在类里面方法外面设定 数据类型 变量名 =值

  2. 在方法里面调动的时候需要赋予给一个局部的变量上,在去使用这个局部的变量 . 啥啥啥

  3. 变量类型 变量名字 =new 类的名字();
    
局部变量
  1. 直接在一个方法里面设定好一个变量,数据类型 变量名 = 值
  2. 但是这个变量只能在设定的方法里面使用,其他方法是无法调动使用的。
//这是一个类
public class Demo05 {
//类变量 static 以下就是一个指定好的类变量,会跟随这类一起存在一起消失
    static int salary = 2000;

//属性变量
//实例变量:从属对象,如果不设定值,就会自动为默认值
//默认值基本数字类型都是0或是0.0 u0000,布尔值是false,其他都是null(string)
    String name;
    int age;
//这是一个main方法
    public static void main(String[] args) {
        //局部变量:必须声明和初始化值
        int i = 10; //这就是一个局部的变量,只能在这个main方法中使用
        System.out.println(i);

        //以下输出一个类变量的代码
        System.out.println(salary); //正常输出2000

        //以下就是一个实例变量,也就是在方法中拿到Demo05外面的设定的变量,然后重新赋予一个新的变量名字来使用
        //变量类型 变量名字 =new Demo08();
        Demo05 gg = new Demo05(); //拿到Demo05设定好的name跟age赋予给gg一个新的变量名
        System.out.println(gg.name);  //输出name的东西,因为只设定,但是没有设定东西,所以结果是null
        System.out.println(gg.age);  //输出age的东西,因为只设定,但是没有设定东西,所以结果是0

    }
//其他方法
    public void add(){
        //在上面main方法中定义的i是无法在这个方法中调用使用的
        //定义的实例变量跟类变量都是可以在这个调用使用的
    }
}
常量
  1. 常量(constant):初始化(initialize)后不能再改变的值!不会变动的值。
  2. 所谓常量可以理解为一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变。
  3. 在设定量之前写上final
  4. 常量名一般使用大写字符。
public class Demo06 {
    //修饰符,不存在先后顺序,在基本类型前面都是修饰符
    static final double PI = 3.14;
    public static void main(String[] args) {
        System.out.println(PI);
    }
}
变量的命名规范
  1. 所有的变量、方法、类名都要见名知意,也就是说看见名字就知道是什么代码
  2. 所有的变量,除了常量,都用首字母小写和驼峰原则,例:monthSalary
  3. 常量:大写字母和下划线,例:MAX_VALUE
  4. 类名:首字母大写和驼峰原则,例:GoodMan
  5. 方法名:首字母小写和驼峰原则,例:runRun()

运算符

  1. 算术运算符:+ - * / %(取余也叫模运算) ++ –
  2. 赋值运算符:=
  3. 关系运算符:> < >= <= == !=
  4. 逻辑运算符:&& || !(与或非)
  5. 位运算符:& | ∧ ~ >> << >>>
  6. 条件运算符: ? :
  7. 扩展赋值运算符:+= -= *= /=
public class Demo01 {
    //二次元运算符
    public static void main(String[] args) {
        //ctrl + D 复制当前行到下一行
        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((double)a/b); //因为除出来是个带小数点的数,所以需要转化为douuble!!!
        
        
        //按照优先级来输出类型,如果结果有小数点必须转换其中一个为double或是float
       long a = 1321564613213554L;
       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但是答案却是错的,没有小数点的
        System.out.println(c/(double)d);  //输出的是double答案是正确的
        
        
        //关系运算符返回结果:正确或是错误  布尔值
        int a = 10;
        int b = 20;
        int c = 21;
        System.out.println(a>b); //false
        System.out.println(a<b);  //true
        System.out.println(a==b);  //false
        System.out.println(a!=b);  //true
        System.out.println(c%b); //会得出结果是1,21/20 整除剩下1,也叫模运算
    }
}

++ –

  1. ++就是自增的意思,–就是自减的意思,一元运算符
public class Demo01 {
    public static void main(String[] args) {
        //++ 就是自增 -- 就是自减 一元运算符
        int a = 3; //原本a=3
        int b = a++; //先把a=3赋予给b,然后a+1=4 (先赋予b在加1)
        int c = ++a; //再把(a=4)+1=5赋予给c  (先加1再赋予c)
        System.out.println(a);  //结果是5
        System.out.println(b);  //结果是3
        System.out.println(c);  //结果是5

        //幂运算2^3  2*2*2 = 8 java没有这个写法
        //会使用Math这个工具类来进行运算
        double pow = Math.pow(3,2);
        System.out.println(pow); //结果9
    }
}

逻辑运算符&& || !(与、或、非)

  1. && 是与(and),如果两个变量都为真,结果为true,否则为false
  2. ||是或(or),如果两个变量有一个为真,那么结果为true,否则为false
  3. !是非(取反),如果是的true的,则变为false,如果是false的,则变为true
  4. 短路运算,一旦计算出来前面是不满足条件的时候,就不会继续运算下面的了
public class Demo01 {
    public static void main(String[] args) {
        //逻辑运算符
        // && 与(and)   || 或(or)   !非(取反)
        boolean a = true;
        boolean b = false;
        System.out.println("a&&b:"+(a&&b)); //逻辑与运算:两个变量都为真,结果才为true
        System.out.println("a||b:"+(a||b)); //逻辑或运算:两个变量有一个为真,则结果才为true
        System.out.println("!(a&&b):"+!(a&&b)); //如果是真的,则变为假,如果假的,则变为真

        //短路运算
        int c = 5;
        boolean d = (c<4)&&(c++<4);
        System.out.println(d);//结果false,结果没有问题
        System.out.println(c);//结果5,因为得知前面(c<4)是false,所以直接不运行后面(c++<4),所以c还是=5 
    }
}

位运算符:& | ∧ ~ >> << >>>

  1. & 与,两个二进制数进行比对,如果两个都为1结果为1,否则为0

  2. | 或,两个二进制数进行比对,如果两个都为0结果为0,否则都为1

  3. ^,两个二进制数进行比对,如果两个相同结果为0,否则为1
  4. ~ 非,把~的二进制数给相反过来,0结果就是1,1结果就是0

  5. 〉〉右移,把十进制数相对应的二进制数右移,再编译成十进制数输出,也就是/2

  6. 〈〈 左移,把十进制数相对应的二进制数左移,再编译成十进制数输出,也就是*2

  7. 如果做乘除2的时候,可以用位运算来进行,速度快!只有乘除2!!!

public class Demo01 {
    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
        A^B = 0011 0011 位数对比相同结果为0,否则为1
        ~B = 1111 0010 把B的结果给反过来,1就是0,0就是1


        运算题2*8怎么最快运算?  正常运算为2*2*2*2,但是慢,所以使用<<位运算
        <<  =  *2
        >>  =  /2
        0000 0000         0
        0000 0001         1
        0000 0010         2        二进制的时候2的1是在右边两位
        0000 0011         3
        0000 0100         4
        0000 1000         8
        0001 0000         16       二进制的时候16的1却在左边五位

         */
        System.out.println(2<<3);  //结果16

    }
}

条件运算符: ? :(三元运算符)

  1. ?:这是一个组合式使用的运算符,相等于if的使用,使用方式是:条件 ? 结果1 : 结果2 (如果符合条件输出结果1,否则输出结果2)这是一个偷懒使用的运算符,但是也必须掌握,代码要精简易读
public class Demo01 {
    public static void main(String[] args) {
        // x ? y : z
        //如果x==true,则结果为y,否则结果为z
        int score = 60;
        int score2 = 50;
        String type = score<60 ? "不及格" : "及格"; 
        String type2 = score2<60 ? "不及格" : "及格";
        System.out.println(type); //结果及格
        System.out.println(type2); //结果不及格
    }
}

扩展赋值运算符:+= -= *= /=(偷懒运算符,不建议使用)

  1. a+=b,意思是a = a + b
  2. a-=b,意思是a = a - b
  3. a*=b,意思是a = a * b
  4. a/=b,意思是a = a / b

字符串连接注意事项

  1. String在+前面,则后面不会运算,都统一默认为String类型
  2. String在后面,则前面的+都会正常的运算,再加String类型
public class Demo01 {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        System.out.println("w"+a+b);//结果w1020,只要前面有String类型的后面的a跟b都会变成String类型的相加
        System.out.println(a+b+"w");//结果30W,String如果是在后面,前面则会正常的运算在加上String类型
    }
}

包机制

  1. 为了更好的组织类,java提供了包机制,用于区别类名的命名空间
  2. 包语言的语法格式为:package pkg1[.pkg2[.pkg3…]];
  3. **一般利用公司域名倒置作为包名
  4. 为了能够使用某个包的成员,我们需要在java程序中明确导入该包。使用“import”语句可以完成此功能
import package1[.package2...].(classname|*);

JavaDoc

  1. JavaDoc命令是用来生成自己的API文档的
  2. 参数信息
    • @author 作者名
    • @version 版本号
    • @since 指明需要最早使用的JDK版本
    • @param 参数名
    • @return 返回值情况
    • @throws 异常抛出情况
  3. DOC命令输入:javadoc -encoding UTF-8 -charset UTF-8 文件名
  4. 使用IDEA生产JavaDoc(百度搜索即可)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值