Java基础 精短强悍 学习笔记

Learing way


本文作者 Mr.赵

Email: lovelyalan@foxmail.com

QQ: 1069418097

声明: 本人并非任何机构或组织成员,

原创文章,转载标明作者及联系方式

初识Java

一.什么是Java

1.Java的产生

Java是Sun Microsystems于1995年推出的高级编程语言;

image-20200611082850629


2.特性
  1. 易学性 2.强壮的 3.安全性 4.高性能 5.解释性 6.面向对象 7.跨平台的

image-20200611090632006

​ 支持windows,unix,苹果Mac系统


3.发展
①历史

image-20200611084130508

②平台
  • Java SE 标准版

    ​ 支持面向桌面级应用

  • Java ME 小型版

    ​ 支持Java程序运行在移动终端

  • Java EE 企业版

    ​ 针对企业的对于Web应用程序开发


二.环境准备

1.Jdk与Jre

JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE


JRE是如果你想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。

2.下载与安装

JDK 下载 备用


JRE 下载 备用

3.IDE(集成开发环境)

工欲善其事,必先利其器

我们也要有方便的工具来开发我们的程序

①工具
  • IDEA 一款强大的编译器

  • Eclipse 老牌编译器

    这两款是主流的Java IDE 其它的不过多阐述

②下载

考虑到软件官网都是国外的,下载速度缓慢

联系作者或者发送Email获取,非广告非广告非广告

③用法

作为研究编程的我们,一定要有动手能力

视频教程:

下面教程中的链接是我为了方面给大家找好的,bilibili上面有很多学习视频,你也可以自己找,并非商业目的

IDEA教程 Eclipse教程

觉得视频废话太多或者看不懂就联系我获取我录制的视频教程吧


三.HelloWorld

1.示例代码
public class HelloWorld {
    public static void main(String[] args){
        System.out.print("Hello world!");
    }
}

尝试输出 你好 世界!

四.反编译

1.概念

编译概念: 使用 javac源文件(.java) 编译为 字节码文件(.class)


反编译概念:将 **字节码文件(.class)**转换成 源文件(.java)的过程称为反编译

2.工具

Javadecompilers 一个免费快速的反编译网站


变量数据类型和运算符

一.变量

1.概念

“变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。

2.如何使用

先声明,再使用.

示例:

int age=18;
  1. int 是 数据类型,不可自定义,后面会详细介绍
  2. age是 变量名,可以自定义,但需遵循 命名规则(见后面)
  3. 18 是 变量值 ,可以自定义,但需对应 数据类型(见后面)
3.命名规则
  1. 以数字,字母,下划线和$符号组成,其中不能以数字开头

    0a , 0b , 2hello这样以数字开头的变量名不可以

    ab , x , $hello , _i 这样的变量符合要求

  2. 不能和Java中的关键字重名;

    前面的Hello world代码示例中,大家看到了public或class这种单词了吗?

    这些单词是让计算机理解你写的代码的命令,所以不能和它们重名哦~

  3. 尽量遵守见名知意驼峰命名规则。

    见名知意: 比如我要写一个 计算所有人年龄的平均数,那我应该给它起名 ageAvg (age是年龄的意思,Avg是average平均的意思)


    驼峰命名: 相信大家注意到了,为什么上面的 ageAvg 我不用AGEAVG,AgeAvg等命名呢,驼峰命名的规则就是想让 名字像骆驼的背一样,这样更美观,一般来说首字母小写例如age的a,新的单词加入,首字母大写,例如:Avg的A用了大写

  4. 变量名不可以与已经声明的变量名重复,例如

    int a = 0;
    int a = 1;
    //错误示范,请勿学习
    

    如果这样写 程序就会报错,无法编译运行

    请分清 声明 和 赋值的区别

    int a = 0;
    a = 1;
    

    a只声明了一次,赋值是无所谓的,所以可以编译运行


二.常量

1.概念

一个数据存储空间的表示,其值是不可以发生改变的,所以其实相对安全

常量名通常大写,不同字符使用下划线分隔 如: AGE**_**AVG

只能被赋值一次,通常定义时即对其初始化

2.意义

为什么使用常量? 在实际开发和生活中有些值是一开始定义了在后面就不能修改的,如:圆周率

3.使用

数据类型前面加上 final

final int AGE=18;

三.数据类型

1.基本数据类型

基础补充:

位(bit)是计算机最小存储单位 它只能存0或1,感兴趣可以学一学 计算机科学

下图中我们只需要了解 位(b) - 太(T) 单位即可

image-20200611104358103

  • 数值型

    • 整数(只能存整数):
      1. byte(1字节)
      2. short(2字节)
      3. int(4字节)
      4. long(8字节)
    • 浮点数(可以整数或小数):
      1. float(4字节)
      2. double(8字节)
  • 字符型

    char(2字节) : 本质上是一个整数, 是字符的ASCII码值.

  • 布尔型

    boolean(1bit):boolean类型的值只有true和false两种逻辑值,在编译后会使用1和0来表示,这两个数在内存中按位算,仅需1位(bit)即可存储

    什么时候使用布尔
    当我们遇到 真 或者 假

    ​ 是 或者 否

    类似于这样两种情况的时候可以使用boolean类型的值

    比如软件的关闭提示, 你是否真的退出软件呢?

2.引用数据类型

String(值越长,占的空间越大): 在java中 首字母的S必须大写,String可以存任何值,值需要用""两个引号圈起来

String name = "赵同学,_Helloworld,.!@#$%";

补充:

image-20200611143227359


四.运算符

1.赋值运算符

赋值符号: =
将右边的值赋给左边的变量,示例可以看上面引用数据类型介绍

2.算术运算符

image-20200611113008288

int age=18+3;

那么age的值就是21, /就是除法,%就是模mod运算(你暂时理解成求余数的运算)

关于模运算,你想深入研究的话我给你准备了两个资料 简书 百度百科

++,与–

基础补充:System.out.println(); 是打印输出其括号里的值到控制台

public static void main(String[] args) {
    int i = 0;
    System.out.println(i++);//1
    System.out.println(i);//2
 
    int j = 0;
    System.out.println(++j);//3
}

1处会输出0 , 2处会输出 1 三处会输出 1

你发现规律了吗?

++就是+1, --自然是-1


如果++或–放在变量(上文中是i或j)后面,那么就会将下一次出现此变量时+1,就比如上文中的1处 i++出现的时候,它还是0,当它下一次出现的时候(2处),进行+1 就变成了 1

如果++或–放在变量(上文中是i或j)前面,那么它就会**立刻+**1 所以3处的j就立刻变成了 1

看不懂或者懵了别害怕,这里请上机练习一下,自己动手试一下,你就明白其中的奥妙啦!


3.关系运算符

基础补充: 关系运算符的值是 boolean(布尔)类型的, true代表真的 false代表假的

image-20200611115219736

上文中提到过 两个引号 “” 包起来的数据 是 String类型的值,所以它输出了 true

image-20200611115632682

这里请上机练习,实际操作一下!


4.逻辑运算符

image-20200611120037370

image-20200611120312463


image-20200611120415130

思考时间:结合你所学的知识,你看懂了吗? 上机练习一下吧


5.三元运算符

又称三目运算符

image-20200611120606824

boolean i = false;
1>2? i=true : i=false

请问布尔型变量 i 的值是什么?

结果肯定是 false,因为1小于2,程序会执行 冒号(:)后面的表达式,请根据语法图片仔细思考

如果 1>2 换成 1<2 呢?


五.数据类型转换

1.概念

上面讲到 int只能存整数,变量赋值(=)时必须对应数据类型, 那假如我想把int类型变量赋值给double呢? 那double赋值给int呢?数据类型之间的转换肯定是有规律的!

2.用法
  • 自动类型转换

    int a = 1;
    double b = a;
    

    上面的代码 a 是int类型的,为什么可以直接赋值给 double呢?

    其实变量自动转换了,小的值可以存到大的空间里面,如何理解这句话?

    拿生活举例,你有一个200ml的小杯子和一个500ml的大杯子,200ml的小杯子装满了水,你想倒入500ml的大杯子里,显然没有任何问题.

    如果反过来呢? 我500ml的杯子装满了水 可以倒入 200ml的小杯子里吗?显而易见,会溢出水\

    结论:自动转换存在优先级,小的数据类型可以自动转换为大的数据类型,优先级如下

    String>double>float>long>int>(short,byte,char)

  • 强制类型转换

    double a = 1.2;
    int b = (int)a;//1
    

    数值型的数据可以互相转换,我们都知道double比Int大,所以就需要**在变量a前面加个(int)**告诉程序 我就是要转,非要转.

    int a=(int)10.6;
    System.out.println(a);  //10
    

    结果为10,因为int只能存整数, java可没有什么四舍五入,强转会丢失数据精度,尤其在财务等方面慎用


六.输入类

import java.util.Scanner;
//或者 import java.util.*;
public class test {
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        int i = input.nextInt();//1
        System.out.println(i);//2
    }
}

第5行的 input 是变量,可以自定义,符号上面讲的命名规范即可.

当程序运行到 1处 后,会暂停等待你输入一个值(只能输数字),输入后 会用值通过 "="赋值运算符赋值给变量 i , 然后 2处i的值 (你输入的) 打印出来


但是这个程序输入 字母或者符号就会 Boom 奔溃掉,为什么呢?

nextInt()大家观察一下,next后面的int, next后面的值决定了它可以输入什么类型的值例如 nextDouble() 你肯定也发现了 第二个字母首字母要大写哟~

我为你准备了更多资料 深入学习


选择结构

一.概念

1.使用场景

小惠: 嗨,我们晚上去吃火锅吧
小赵:我现在牙还在疼,如果到晚上的时候不疼了我们一起去

二.语法

1.流程图

if (条件) { 代码 }

image-20200612093942304

我们可以这么理解上面的使用场景

**if **(小赵的牙晚上不疼了) { 和小惠一起去吃火锅 }

如果**() 半圆括号**中的条件符合 就执行 { }花括号里的代码,否则什么也不会发生

if(小赵的java成绩>90){
 获得手表作为奖励   
}

套用这个格式,把代码中的中文替换成 Java代码表达式即可

 double score=90.0;
 if(score>90){
  	System.out.println("很棒,奖励一个手表");
 }
 System.out.println("程序结束");

你认为程序会输出什么呢?

注意: score大于90吗?

思考时间:我只添加一个等于号(=),就可以输入奖励手表,你想多怎么做了吗?

三.进阶

1.复杂的逻辑表达式

仔细思考,看不懂多看几遍,别放弃,加油!

  • 使用场景

    小惠: 嗨,我们晚上去吃火锅吧
    小赵:听说今天下暴雨,而且我现在牙还在疼,如果到晚上不下雨我的牙不疼了我们一起去

  • 代码实现

    if (晚上不下雨 && 小赵的牙晚上不疼了) { 
        和小惠一起去吃火锅
    }
    
  • 语法

    代码与之前的有什么不同呢? 是不是多了一个 && 呀, 你还记得吗,我们在第二章变量数据类型与运算符-四.运算符-4.逻辑运算符 讲过它,翻回去看看吧~

    这样的写法就将两个条件表达式代入判断, &&的作用就是 同时,它的名字是 ,只有当左边和右边**同时符合(同时为true)的时候,执行花括号{}**里的代码

    逻辑运算符肯定不止这一个,||或,这些就要看你自己探索啦~

2.if-else结构
  1. 使用场景

    在上面案例讲 if的时候只讲过牙疼不能吃骨头,没讲牙疼吃什么,这里我们来解决

  2. 流程图

    image-20200612100438665

  3. 语法

    如果小赵Java考试成绩大于90分,奖励他一个手表,否则就罚他抄写代码

    if (小赵Java成绩> 90 ) { 
         奖励一个手表;
    }else {  
         惩罚抄写代码;
    }
    

    程序只会执行其中一个,因为不可能存在成绩又大于90又小于90的情况

    如果小赵考了88分,你能想到结果吗?


  4. 多重else-if

    • 使用场景

      如果小赵Java考试成绩大于90分,奖励他一个手表,否则就看看及格大于60分了,如果及格了就什么鼓励他一下,否则就罚他抄写代码

    • 流程图

      image-20200612110552080

    • 语法

      if ( 成绩>=80) { 
         奖励一个手表
      } else if (成绩>=60) { 
         鼓励小赵好好学习  
      } else { 
         罚他抄写代码
       }
      

      这里你需要注意的是 程序只会执行其中一个, 如果成绩大于等于 80分 这个if-else结构就中断了,如果不符合第一个条件,就说明成绩没有大于等于80分,判断第二个条件,如果成绩及格了,就执行它的代码然后结束程序,否则执行最后一个条件,因为成绩又不大于80,又不大于60,只能说明不及格了


    思考时间:

    1.程序会输出什么呢?

    2.if里面的条件顺序是否可以随意更换? (重点)

    double score=77;
    if(score>=80){
      	System.out.println("良好");
     }else if(score>=60){
     	System.out.println("中等");
     }else{
      	System.out.println("差");
     }
    

3.if嵌套
  • 使用场景

    小赵:今晚我们去看电影吧?
    小惠:好啊

    小赵:那我们看 当幸福来敲门 吧?
    小惠:好

  • 流程图

    这张图看不懂就不看了,不重要

    image-20200612113034813

  • 语法

    if(小惠看不看电影) { 
        	//如果看,就判断下一个条件
           if(小惠看不看 当幸福来敲门) {
                 晚上和小惠一起去看 当幸福来敲门
           } else {
                 晚上和小惠一起去看其他的电影    
           }
    } else {
      改天再约
    }
    

    你想通了吗?


4.switch结构
  • 使用场景

    小赵参加计算机编程大赛
    如果获得第一名,将参加麻省理工大学组织的1个月夏令营
    如果获得第二名,将奖励惠普笔记本电脑一部
    如果获得第三名,将奖励移动硬盘一个
    否则,不给任何奖励

  • if结构实现办法

    int mingCi=2;
    if(mingCi==1){
       System.out.println("参加夏令营活动");
    }else if(mingCi==2){
       System.out.println("奖励笔记本一部");
    }else if(mingCi==3){
       System.out.println("奖励移动硬盘一个");
    }else{
       System.out.println("没有奖励");
    }
    

    是不是感觉非常繁琐与啰嗦呀


  • switch结构实现办法

    int mingCi=2;
    switch(mingCi){
       case 1:
            System.out.println("参加夏令营活动");
            break;
       case 2:
            System.out.println("奖励笔记本一部");
            break;
       case 3:
            System.out.println("奖励移动硬盘一个");
            break;
       default:
            System.out.println("没有奖励");
            break;
       }
    System.out.println("程序结束");
    

    程序会获取 switch() 括号中的值,一个个向下比较,看看case后面跟的值是否与我的括号里的值相同,相同就执行符号要求的case.

    这时候括号里填的就是数据,可不是条件表达式了哦~


    switch有以下规定

    1. 常量名不可重复 : 就是比如 case 1有了,你不能再后面再写个重复的case 1
    2. 如果case后面没有break结束语,程序不会像if那样中断,会接着执行,这里复制示例代码到 IDE(写代码软件)里测试一下就明白了
    3. default,就是默认值,如果其他的case不等于switch括号里的值就会执行它里面的代码,default可有可无,而且可以在任何位置
    4. switch后面的表达式类型只能是 int byte short char 枚举 String
  • switch和多重if的对比

    相同点: 都是用来处理多分支条件的结构

    不同点:

    switch结构: 只能处理等值条件判断的情况

    多重if选择结构: 没有switch选择结构的限制,适合更复杂的逻辑判断


四.总结

到目前为止我们学习过五种选择结构:
基本if选择结构: 处理单一或者组合条件的情况
if-else选择结构:处理简单的条件分支情况
多重if选择结构:处理复杂的条件分支情况
嵌套if选择结构:用于较为复杂的流程控制

switch:选择结构
多重分支并且条件判断是等值判断的情况。

学习不是纸上谈兵,实践出真知,分享给大家一句我特别喜欢的话

师傅领进门,修行看个人
持续更新中,收藏一下吧


评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值