1—Java基础

一:java语言简介

  1. java是SUN公司95年推出的面向Internet的高级编程语言。它简单易学,完全面向对象,安全可靠,并且跨平台。
  2. JVM:java虚拟机。
    虚拟机主要负责和计算机底层操作系统交互。
    java语言要经过虚拟机翻译给底层系统,同时可以接收底层系统的反馈。
    不同的计算机系统要有不同的虚拟机。虚拟机就是java和操作系统的翻译官。
  3. JRE:java运行环境。
    包含JVM和Java程序所需的核心类库。
    计算机安装JRE就可以运行Java程序。
  4. JDK:Java Development Kit—-java开发工具包。
    是给Java开发人员使用的。包含Java开发工具,也包括JRE。
    JDK负责开发程序,JRE负责运行程序。

二:计算机知识与工具配置

  1. DOS下命令:
任意目录下,dir列示其中的文件夹和文件,自然顺序排列,文件不标识< DIR> ,不显示字节数。
        目录下创建文件夹:md abc 。
        目录下删除文件夹:rd abc 。
        目录下进入下级文件夹:cd abc 。进入多级文件夹用 cd abc/bc 。
        目录下进入上级文件夹:cd.. 。一次退一级。
        进入根目录:cd\ 。
        目录下创建带内容的文件:echo HHHHHH>123.txt 。创建123.txt文件,内容是HHHHHH。
        目录下删除文件:del 123.txt 。
        删除有内容的文件夹:不可以用 rd abc ,会提示目录不是空的。先用 del abc ,弹出确认命令,确认后再 rd abc 。
        删除指定类型文件:del *.txt 。
        退出DOS:exit。
  1. 对于初次安装JDK的计算机,想要执行Java程序,需要配置”环境变量”以便全局使用Java工具。
    最好在“环境变量”中把JDK工具的路径 包装成变量,添加进系统环境变量:path,以%Name%形式。
  2. 配置好了环境变量path后,就可以在任意目录下使用JDK工具了。 当然也可以临时设置环境变量:set path=[address]
    如果是想要在已有环境变量基础上添加一个环境变量,就用set path=[dir];%path%
    注意:临时环境变量只在当前窗口或者沿袭此窗口的DOS窗口有效。
    设置path查找的顺序是先在当前路径下查找,没找到再去path中找。 path的作用:保证javac命令可以在任意目录下运行。
  3. 如果要运行拷贝过来的class文件,在本机就要设置临时的类路径。set classpath=[dir]
    代表只在指定目录下查找类文件。 set
    classpath=[dir]; 加分号代表会先在指定目录下查找,再在当前目录下查找,一般不这样设置。 set
    classpath=c:\;d:\ 配置多路径。 set
    classpath=.;d:\ 点指的是当前路径。这个就是把set classpath=d:\; 查找的顺序给倒过来。
    set classpath= 清空classpath。
    classpath的作用:保证拷贝的类文件能运行。

三:java书写格式

//hello world 小程序为例

class Demo
    {
        public static void main(String [] args)
        {
            System.out.println("Hello World!");
        }
    }
  1. 写程序时容易出现的问题:
    java文件和类文件扩展名可能被隐藏。
    关键字大小及书写正误写问题。
    标点符号和中英文标点问题。
    括号匹配问题。
    程序编译与执行用的工具问题。
  2. java名称规范:
    包名: xxxyyyzzz 小小小小
    类、接口名: XxxYyyZzz 大小大小
    变量、函数名: xxxYyyZzz 小小大小
    常量名: XXX_YYY_ZZZ 大大下大大
  3. 标识符:
    标识符必须以字母或者”$”,”_”开头。
    标识符也要区分大小写,myName和MyName是两个不同标识符。
    标识符不宜太长,达意即可。
  4. 关键字:
    系统声明的具有专门意义或用途的标识符就是关键字。
    关键字不作为一般标识符使用,且一律小写表示。
    Java有50个关键字:
    表示数据类型: byte short int long char float double boolean true false , new null void instanceof
    表示语句:if else for do while switch break continue return case default , super this , throw try catch finally
    用于修饰:public protected private static final abstract native , synchronized transient volatile
    方法,类,接口,包:class interface extends implements import package throws
    保留关键字:const goto
  5. 变量:
    在程序运行中值可变的量,用来记录运算的中间结果或保存数据。
    变量分为局部变量和成员变量,按作用域不同划分。成员变量作用于整个类,局部变量作用于方法或代码段中。
  6. 常量:
    在整个程序运行中值都不变的量。
    常量名要符合名称规范,一旦初始化就不能改变。

2—Java基本数据类型

一:数据类型

  1. 基本数据类型和引用数据类型
    引用数据类型有类(class)、接口(interface)、数组。
    基础数据类型:
  2. java 部门 java部门介绍_数据

  3. 基本数据类型对象包装类:
    对象包装类中包装了一个基本类型的值,这样就可以在类中提供方法对基本数据类型进行操作。 比如,基本数据类型对象包装类中提供了字段方法获得数据类型的最值和bit位数。
  4. 基本数据类型转为基本数据类型对象包装类的好处:
    基本数据类型对象包装类最常见的作用就是用于基本数据类型和字符串类型之间的转换。
    另外对象包装类中有许多对基本数据的操作方法和转换方法,直接调用就可以对基本数据操作。 还有一些新特性,如自动拆箱装箱功能。
Integer x=4;    //这一句其实是在新建一个对象,等同于Integer x=new Integer(4);这里自动装箱了。
    x=x+2;          //这里的x是一个对象引用,但是这里x有一个自动拆箱操作,x变成了int整数4.运算后,将结果又装箱成了对象。

    Integer x=128;
    Integer y=128;
    boolean bool=(x==y);   //bool为假。对象的地址不一样。

    Integer x=127;
    Integer y=127;
    boolean bool=(x==y);    
      //bool 为真。对于包装类的新特性,当数值在 byte 范围内时,如果数值已经在内存中存在,就不再开辟空间,直接指向原有对象。

二:整形数据

  1. 整形数据有byte、short、int、long四种。
    他们的对象包装类分别是 Byte Short Integer Long .
    可以通过对象包装类取得基本数据的最值,如:
    Integer.MAX_VALUE 值为2147483647
    Byte.MIN_VALUE 值为-128
    Long.SIZE 值为int型64.
    这四种类型都是一样的字段方法。
  2. 对象包装类中还提供了其他的常用方法:
    Byte :
b.equals(Object oo)     比较两对象是否相等,类型和内容都相等返回true。
    b.intValue()            返回 byte b的int型表示形式。
    Byte.parseByte(String s)返回字符串s的 byte 表示形式。
    Byte.toString()         返回 byte 值的字符串表示形式。

Short :

shortNum.equals(Object oo)  比较两对象是否相等,类型和内容都相等返回true。
    shortNum.intValue()         返回 short s的int型表示形式。
    Short.parseShort(String s)  返回字符串s的 short 表示形式。
    Short.toString()            返回 short 值的字符串表示形式。

Integer :

i.equals(Object oo)                 比较两对象是否相等,类型和内容都相等返回true。
    i.intValue()                        返回 int n的int型表示形式。
    Integer.parseInt(String s)          返回字符串s的 int 表示形式。
    Integer.parseInt(String s,int radix)返回s的基数为radix的进制形式整数。
    Integer.toBinaryString(int i)       返回 i 的二进制表示形式字符串。
    Integer.toOctalString(int i)        返回 i 的八进制表示形式字符串。
    Integer.toHexString(int i)          返回 i 的十六进制表示形式字符串。
    Integer.toString()                  返回 int 值的字符串表示形式。

Long :

l.equals(Object oo)         比较两对象是否相等,类型和内容都相等返回true。
    l.intValue()                返回 long l的int型表示形式。
    Long.parseLong(String s)    返回字符串s的 long 表示形式。
    Long.toBinaryString(long x) 返回 x 的二进制表示形式字符串。
    Long.toOctalString(long x)  返回 x 的八进制表示形式字符串。
    Long.toHexString(long x)    返回 x 的十六进制表示形式字符串。
    Long.toString()             返回 long 值的字符串表示形式。
  1. 介绍一下负数,以byte类型的整数和int类型的整数为例:
    byte类型,取值范围是-128~127 。
    byte 0 : 0000-0000;
    byte 1 : 0000-0001;
    byte 127: 0111-1111;
    计算 127+1
0 1 1 1-1 1 1 1
         +0 0 0 0-0 0 0 1
        ------------------
          1 0 0 0-0 0 0 0   //值为-128

在八位表示一个字节的byte类型整数中,按大小排列就是:0~127 ++ -128~ -1;

byte x=126;
            x+=2;

int类型也是一样。
int类型的取值范围是-214748368~2147483647;
0的表示形式:
0000-0000 0000-0000 0000-0000 0000-0000
2147483647的表示:
0111-1111 1111-1111 1111-1111 1111-1111
-2147483648的表示:
1000-0000 0000-0000 0000-0000 0000-0000
-1的表示:
1111-1111 1111-1111 1111-1111 1111-1111
从进制的角度讲,最大的正数+1,就是最小的负数,二进制的最大int型整数也是-1;
对于其他类型的整数也是这个特点。只是所占的空间和预分配的长度不同。但负数的最高位都为 1.
什么类型的整数都有一个规律:二进制的最小数是 0,最大数是 -1;

三:浮点型数据

  1. 浮点型数据必须有小数点。小数位越多,表示的越精确。
    浮点型数据有 float double 两种。
    对应的对象包装类是 Float Double 。
    同样的,可以通过对象包装取得最值。
    Float.MAX_VALUE float 类型的最大正有限值的常量。
    Float.POSITIVE_INFINITY float 类型的负无穷大值的常量。
    Float.NEGATIVE_INFINITY float 类型的正无穷大值的常量。
    Float.NaN float 类型的非数字 (NaN) 值的常量。
Double.MIN_VALUE                Double 的最小正非零值的常量 .
Double.POSITIVE_INFINITY        返回 -Infinity
Double.NEGATIVE_INFINITY        返回 Infinity
Double.NaN                      返回NaN
  1. 对象包装的其他常用方法:
    Float :
f.compareTo(Float ff)           比较两个Float表示的数值。
f.equals(Object oo)             比较两个对象的数值。
f.intValue()                    将此 Float 值以 int 形式返回(强制转换为 int 类型)。
Float.parseFloat(String s)      将s转成 float 。
Float.toString()                返回此 Float 对象的字符串表示形式。 
----注意:Float 包装类只有 Float.toHexString (f)方法。没有toBinary和toOctal。

Double :

d.compareTo(Double dd)      比较两个Double表示的数值。
d.equals(Object oo)         比较两个对象的数值。
d.intValue()                将此 Double 值以 int 形式返回(强制转换为 int 类型)。
Double.parseDouble(String s) 将s转成 double 。
Double.toString()           返回此 Double 对象的字符串表示形式。
Double 包装类也只有 Double.toHexString (f)方法。没有toBinary和toOctal。

四:字符型数据

  1. 字符变量:char。
    char可以自动提升转成 int 型。
char ch='0';
        int a=ch+0;   //'0' 转成整数是48,9 用47表示。
        char ch='A';
        int a=ch+0;   //'A' 转成整数是65,z用90表示。
        char ch='a';
        int a=ch+0;   //'a' 转成整数是97,Z 用122表示。

一个整数也可以转成char类型。

char ch=(char)58;//58-64表示的是  :  ;  <  =  >  ?  @  。
                        //3,4,5,6对应扑克牌中的红心,方块,梅花,黑桃。
                        //11,12: 男女标志。

char 类型对象包装类是 Character 。

  1. 常用方法:
    c.compareTo(char ch) 比较两个char表示的字符值。
    c.equals(Object oo) 比较两个对象的字符值。
    c.toString() 转成字符串。

五:布尔型数据

  1. 布尔数据只有true 和false 两个,它不对应任何数值,不能与数字相互转换,用于逻辑判断。
    布尔型数据在内存中只占用1bit,默认值是false。
  2. 常用方法:
    b.compareTo(Boolean b) 比较两个布尔值。
    b.equals(Object oo) 比较b与对象是否相等
    b.toString() 布尔值转成字符串表示形式
    Boolean.toString(Boolean b) 布尔表示成字符串

六:数据之间的转换

  1. 类型自动提升。
    不同类型的数据一起运算时,运算的结果由位数多的类型决定。
byte b=2;
b+=3;       //加赋值不涉及类型自动转换的问题
b=b+4;
----4 是int类型,int类型位数32位,大于byte类型。所以运算结果是32位的int型。

数据类型自动提升的优先级:(从下往上提升。)

: double
: float
: long
: int
: byte  short  char 
注意:有字符串时,字符串会相连。
  1. 类型强制转换。
    类型自动转换是系统自动完成的,如果需要向更低类型转换,需要强制转换。
    形如:
int x=15;
    byte b=(byte)x; //括号注明要转换的类型。

强制转换是将位数长的数据舍弃前端的部分数据,容易丢失数据。
//举例:

class Zhuan
{
    public static void main(String[] args)
    {
        float x=2.3f;       //小数2.3默认是double双精度型小数,赋于浮点型2.3要加f,表示浮点型小数2.3。f前面不能带空格。     
        byte a=3;           //定义一个byte单字节类型整数3.
        a+=2;               //对a加赋值2.加赋值不考虑2的类型。不能写a=a+2,因为byte a和int 2类型不同。
        a=byte (a+2);       //a+2是int型,然后用byte转换类型。
        System.out.println("5+5="+5+5);  //字符串先和一个5连接,得字符串,再连接一个5仍是字符串。5+5=55.
        System.out.println("5+5="+(5+5));//用括号改变运算优先级,得字符串5+5=10.
    }
}

七:进制转换

  1. 十进制转其他进制。
System.out.println(Integer.toBinaryString(1234));   //打印的是整数1234的二进制(字符串表示)。
System.out.println(Integer.toOctalString(1234));        //打印的是整数1234的二进制(字符串表示)。
System.out.println(Integer.toHexString(1234));      //打印的是整数1234的二进制(字符串表示)。
  1. 其他进制转十进制。
System.out.println(0x1234);     //输出十六进制1234的十进制值:4660。整数前加"0x"表示是十六进制数。
System.out.println(01234);      //输出八进制1234的十进制值:668。   整数前加'0'是表示八进制数。
  1. 提取字符串的有效字符,并转成进制整数。
int x=Integer.parseInt("11101",2);  //将字符串的有效位"11101"转成2进制整数。29
int y=Integer.parseInt("001234",8); //将字符串的有效位"1234"转成8进制整数。668

3—运算符和表达式

一:算数运算符

  1. 一元算术运算符:+ , - , (代表取值正负) ++ , – ,(自增或自减)
    涉及的操作数只有一个,如:
-x
    x++
  1. 二元算术运算符:+ , - , * , / , %
    涉及的操作数有两个,如:
x+y
    x/y

‘+’如果是和字符串在一起,只表示连接。
— — 在有字符串参与的运算中,当顺序执行到字符串时,才开始以字符串形式运算,字符串还没参与运算时,以正常运算执行。

3+4+"x"     //先执行整数运算3+4,再连接字符串,结果是:7x
    3+"x"+4     //第一次运算就有字符串参与,结果是:3x4

二元运算涉及到类型自动提升问题。

  1. 算术运算符优先级:先运算乘除,再运算加减,同级运算符按顺序运算。

二:关系运算符与表达式

  1. 用于比较两个操作数之间的关系。
    操作结果是布尔型
    运算符:> , >= , < , <= , == , !=

三:位运算和逻辑运算

  1. 位运算符:
    与: & 仅当整数的二进制对应位上的数字都是 1 时,该位才是 1 。
    或: | 二进制数对应位上数字有一个为 1 ,时,该位就是 1 。
    异或: ^ 两个数字不同,该位就是 1 。
    与 、或 、非 释义。
10110011       10110011        10110011
  &  11011010    |  11011010     ^  11011010
    ——————————     ——————————     ——————————
     10010010       11111011        01101001
    //都是1、取1    有一个1、取1       相异、取1

取反: ~ 把每位上的数字改变。0 变 1 , 1 变 0 。结果相加等于 -1 。
右移: >> 二进制数字组向右移动,前面补上最高位上的数,后面舍弃。
左移: << 二进制数字组向左移动,前面舍弃,后面补 0 。
无符号右移: >>> 数字组向右移动,前面补 0 ,后面舍弃。这样可以移到值为 0 。

12>>2   1100>>2   0011    =3   相当于12/2/2.
同理,3<<2   0011<<2   1100    =12  相当于3*2*2.

知识点:
一个整数异或同一个数两次,仍然是原来的数。
一般的加密用这方法。如果不知道异或的那个数,就不能得到原值,不能解密。

//调换两个整数的值。
    int m=9,n=21;
    m=m^n;
    n=m^n;      //可看成   n=(m^n)^n=m.
    m=m^n;      //可看成   m=m^(m^n)=n.

反码的理解:
0011010 ,反码是 1100101 ,就是把每位上的数由 0变 1 , 1 变 0 。
例如, 5 的反码是-6 。 -2 的反码是 1 。
所以可以总结为:
一个数和它的反码的和是 -1 ,并在数轴上关于-0.5对称。

  1. 逻辑运算符:(结果是布尔型)
    逻辑与: && //当两边都是true,结果才是true。
    逻辑或: || //有一边为true,结果就是true。
    逻辑非: ! //两边不一样,结果就是true。
    —-逻辑运算符有短路问题。
    比如 3<2 && 2<3 , 前面判断结果是 false ,后面结果无论是什么,整个表达式结果都是 false ,所以就不再判断,直接跳过。
    写程序时最好用逻辑运算符判断,可以减少执行次数。
    —-关系运算符和逻辑运算符优先级
    ! > “>,>=,<,<=” > “==,!=” > && > || 。

四:赋值运算符

=: 把右边表达式的值赋给左边变量。
+=: 加赋值。x+=y 相当于 x=x+y;
-=: 减赋值。
*=: 乘赋值。
/=: 除赋值。
%=: 余赋值。x%=y 相当于 x=x%y;
还有 &=  ,  |=  ,  ^=  ,  >>=  ,  <<=  ,  >>>=

五:三元运算符

形式:

boolean ? exp-true : exp-false;

该运算符作用是判断一个表达式是真还是假,如果是真,就执行冒号左边,是假就执行冒号右边。
—-注意:冒号两边如果有变量参与运算,会有类型自动提升,如:

int x=10;
x>9 ? 'A' : x;  //这里 x 如果为真,会输出'A'对应的ASCII码整数。因为和整数x一起运算,类型提升。
x>9 ? 'A' : 0;  //这里 x 如果为真,会直接输出字符A。

六:运算符优先级

一个表达式有两个或两个以上运算符时,就是复杂表达式。
运算时要按运算符优先顺序从高到低执行。
常见运算符的优先顺序:

括号
        ++  --  !  ~
        *,  /  %
        +,  -
        >>  >>>  <<
        >  <  >=  <=
        ==  !=
        &
        ^
        |
        &&
        ||
        =  +=  -=  *=  /=  &=

七:转义字符的用法

常用的转义字符有:

\t   : 制表符,相当于TAB键。
    \n : 换行符。
    \b : 退格符。
    \r\n: 回车符,这是windows下的写法,如果是Linux,就是 \r 。

另外’ \ ’ 还具有转义功能,可以让紧接着它的下一个字符不具有特殊意义。
“\”” 想要在双引号中输出半个双引号,就需要给第二个引号就反斜线转义,代表它不能和第一个引号配对。
“\” 如果想要在引号中输出一个反斜线,也需要转义,不让它具有特殊意义。就是双反斜线,用第一个去注释第二个。