JAVA学习总结(二)

基本语法:

1.数据类型

1.1基本数据类型(8大类型):  

  byte 1字节 (0--255)
  short 2字节 (-32768 -- 32767)
  int 4字节 (-2^31 -- 2^31-1)
  long 8字节 (-2^63 -- 2^63-1)
数字大小常量:
例如:
1.十进制数字表示:
-50 0 100
2.八进制数字表示:
-050 0 0100
3.十六进制数字表示:
-0xF0A9 0x0 0x1A0D
4.long类型的常量表示:
1000000L 10000001

  float 4字节 -3.403E38-3.403E38
  double 8字节
表示浮点数,是有误差的
浮点数表示方法:
1.十进制表示方法
31.4 100 .314
2.科学计数法:
3.14E+1^ 1.0e+2 3.14E-1
3.float与double不一样
double类型: 10.5
float类型: 10.5f 或 10.5F

unicode双字节标准:
  char 2字节
  文本型char
  通常指用单引号包裹的单个字符,字符可以是字母,数字,汉字,符号
例如: 'a','5','中','@'
特殊:
1.十六进制表示a字母: 'u0061'
2.特殊符(转义字符)
换行
制表符
"
空字符

布尔型:boolean 1位 true|false

=============================================================================

1.2引用数据类型(3大类) 

  数组 int[] char[] String[] Date[]...所有后跟[]都是数组


  类 String Math Date Calendar... 所有class定义的类


  接口 所有的interface定义的接口

=============================================================================

2.变量

变量就是一个数据的存储空间,有三要素:数据类型,变量名,数值
在JAVA中如何声明一个变量:
语法:
数据类型 变量名;
数据类型 变量名=值;
注意:JAVA中方法体内的变量不赋初始值不能使用

例如:

int age;
char sex='男'char ch='
';
char ch2='u0061';
boolean bl = trueint num = 0xff; //数值255
int num2 = 255;
int num3 = 0100;//数值64
float f = 5.236F;
double d = 2.54;
long l = 1000000L;

变量名是程序员自定义的一个标识符,标识符规定:

1.不能使用关键字
2.首字符必须是字母,下划线或$符
3.首字符之后可以跟字母、数字、下划线或$符
4.严格区分大小写

建议变量命名规范:

1.尽量使用有意义的英文单词,次选拼音,不要用汉字。
2.如果变量名是多个单词组合,建议从第二个单词开始首字母大写,
例如:userName

变量声明的位置:

1.可以在方法的定义内部任何地方
2.也可以在类定义的内部

例如:

public class 类名{
    int X;//成员属性变量
    public xxx 方法名(){
        int y;//局部变量
    }
}

java中输入与输出
输出:

 System.out.print()//不带换行,不支持占位符
 System.out.println()//自动换行,不支持占位符
 System.out.printf()//格式化输出,能使用占位符(%d,%f,...)
//例如输出一个变量的值:
 int num=100;
 System.out.print("num变量的值是:"+num+"
");
 System.out.println("num变量的值是:"+num);
 System.out.printf("num变量的值是:%d
", num);

输入:

//1.定义一个输入对象,这个对象只要定义一次,可以反复调用。
java.util.Scanner input = new java.util.Scanner(System.in);
//2.使用输入对象,调用方法接受键盘的输入
int num = in.nextInt();
String name = in.next();
String address = in.nextLine();//带空格
float num2 = in.nextFloat();
double bl = in.nextDouble();

//例如:
public static void main(String[] args){        
java.util.Scanner in = new java.util.Scanner(System.in);        
    System.out.print("请输入一个整数:");
    int num = in.nextInt();
    System.out.print("请输入一个字符串:");
    String s = in.next();

    System.out.println("num="+num);
    System.out.println("s="+s);
}

String op = kb.next();
char ch = op.charAt();// op.charAt(0):从op的的字符串值中取第一个字符,返回类型是char;

System.out 标准输出设置(显示器)
System.in 标准输入设置(键盘)

=============================================================================

3.运算符

Java的运算符,分为四类:

赋值运算符、算数运算符、关系运算符、逻辑运算符、位运算符。

1.赋值运算符:=,+=,-=,*=,/=,%=
变量=表达式
将表达式结果赋给左边的变量
例如:
+=
x += 5;等同于 x = x+5;
x *= 2+3;等同于 x = x*(2+3);

2.算数运算符:+,-,*,/,++,--,%,?:

例如:

+:

算术运算:左右两边是int,char,byte,double
连接运算:左右两边只要有一个是String

10/2 5
10/3 3
10/6 1
10/6.0 1.6666666667

%:求余数

例如:

10%5 0
10%3 1
3%5 3
3.0%1 出错,小数不能参与模运算
已经2016-3-8周三,再过15天,是周几?
有一个两位数整数,取出个位数是几?
xy%10
10%10 0
15%10 5
98%10 8

x是不是y的倍数
x%y==0
前置 后置
++x    x++ x = x+1
--x     x--

3.复合运算

y = x++; 前提x=5, 计算后y=5, x=6
y = ++x; 前提x=5, 计算后y=6, x=6

例如:

System.out.print(x++);
System.out.print(x);//前提x=5,输出5,6
            
System.out.print(++x);
System.out.print(x);//前提x=5,输出6,6
            
System.out.print(x+1);//前提x=5,输出6
System.out.print(x++);//前提x=5,输出5

?:条件运算符,三目运算符,多元运算符
条件?真值:假值

例如:

z = x>y?x:y;前提x=5,y=6,z的结果6
  x>Y?假
  取y
  赋值

//程序中保存性别0,1分别表示男,女
String s = sex==1?"男":"女";
System.out.print(s);

4.关系运算符:==,>=,<=,!=,>,<

关系运算符的结果是布尔值。

==,!=是用于比较两个值是否相等或不等,
这两个操作可以任意类型,但不保证结果正确。
如果基本数据类型,结果正确。
如果是引用类型,比较两个对象的地址是不是同一个。

>,>=,<,<=只能比较基本数据类型的数据,不能用于比较引用型数据类型的数据。

逻辑运算符:&&,||,!,&,|
&&和||,对应and和or,连接多个关系运算,结果还是布尔值。
a>b && b>c: 
a>b和b>c同时为true,结果为true,否则为false
a>b || b>c: 
a>b和b>c同时为false,结果为false,否则为true。

!表示取反.
!(a>b):
如果a>b为true, 结果为false;
如果a>b为false, 结果为true。

//是不是闰年(year)?
year%4==0&&year%100!=0 || year%400==0
//是不是平年(year)?
!(year%4==0&&year%100!=0 || year%400==0)
//
(year%4!=0 || year%100==0) && year%400!=0

&&与&区别:
&&运算效率高,短路and,如果左边为false,右边不再计算。
&运算左右两边无论任何情况下都要计算。

前提:x=5,y=6
x++>5 && y++>6;
计算条件结果是false,x=6,y=6


前提:x=5,y=6
x++>5 & y++>6;
计算条件结果是false,x=6,y=7

位运算符:& | ~ ^ >> << >>>
只对数值计算
&:按位与
例如:5&10
5的二进制原码 0000 0101
10的二进制原码 0000 1010
然后每个位对应进行与运算,其结果是0

与:只要同为1,结果为1,否则为0
|:按位或
或:只要同为0,结果为0,否则为1
^:按位异或
异或:相同为0,不同位1

8^12 结果是4

0000 1000
^ 0000 1100
----------------
0000 0100

~:按位取反
取反:0变1,1变0

例如:~5 结果是250
0000 0101
----------------
1111 1010
其他运算符:
(),[ ],new,instanceof(instanceof用来判断内存中实际对象A是不是B类型)

优先级
1级 (),[]
2级 !,++,--,-(负号)
3级 *,/,%
4级 +,-
5级 按位逻辑运算<<,>>
6级 >,>=,<,<=
7级 ==,!=
8,9,10级 按位逻辑运算&,^,|
11级 &&
12级 ||
13级 ?:
14级 =

=============================================================================

4.表达式

什么是表达式?

运算符和操作数的有效组合;
常用操作数:常量,变量,带返回值的函数,子表达式
1+2:常量:1,2
a=b+3:常量3,变量:a和b
a=max(b,3)常量3,变量:a和b,函数max()
a=b+3:b+3子表达式
有效:
5/0无效组合

什么是jAVA表达式?

运算符只能java中的运算符合操作数的有效组合;

表达式出现位置:

表达式;//java中语句
控制语句中可以出现
for(表达式1;表达式2;表达式3)
if(条件表达式)
...

例如:

int a,b;
a+b;//一个整数表达式,结果是int
        
int a,b;
a>b;//一个布尔表达式,表示条件,结果是boolean值
    
int a;
a=3;//一个赋值表达式,结果是将3赋给a变量

特殊情况:

所有byte,int,short,char类型的数据进行算术运算,结果是int类型。

强制转换数据类型:

int N=100;
byte b=(byte)n;
char c=(char)n;
        
//注意:不是所有类型之间都可以强制转换,所有类型必须兼容。
int n=(int)"abc";//错误:字符串与int类型不兼容
int n=(int)'a';//编译出错

=============================================================================

5.流程控制语句

a.条件分支

if , if else, else if ,switch(多路分支)
语法:
switch(表达式){
  case 常量1 :代码1;break;
  case 常量2 :代码2;break;
  case 常量3 :代码3;break;
  ....
  default:
}
注意:
1.表达式:结果必须是整数,char或String
2.break可选,中断switch
3.default可选
4.case和default顺序可以换

b.循环迭代

for循环语句

c.跳转

break:
在循环语句,用于结束循环
包含在switch或循环语句内部

continue
结束本次迭代,回到循环条件
只能包含在循环语句内部

注意:
1.break,coutinue一般在循环中的条件语句中
2.break,countine在同一层中后不能有其他语句

如何结束程序?
System.exit(n);

=============================================================================

6、数组

6.1数组的含义:

一组相同的数据类型的固定长度的序列的数据集合,变量存放一个数据,数组可以存放多个数据。

6.2定义或声明数组语法:

声明数组:

  定义了一个数组名,没有开辟空间,长度没有固定,元素也不确定,不能使用元素。

  数据类型 数组名[];
  数据类型[] 数组名;

//例如:
    int arr[];
    int[] arr;   

默认初始化数组:

  数组名 = new 数据类型[长度];

显示初始化数组:
  数据类型[] 数组名 = new 数据类型[]{数据1,数据2,....};
  数据类型[] 数组名 = {数据1,数据2,....};

定义数组:既声明了数组名,也开辟了空间,只有开辟空间,就有默认值。  

  1.数据类型[] 数组名 = new 数据类型[长度];
  2.数据类型[] 数组名 = new 数据类型[]{数据1,数据2,....};
  3.数据类型[] 数组名 = {数据1,数据2,....};

//例如: 
    int[] arr1 = new int[5];
    String[] arr1 = new String[5];
    int[] arr2 = new int[]{1,2,3,4};
    int[] arr3 = {1,2,3,4};

数据的类型: 

  所有原始数据类型的数组,默认初始化值是0;boolean是false,char也是编码0。

  引用数据类型的数组,默认初始化值是null,null表示空对象或空引用。

访问数组元素: 

  访问数组元素:读和写

  获取一个元素的值(读):变量 = 数据名[下标];

  设置一个元素的值(写):数组名[下标] = 新值;

  下标:是从0开始的整数,最大下标为数组元素个数-1。

foreach遍历数组:

  for(int t(声明的变量名) : 数组名){
    System.out.println(t);
  }

  //二维数组   
       int[][]  arr2 = new int[2][5];
    //arr[0] = new int[5];
    //arr[1] = new int[6];
    
     //arr2是一个二维数组,原理:
    //0    0    0    0    0
    //0    0    0    10    0    0
    //arr2[1][3] = 10;    

数组的声明定义方式:

类型[] 数组名=new 类型[长度];//声明并定义

int[] arr1 = new int[100];
Object[] arr2 = new Object[100];


类型[] 数组名=new 类型[]{数据1,数据2,数据3,...};//声明,定义并初始

float[] arr1 = new float[]{10,10.5f};

Date birthday = new Date();

Date[] arr2 = new Date[]{new Date(), new Date(100000L), null,birthday, d,
new SimpleDateFormat("yyyy-MM-dd").format("2015-8-9")};

boolean[] arr1 = {true,false,true,true, false};

String[] arr2 = {"abc","324","ABC"};

使用字符串转日期

String str = "2017-3-17";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date d = sdf.format(str);

=============================================================================

7.原码,反码,补码,浮点小数,定点小数,机器数

1.机器数:

  一个数在计算机中的二进制表示形式,  叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1.

2.原码: 

  原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:

  [+1]原 = 0000 0001

  [-1]原 = 1000 0001

3.反码:

  正数的反码是其本身,负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.

  [+1] = [00000001]原 = [00000001]反

  [-1] = [10000001]原 = [11111110]反

  可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算.

4.补码:

  正数的补码就是其本身,负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1).

  [+1] = [00000001]原 = [00000001]反 = [00000001]补

  [-1] = [10000001]原 = [11111110]反 = [11111111]补

  对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值.

5.浮点数和定点数: 

  小数点的位置不固定,可以浮动,称为浮点数。

  规定小数点位置固定不变,称为定点数。

  在计算机中,通常是用定点数来表示整数和纯小数,分别称为定点整数和定点小数。对于既有整数部分、又有小数部分的数,一般用浮点数表示。

原文地址:https://www.cnblogs.com/ldm666/p/7921050.html