狂神说Java(零基础) 基础部分

1.注释、标识符、关键字

1.1 注释

​平时我们编写代码,在代码量比较少时,我们还可以看懂自己写的,但是当项目结构一旦复杂起来,我们就需要用到注释了。注释并不会被执行,是给我们写代码的人看的。书写注释是一个非常好的习惯,平时写代码就一定要注意规范。

Java中的注释有三种:

  • 单行注释://后跟文字,只能写单行

    //输出一个Hello,World!
    
  • 多行注释:/* 中间写文字,可写好几行 */

    /*中间写注释,可写几行
    我是多行注释
    我是多行注释
     */
    
  • 文档注释:/** 中间写文字 */

    /**
     * @Description HelloWorld
     * @Author 狂神说Java
     */
    

1.2 标识符、关键字

Java关键字

  • Java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。标识符注意点如下:

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

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

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

    • 标识符是大小写敏感的,比如Man和man指代不同。

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

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

    • 可以使用中文命名,但一般建议使用英文

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

2.数据类型

2.1 Java数据类型

  • 强类型语言。Java是一种强类型语言,要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用。强类型语言特点:安全性高,但速度慢。

  • 弱类型语言。例:VB、JavaScript

  • Java的数据类型分为两大类(图片来自CSDN,点这里跳转出处)

    • 基本类型(primitive type)
    • 引用类型(reference type)

Java数据类型

//八大基本数据类型

//整数
int num1 = 10;	//最常用,int占4个字节范围:-2147483648-2147483647
byte num2 = 20;	//byte占1个字节范围:-128~127
short num3 = 30; //short占2个字节范围:-32768~32767
long num4 = 30L; 
//Long类型要在数字后面加个L,占8个字节范围:-9223372036854775808~9223372036854775807


//小数:浮点数
float num5 = 50.1F;	//float类型要在数字后面加个F
double num6 = 3.1415926;

//字符
char name='请';	//字符是一个字,写'请客'会报错
String namea = '请客';	//字符串,String不是关键词,是类

//布尔值,占1位,只有True和False两个值
boolean flag = true;
boolean flag2 = False;

2.2 什么是字节

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

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

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

    转换关系:

    • 1bit表示1位

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

    • 1024B=1KB

    • 1024KB=1M

    • 1024M=1G

  • 电脑的32位和64位的区别是什么?

​首先,它们支持的内存不同,32位的操作系统最多支持4G的内存,但是64位系统支持可以支持4G、8G、16G、32G、 64G、128G、256G等。其次,它们支持的处理器不同,64位的操作系统支持64位和32位的处理器,而32位的系统却不能完全支持64位的处理器。另外,它们支持的软件不同,64位系统支持32位和64位软件,32位系统仅支持32位软件。不仅如此,32系统和64位系统处理数据的能力也不一样,理论上64位的系统会比32位快1倍。并且在系统体积方面,64位系统比32位系统大得多。

​原文出自:点这里跳转.

3.数据类型扩展

3.1 浮点数拓展

//二进制:0b;八进制:0;十进制;十六进制:0x
int i = 10;	   //十进制
int i2 = 010;  //八进制
int i3 = 0x10; //十六进制,0-9,A-F

/*
i = 10;
i2 = 8;
i3 = 16
*/

思考:银行业务用什么表示?可不可以使用double、float?

float f = 0.1f;	//0.1
double d = 1.0/10;  //0.1
System.out.println(f==d);
System.out.println(f);
System.out.println(d);

/*
输出结果:
False
0.1
0.1
*/
float d1=23131312312312313f;
float d2 =d1 + 1;

System.out.println(d1==d2);
//输出结果:True

所以,答案是不可以。因为浮点数存在舍入误差,会导致接近但不等于的情况,最好完全避免使用浮点数进行比较。银行业务一般使用 BigDecimal 数学工具类。

3.2 字符扩展

char c1 = 'A';
char c2 = '中';

System.out.println(c1);
System.out.println((int)c1);
system.out.println(c2);
System.out.println((int)c2);

/*
输出结果:
A
65
中
20013
*/

所有字符本质上还是数字。如常用的Unicode编码。每个数字有对应的字符。

char c3='\u0061';
System.out.println(c3);

/*
输出结果:
a
*/
/*转义字符

\t	制表符
\n   换行
……
*/

以下代码的结果要从内存分析:

        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);

/*
输出结果:
false
true
*/

3.1 布尔值扩展

boolean flag = true;

/*以下两者等价:
Less is More!
代码要精简易读
*/

if (flag==ture){}
if (flag){}

4.类型转换

  • 由于Java是强类型语言,所以要进行有些运算的时候,需要用到类型转换。小数的优先级一定高于整数。
/*

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

*/
        int i=128;
        byte b = (byte)i;  

        System.out.println(i);
        System.out.println(b);

/*
输出结果:
128
-128
*/

存在的问题:内存溢出。因为byte最高到127,而i=128.

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

    • 强制类型转换

      • 格式:(类型)变量名
      • 高-->低。例如从double转换为int
    • 自动类型转换

      • 低-->高。例如从int转换为double
  • 注意点:

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

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

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

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

              System.out.println((int)23.7);
              System.out.println((int)-45.89f);
      
      /*
      输出结果:
      23
      -45
      */
      
              char c = 'a';
              int d = c+1;
              System.out.println(d);
              System.out.println((char)d);
      /*
      输出结果:
      98
      b
      */
      
      	    //操作比较大的数的时候,注意溢出问题
              //JDK7新特性,数字之间可以用下划线分割
              int money = 10_0000_0000;
              int years = 20;
      
              int total = money*years;
              System.out.println(total);
              
              long total2 = money*years;
              System.out.println(total2);
              
              long total3 = money*((long)years);
              System.out.println(total3);
      /*
      输出结果:
      -1474836480
      -1474836480
      20000000000
      */
      

思考:为什么用long也不行?

因为money和years都是int,先做了money*years的计算,得到的仍然是int:-1474836480,然后再转换为long,自然还是得到了-1474836480.所以说,转换之前已经存在问题了.

解决办法:先把一个数转换为long

注意:小写的字母l易和数字1混淆,尽量用大写的L

5.变量、常量

5.1 变量

  • 变量是什么:就是可以变化的量。Java是一种强类型语言,每个变量都必须声明其类型。Java变量是程序中最基本的存储单元,其要素包括变量名、变量类型和作用域

    type varName [=value] [{,varName[=value]}];
    //数据类型 变量名 = 值;可以使用逗号隔开来声明多个同类型变量
    
    int a,b,c;
    int a=1,b=2,c=3;
    //可以这么写,但不建议
    
    //最好分开来写,注重程序可读性
    int a = 1;
    int b = 2;
    int c = 3;
    
  • 变量作用域:类变量、实例变量、局部变量

    public class Variable{
        static int allClicks=0; //类变量
        String str="hello world"; //实例变量
        public void method(){
            int i = 0; //局部变量
        }
    }
    
    public class Hello {
    
        //类变量 static
        static double salary = 2500;
    
    
        //实例变量:从属于对象;如果不自行初始化,就会输出默认值
        //所有的数值类型,默认为0或0.0
        //布尔值:默认是false
        //除了基本类型,其余的默认值都是null
        String name;
        int age;
        
        //main方法
        public static void main(String[] args) {
            //局部变量:必须声明和初始化值
            int i = 10;
            System.out.println(i);
    
            Hello Hello= new Hello();
            System.out.println(Hello.age);
        }
    
    
        //其他方法
        public void add(){
            
        }
        
    }
    
    
  • 注意事项:

    • 每个变量都有类型,类型可以是基本类型,也可以是引用类型。
    • 变量名必须是合法的标识符
    • 变量声明是一条完整的语句,因此每一个声明都必须以分号结束
  • 变量的命名规范:

    • 所有变量、方法、类名:见名知意
    • 类成员变量:首字母小写和驼峰原则:monthSalary;除了第一个单词以外,后面的单词首字母大写:lastname ----> lastName
    • 局部变量:首字母小写和驼峰原则
    • 常量:大写字母和下划线:MAX_VALUE
    • 类名:首字母大写和驼峰原则:Man,GoodMan
    • 方法名:首字母小写和驼峰原则:run(),runRun()

5.2 常量

  • 常量(Constant):初始化(initialize)后不能再改变值。即不会变动的值。所谓常量可以理解成一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变。

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

    public class Hello {
        final static double PI = 3.14;
        //static final double PI = 3.14;
        //static是修饰符,不存在先后顺序
        
        public static void main(String[] args) {
            System.out.println(PI);
        }
    }
    

6.运算符

  • Java语言支持如下运算符:

    • 算术运算符:+,-,*,/,%(取余,模运算),++,--
    • 赋值运算符:= (a=10,念作把10赋值给a)
    • 关系运算符:>,<,>=,<=,==(等于),!=instanceof (不等于)
    • 逻辑运算符:&&(与),||(或),!(非)
    • 位运算符:&,|,^,~,>>,<<,>>>
    • 条件运算符: ?:
    • 扩展赋值运算符:+=,-=,*=,/=
  • Ctrl+D:复制当前行到下一行

    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);
            /*
            System.out.println(a/b);
            会导致输出结果为0,因为a/b的结果为0.5,但a和b均为int,结果也应为int,四舍五入得0
             */
            
        }
    }
    
    
    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
    
            //因为不同类型混合运算无论是赋值还是运算都是向最高位转
        }
    }
    
    
    package operator;
    
    public class Demo03 {
        public static void main(String[] args) {
            //关系运算符返回的结果:正确,错误 布尔值
            int a = 10;
            int b = 20;
            int c = 22;
    
            //取余,模运算
            System.out.println(c%a);
    
            System.out.println(a>b);
            System.out.println(a<b);
            System.out.println(a==b);
            System.out.println(a!=b);
        }
    }
    
    
    package operator;
    
    public class Demo04 {
        public static void main(String[] args) {
            //++   --    自增,自减    一元运算符
            int a = 3;
    
            int b = a++;
            //a++  a = a+1
            System.out.println(b);
            System.out.println(a);
            /*输出结果:
            3
            4
             */
            //说明b = a++是先给b赋值,a再自增
    
            int c = ++a;
            System.out.println(c);
            System.out.println(a);
            //++a   a = a+1
            /*
            输出结果:
            5
            5
             */
            //说明b = ++a是a先自增,再给b赋值
            
    
            //幂运算 2^3 = 2*2*2 = 8,但是Java中用Math来进行幂运算
            //很多运算,我们会使用一些工具类来操作
            double pow = Math.pow(2,3);
            System.out.println(pow);
        }
    }
    
    
    package operator;
    
    //逻辑运算符
    public class Demo05 {
        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));  
            //如果是真,则变为假,如果是假则变为真
    
            /*
            短路运算:假设前面是错的,就不执行后面的了。
            如下代码,若执行了后面的,则c++=6,但是输出c时仍为5,
            */
            
            int c = 5;
            boolean d = (c<4)&&(c++<4);
            System.out.println(d);
            System.out.println(c);
        }
    }
    
    /*
    输出结果:
    a && b: false
    a || b: true
    !(a && b): true
    false
    5
    */
    
    package operator;
    
    public class Demo06 {
        /*
        A = 0011 1100
        B = 0000 1101
    
        A&B = 0000 1100    上下对应,上下均为1该位才能取1,只要有一个为0或者全部为0就取0
        A|B = 0011 1101    上下对应,上下只要有一位为1就取1,否则均为0才能取0
        A^B = 0011 0001    上下对应,上下相同取0,上下不相同取1
        ~B  = 1111 0010    B取反
         */
    
        /*
        2*8 = 16怎么算最快?
        <<  左移
        >>  右移
        箭头往哪指,就是往哪移
    
        << 左移过程(左移相当于乘2,则右移相当于除以2):
        0000 0000      0
        0000 0001      1
        0000 0010      2
        0000 0100      4
        0000 1000      8
        0001 0000      16
         */
        
        public static void main(String[] args) {
            System.out.println(2<<3);
        }
    }
    
    /*
    输出结果:
    16
    */
    
    package operator;
    
    public class Demo07 {
        public static void main(String[] args) {
            int a = 10;
            int b = 20;
    
            /*
            a+=b;
            a-=b;
            可以这么写,但不建议这样
            */
    
            System.out.println(a);
            System.out.println(a+b);
    
            //+:字符串连接符
            //当连接时只要前面有一个为字符串类型,就会把其他的都转换为字符串再连接
            System.out.println(""+a+b);
    
            /*当连接时这个为字符串的类型在后面时:
            前面的不受影响不会变为字符串,在字符串后面的会受影响*/
            System.out.println(a+b+"");
    
        }
    }
    
    /*
    输出结果:
    10
    30
    1020
    30
    */
    
    package operator;
    
    //三元运算符
    public class Demo08 {
        public static void main(String[] args) {
            //x ? y : z
            //如果x==true,则结果为y,否则结果为z
            //必须掌握
    
            int score = 80;
            String type = score <60 ? "不及格" : "及格";
            System.out.println(type);
        }
    }
    
    /*
    输出结果:
    及格
    */
    
  • Java运算符优先级(我就不复制粘贴了):点这里跳转

7.包机制、JavaDoc

7.1 包机制

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

  • 包就相当于一个文件夹

  • 包语句的语法格式为:

    package pkg1[.pkg2[pkg3…]];
    
  • 一般利用公司域名倒置作为包名

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

    import package1[.package2…].(classname|*)
    
  • 可以去搜一下《阿里巴巴开发手册》

7.2 JavaDoc

  • 可以去搜一下JDK帮助文档

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

  • 参数信息

    • @author 作者名
    • @version 版本号
    • @since 指明需要最早使用的jdk版本
    • @param 参数名
    • @return 返回值情况
    • @throws 异常抛出情况
  • package com.kuang.base;
    
    /**
     * @author :Kuangshen
     * @version :1.0
     * @since:1.8
     */
    public class Doc {
        String name;
    
        /**
         * @author
         * @param name
         * @return
         * @throws Exception
         */
        public String test(String name) throws Exception{
            return name;
        }
    
    
  • 右键Doc文件(就是上述代码保存后的文件),选择Open in Explorer,在文件夹中打开,在该文件夹地址前输入cmd并空格后回车,在cmd中输入:

    javadoc -encoding UTF-8 -charset UTF-8 Doc.java
    

生成doc文档

会发现在原文件中多了很多东西:

生成文档

点击index.html,可以查看生成的东西,当然,现在里面内容基本上是空的。

posted @ 2023-01-04 15:56  新世纪的风  阅读(175)  评论(0)    收藏  举报