JAVA学习笔记

第一章 入门

1.1 计算机发展史和未来方向

第一代语言

机器语言

第二代语言

汇编语言 goto语法

第三代语言

java c c++

1.2 常见语言介绍

C

C++

面向对象
效率高

Java

最主流

PHP

web开发、中小型网站开发

Object-C & Swift

ios开发

JavaScript

H5开发核心就是JavaScript,其次HTML5\CSS

Python

图形处理、科学计算、web变成、人工智能

C#

微软、用来抗衡Java,运行于.Net Framework上
基于windows的桌面软件,c#是首选

Fortran

世界上第一种高级语言,IBM1954年提出,工程领域仍然广泛使用

Basic

易学,不够强大,已被淘汰

Pascal

仅限于大学教育,基本淘汰

1.3 Java

1.3.1 Java发展简史

1991年,James Goslings,SUN公司
1998年,JDK1.2
2004年,J2SE 5.0(1.5.0)
2014年,JavaSE8.0
赶上互联网的发展而发展

1.3.2 Java的核心优势

跨平台,强大的生态体系,第一大语言

1.3.3 Java各版本的含义

JavaSE:标准版,个人计算机应用(桌面应用),发展较差,不如C#

JavaEE:企业版,服务器端的应用

JavaME:微型版,消费型电子产品的应用,发展较差,不如安卓

1.3.4 Java的特性和优势

跨平台/可移植性

安全性

面向对象

简单性

高性能:虚拟机的优化,某些场景甚至接近C++效率

分布式

多线程

健壮性:不会造成计算机整体崩溃

1.3.5 Java应用程序的运行机制

高级语言主要有编译型和解释型语言,Java是两种类型的结合
首先编写原程序后缀为.java
再利用编译器javac编译成字节码文件,后缀为.class
最后利用虚拟机(解释器,java)解释执行

1.3.6 JVM、JRE和JDK

JVM Java虚拟机,与操作系统打交道

JRE 包含Java虚拟机、库函数、运行Java所必须的程序

JDK 包含JRE、编译器、调试器等应用程序开发的文件

1.4. JAVA安装

1.4.1 JDK下载和安装

1.4.2 环境变量Path的配置


JAVA_HOME:略
PATH: %JAVA_HOME%\bin
JDK1.5之后不需要配置classpath,JRE会自动搜索目录下类和jar文件

1.4.3 测试安装

1.5 编写

1.5.3 编码注意事项总结

1.Java对大小写敏感
2.public 是访问修饰符,控制其他部分对这段代码的访问级别
3.class类,java面向对象语言,代码都必须位于类中
4.一个源文件最多生命一个public类,其他类个数不限,且public 类名必须与源文件名一致
5.一个源文件可以包含多个类,编译后一个类对应一个class文件
6.main方法是入口,固定书写格式,public static void main(String[] args){……}
7.每句以分号结束

1.5.4 常用DOS命令

1.6 常用开发工具

eclipse
Intellij IDE
NetBeans

1.7 eclipse入门

1.7.1 eclipse下载和安装

下载版本要与JDK一致,64位eclipse支持64位JDK与32位JDK,32位eclipse支持32位JDK

1.7.2 eclipse中创建Java项目

1.8 桌球小游戏demo

第二章 数据类型和运算符

2.1 注释

单行//
多行/* /
文档/
* */,说明及JavaDoc标签,可以生成API

2.2 标识符

字母、下划线、美元符号开头
其他部分可以使用字母、下划线、美元符号和数字任意组合
大小写敏感、长度不限制
不可以是Java关键字

使用规范
类名:首字母大写
方法和变量名:第一个单词小写,第二个单词开始首字母大写

Java不采用ASCII字符集,二是采用Unicode国际字符集,包括汉字,但是吧建议用汉字来定义标识符

2.3 Java中的关键字(保留字)

2.4 变量 variable

2.4.1 变量的本质

“可操作的存储空间”

基本类型 引用类型

一行中可以声明多个变量,但不建议这么写

int i,j;

2.4.2 变量的分类

局部变量 local variable:【从属:方法/语句块】先声明、再初始化,才能使用

成员变量 member variable:【从属:对象】类内部方法外部定义,从属对象,生命周期伴随对象始终;不初始化,会自动初始化成该类型的默认初始值。

数据类型 默认初始值
int 0
double 0.0
char '\u0000'
boolean false

静态变量 static variable:【从属:类】生命周期伴随类始终

2.5 常量 constant

通常指一个固定的值

一般用大写字母

利用final来定义

final double pi = 3.14;

2.6基本数据类型

三大类八小类(数字表示字节数):

  1. 数值型
    1.1. 整数类型:1 byte,2 short,4 int,8 long
    1.2. 浮点类型:4 float,8 double
  2. 字符型
    2.1. 字符型:2 char
  3. 布尔型
    3.1. 布尔型:1 boolean

2.6.1 整型变量/常量

1个字节8位

类型 占用空间 范围
byte 1字节 -27 到 27-1
short 2字节 -215 到 215-1 约±3w
int 4字节 -231 到 231-1 约21亿
long 8字节 -263 到 263-1

十进制

八进制,0开头,例如015

十六进制,0x或0X开头,例如0x15

二进制,0b或0B开头,例如0b110

long默认后面加L

long a = 2000000000L;

2.6.2 浮点型

类型 占用空间 范围
float 4字节
double 8字节

小数默认是double,如果是float需要加F:

float a =3.14F;

浮点数不精确:

例1:

        float a = 0.1f;
        double b = 0.1;
        System.out.println(a==b);

结果

false

例2:

        float f1 = 423432423f;
        float f2 = f1+1;
        if(f1==f2) {
            System.out.println("f1==f2");
        }else {
            System.out.println("f1!=f2");
        }

结果

f1==f2

所以浮点数一定不能用来比较

如果要比较浮点数,需要用java.math下的BigDecimal和BigInteger

2.6.3 字符型变量/常量

2字节
unicode,65535个字符,含汉字

2.6.4 boolean布尔类型变量/常量

1位(不是1个字节),所以不能用0或非0代替true和false,这点和C不同

2.7 运算符

2.7.1 算数运算符

  1. 二元运算符(+ - * / %)
    1.1 (整数)如果两个操作数有一个为Long,则结果也为Long
    1.2 (整数)没有Long时,结果为int。即使操作数全部为short、byte,结果也是int。
    1.3 (浮点数)如果两个操作数有一个为double,则结果为double
    1.4 (浮点数)只有两个操作数都是float,结果才是float
    1.5 (取模)操作数可以是浮点数,一般使用整数,结果是“余数”,“余数”符号和左边操作数相同
  2. 一元运算符(++ --)

2.7.2 赋值及其扩展赋值运算符

a+=b;//相当于 a = a+b
a*=b+3;//相当于 a=a*(b+3)

2.7.3 关系运算符

注:

  1. =是赋值运算符,而真正的判断两个操作数是否相等的运算符是==
  2. ==、!=是所有(基本和引用)数据类型都可以使用
  3. ">",">=","<","<="仅针对数值类型、char类型;char会自动转为unicode码数字(a=97)
        int a = 3;
        System.out.println(a==3);
        
        char b = 'a';
        char b2 = 'c';
        
        System.out.println((int)b);//97
        System.out.println(0+b);//97,int+char为int
        System.out.println(0+b2);//99,int+char为int
        System.out.println(b+0);//97,int+char为int
        System.out.println(b

2.7.4 逻辑运算符

& 逻辑与
| 逻辑或
&& 短路与,只要有一个false,则返回false
|| 短路或,只要有一个true,则返回true
! 逻辑非,取反,!false为true,!true为false
^ 逻辑异或 ,相同为false,不同为true

注:

  1. 逻辑与会计算所有结果再判断,短路与只要出现一个false即直接返回
  2. 逻辑或只要出现一个true即直接返回
        System.out.println(true&false);//false
        System.out.println(true|false);//true
        System.out.println(true&&false);//flase
        System.out.println(true||false);//true
        System.out.println(!true);//false
        System.out.println(true^true);//false
        System.out.println(false^false);//false
        System.out.println(true^false);//true

2.7.5 位运算符

~ 取反
& 按位与
| 按位或
^ 按位异或
<< 左移运算符,左移一位相当于乘以2,两位是乘以2x2,三位是2x2x2
">>" 右移运算符,右移一位相当于除以2取商

        int a = 3;
        int b = 4;
        System.out.println(a&b);//0    3:0011 4:0100, 3&4 0000=0
        System.out.println(a|b);//7 3|4 0111=7
        System.out.println(a^b);//7 3^4 0111=7
        System.out.println(~a);//-4
        System.out.println(a<<1);// a*2 = 6
        System.out.println(b>>1);// b/2 = 2
        System.out.println(12>>2);// 12/2/2 = 3

2.7.6 字符串连接符

“+”
运算符两侧只要有一个字符串类型(String),系统会自动将一个操作数转换为字符串然后再进行连接

        int a = 3;
        String b = "4";
        int c = 4;
        System.out.println(a+b);//34
        System.out.println(a+c);//7
        
        System.out.println(a+b+c);//344 ,a+b先转为String
        System.out.println(a+c+b);//74  ,a+c先计算数字

注:

  1. String + 数字 = String
  2. char + 数字 = 数字

2.7.7 条件运算符

x ? y : z

x为boolean类型表达式,先计算x,若为true则返回y,否则返回z

        int score = 80;
        String type = score<60?"不及格":"及格";
        System.out.println(type);//及格
        
        int x = -100;
        System.out.println(x>0?1:(x==0?0:-1));//-1
        System.out.println(x<0?1:(x==0?3/0:3/0));//1  ,先计算外层,走不到里层括号,所以3/0不会报错

2.7.8 运算符优先级的问题

2.8 类型转换

2.8.1 自动类型转换

  1. 容量小的可以自动转换为容量大的数据类型(不是字节数,而是范围,比如float4个字节可以转换为long8个字节,因为float范围大,但是会损失一定精度)。

  2. 整型常量可以直接赋值给byte 、short、char等类型变量,而不需要进行强制类型转换,只要不超出其表数范围即可。

short a = 12;//合法
short b = 123456;//非法

2.8.2 强制类型转换

(type)var

2.8.3 基本类型转换溢出

操作比较大的数时,要留意是否溢出

        int money = 1000000000;//10亿
        int years = 20;
        int total = money * years;
        System.out.println(total);//-1474836480,溢出,int范围21亿
        long total2 = money * years;
        System.out.println(total2);//-1474836480,溢出,int计算先溢出,所以即使total2是long也不行
        long total3 = money * (long)years;
        System.out.println(total3);//20000000000,先强转其中一个为long,long与int计算还是long
        
        //常用技巧
        long total4 = 10L * 1000000000;//10000000000,直接将其中一个数字强转为long
        long total5 = 10  * 1000000000;//1410065408,溢出
        System.out.println(total4);
        System.out.println(total5);

2.9 简单的键盘输入

Scanner

        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入名字:");
        String name = scanner.nextLine();
        System.out.println("请输入你的爱好:");
        String favor = scanner.nextLine();
        System.out.println("请输入你的年龄:");
        int age = scanner.nextInt();

        System.out.println("#####################");
        System.out.println(name);
        System.out.println(favor);
        System.out.println(age);

结果

请输入名字:
pjh
请输入你的爱好:
coding
请输入你的年龄:
33
#####################
pjh
coding
33

第三章 控制语句

3.1 选择结构

任何一个软件和程序,本质都是由“变量、选择语句、循环语句”组成

3.1.1 if单选择结构

注意,if可以不写{},只执行下面一句,但是建议即使是一句也要用{}

3.1.2 if-else双选择结构

if(布尔表达式){
    语句1
}else{
    语句2
}

3.1.3 if-else if-else多选择结构

if(布尔表达式1){
    语句1
}else if(布尔表达式2){
    语句2
}else{
    语句3
}

3.1.4 switch多选择结构

一般用来做多值判断

switch(表达式){
case 值1:
语句1;
[break;]
case 值2:
语句2;
[break;]
……
[default:
默认语句;]
}

遇到break结束switch;

表达式一般是整数(long除外)或者枚举,JDK1.7之后支持String;

如果判断到所需的值后没有break,会把后续所有语句执行;

例如:

        int month = (int)(1+12*Math.random());
        month = 3;
        System.out.println("月份:"+month);
        
        switch(month) {
        case 1:
            System.out.println("1月份过年了");
//          break;
        case 2:
            System.out.println("2月份开春了");
            break;
        case 3:
            System.out.println("3月开学了");
//          break;
        default:
            System.out.println("其他月份");
            break;
        }

结果:

月份:3
3月开学了
其他月份

3.2 循环结构

3.2.1 while循环

while(布尔表达式){
    循环体;
}
    graph TD
    
    开始 --> 布尔表达式
    布尔表达式 -- true --> 循环体
    循环体 --> 布尔表达式
    布尔表达式 -- false --> 结束
    

3.2.2 do-while循环

do{
    循环体;
}while(布尔表达式);

3.2.3 for循环

        int sum = 0;
        for(int i=1;i<=100;i++) {
            sum+=i;
        }
        System.out.println(sum);
        ////
        int j = 1;
        sum = 0;
        for(;j<=100;j++) {
            sum+=j;
        }
        System.out.println(sum);
        ////
        int k;
        for(k=0,sum=0;k<=100;k++) {
            sum+=k;
        }
        System.out.println(sum);

3.2.4 嵌套循环

99乘法表

        //99乘法表
        for(int i=1;i<=9;i++) {
            for(int j=1;j<=9;j++) {
                if(j<=i){
                    System.out.print(j + "*" + i + "=" + (i*j<10?" "+i*j:i*j) +"  ");
                }                   
            }
            System.out.println();
        }

结果:

1*1= 1  
1*2= 2  2*2= 4  
1*3= 3  2*3= 6  3*3= 9  
1*4= 4  2*4= 8  3*4=12  4*4=16  
1*5= 5  2*5=10  3*5=15  4*5=20  5*5=25  
1*6= 6  2*6=12  3*6=18  4*6=24  5*6=30  6*6=36  
1*7= 7  2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49  
1*8= 8  2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64  
1*9= 9  2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81 

3.2.5 break & continue 语句

break用来退出循环,不执行循环中剩余语句
中止本次循环后续代码,继续下次循环

3.2.6 带标签的break & continue

goto语句,保留关键字,但java没有正式使用
break和continue中可以看到一些goto的影子--带标签的break和continue

你可能感兴趣的:(JAVA学习笔记)