java入门笔记

1. Java相关概念

编程:用倾向于自然语言的方式编写指令代码的过程
编译:将自然语言指令代码转化为机器语言(二进制)的过程

在这里插入图片描述

系统差异化:为了用不同类型的芯片实现相同的功能,就需要用不同的指令代码操作不同的计算机硬件设备
解决方法:Java 可以通过软件模拟虚拟机器(JVM),用一套代码操作相同的虚拟机器上,从而屏蔽不同计算机设备的差异,简化指令代码的编写
字节码:JVM 接收的指定代码

在这里插入图片描述

JDKJava Development KitJava 开发工具包,封装经常使用的指令代码和编译器
JREJava Runtime EnvironmentJava 运行环境,可以直接使用编译好的字节码
src:.java 源码文件存放目录
out:.class 编译后的类文件(字节码)存放目录
jdk/bin/java.exe:启动 JVM,读取字节码文件(翻译成机器指令)

2. 第一个Java代码-Hello World

2.1 Hello World代码

package chapter01;

public class Java01_HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

执行上面这段代码,就会输出结果
在这里插入图片描述

2.2 流程梳理

在这里插入图片描述

在这里插入图片描述
JVM 把机器指令传给操作系统(OS),OS 通过 CPU 读取指令,执行时可能会分配内存、存储磁盘数据,最后反馈结果,将数据打印显示在控制台(CONSOLE)上。

2.2 添加注释

在 Java 中,注释的方式主要有两种:

1)单行注释:// xxxxx2)多行注释:/* xxx 
xxx
*/

2.3 内存分配

数据存储:只存储数据
向量存储:存储数据类型、大小、位置(指向)
变量:可以改变的向量存储
创建变量:在内存空间中创建向量存储

3. 基本语法

3.1 变量

本质是可以改变的向量存储

声明:数据类型 + 变量名称
赋值:变量名称 = 数据
使用:直接访问变量名称即可
初始化:使用变量之前,必须给变量赋值
package chapter02;

public class Java01_Variable {
    public static void main(String[] args) {
        /*变量是可以改变的向量存储
        1.申明变量:数据类型 + 变量名称
        2.赋值变量:变量名称 = 数据
        3.使用变量
         */
        String name;
        name = "zhangsan";
        System.out.println(name);
        
        String username = "lisi";
        System.out.println(username);
    }
}

3.2 命名规则

英文拉丁字母(汉语拼音)
符号 @ # % $,但 标识符只能用下划线和 $ 符号,其他符号不能使用,包括空格也属于特殊符号,不能作为标识符使用
数字(0-9),可以使用,但不能用作命名开头
区分大小写,在大括号{}范围内命名不允许重复
关键字(保留字):Java 中预先定义好了一些标识符名称,不允许重复定义
驼峰命名法(规范命名):多个单词拼接,第一个单词首字母小写,其他单词首字母大写
标识符长度无限制
中文亦可命名,但容易出现乱码

关键字如图
在这里插入图片描述

3.3 数据存储单位和数据类型

数据存储单位:
比特(bit位):数据运算的最小存储单位
字节(byte):计算机数据的最小存储单位
转换:1 byte = 8 bit
其他单位:1GB = 1024MB = ……
Java 的数据类型可以确定数据范围

在这里插入图片描述

3.3.1 基本数据类型

整数类型:
byte  8short  16int  32long  64位
浮点类型:
float:单精度浮点数
double:双精度浮点数
默认情况下,小数点数据会被识别为精度更高的双精度 double 类型
如果想要设置单精度,数据需要使用 F / f 结尾
字符类型:
char
用符号(单引号)表示文字内容
布尔类型:
boolean
true or false

3.3.2 数据类型转换

1. 注意数据类型
	不同数据类型不能赋值转换
2. 注意数值范围(从小到大)
	byte -- short -- int -- long -- float -- double
3. 范围大的数据无法直接转换为范围小的数据,但可以使用小括号间接强制转换

在这里插入图片描述

3.3.3 引用数据类型

可以被引用的数据类型(存储时箭头的指向,变量指向引用数据类型)
变量如果是基本数据类型,在存储时不会有相应箭头(只有向量存储)
包括 string、类、数组、接口、枚举、null

3.4 运算符相关概念

3.4.1 运算符

参与数据运算的符号
和字符不同,无法自行定义
表达式:运算符 + 数据,符合Java语法规则的指令代码
运算符分类:

在这里插入图片描述

3.4.2 算术运算符

二元运算符:两个元素参与运算
3 * 2
1 / 2  //0
1.0 / 2  //0.5
5 % 2  //1
表达式的结果类型是元素种类类型最大的那一种,最小使用的类型为 int(可以强转)

一元运算符:一个元素参与运算
++, --  自增/自减运算符
++i, i+++1/+1

赋值运算符:
=
将右边的表达式结果赋值给左边的变量
元素运算后重新赋值给自己,复合赋值,如:+=
如果使用 复合赋值运算符,数据的类型不会发生变化,如:byte b1 += 20

关系运算符:
比较两个数据之间的关系
==, !=, >= 等
结果为布尔类型

逻辑运算符:
描述多个条件表达式之间关系的运算符
变量 = 条件表达式1 逻辑运算符 条件表达式2
结果为布尔类型
& 与,两个条件表达式都要计算出结果,全truetrue,其他false
| 或,两个条件表达式都要计算出结果,有truetrue,没truefalse
&& 短路与,根据第一个表达式的结果决定是否执行第二个条件表达式,如果第一个就能判断出结果(false),则不会执行第二个
|| 短路或,如果第一个就能判断出结果(true),则不会执行第二个
! 非,相反运算

三元运算符:
三个元素参与运算
变量 = 条件表达式 ? 任意表达式1 : 任意表达式2
判断,如果条件表达式结果为true,执行任意表达式1false则执行任意表达式2

3.5 流程控制

3.5.1 流程控制基本概念

流程控制:

计算机在执行代码时对指令代码执行顺序的控制
Java 流程控制主要分三种:
顺序执行
分支执行
重复执行
顺序执行
按代码和语法出现的先后顺序执行
分支执行
根据判断条件执行分支逻辑
可选分支、必选分支(多选一)、多分支、特殊分支(switch)
重复执行
根据条件循环执行
whiledo ... whilefor
breakcontinue

3.5.2 分支执行

可选分支(单分支,if true or false)
必选分支(双分支,if / else)
多分支(多重判断,if / else if / {else})
特殊分支(等值判断,switch caseswitch:
会对数据进行判断,如果等于某一个分支数据的值,会执行该分支的逻辑代码,并顺序执行后面的分支
如果一个分支都无法匹配,那么一个分支都不会执行,此时如果还想执行分支,可以增加 default 关键字(必选)
如果执行某个分支后,不想再执行其他分支,可以使用 break 关键字跳出当前分支
package chapter03;

public class Java01_FlowControl {
    public static void main(String[] args) {
        System.out.println("第一步");
        System.out.println("第二步");
        //判断条件表达式
//        int i = 10;
//        if (i == 10) {
//            System.out.println("分支");
//        }
        // 双分支结构
//        int i = 10;
//        if (i == 10) {
//            System.out.println("分支1");
//        } else {
//            System.out.println("分支2");
//        }
//        System.out.println("第三步");
        //多分支
        int i = 30;
        if (i == 10) {
            System.out.println("分支1");
        } else if (i == 20) {
            System.out.println("分支2");
        }
        else {
            System.out.println("分支3");
        }
        System.out.println("第三步");
    }
}
package chapter03;

public class Java02_FlowControlSpecial {
    public static void main(String[] args) {
        System.out.println("第一步");
        System.out.println("第二步");
        //特殊分支结构
        int i = 30;
        switch (i) {
            case 10:
                System.out.println("分支1");
            case 20:
                System.out.println("分支2");
            case 30:
                System.out.println("分支3");
            case 40:
                System.out.println("分支4");
        }
        System.out.println("第三步");
    }
}

3.5.3 重复执行

while:有条件循环
while (条件表达式) {}
先判断条件,{} 执行完毕后,重新判断条件
小心死循环
do {} while:
先执行 do{},再判断条件
至少执行一次
for ( a; b; c)
初始化表达式(用于条件表达式中的变量初始化)
条件表达式(决定是否执行循环)
更新表达式(控制循环次数)
break 跳出当前层循环,不再执行后续操作
continue 跳过当前层的这次循环,继续执行下次循环
package chapter03;

public class Java03_Circle {
    public static void main(String[] args) {
        System.out.println("第一步");
        //1. while 有条件循环
//        int age = 30;
//        while ( age < 40 ){
//            System.out.println("循环代码");
//
//            age++;
//        }
        //2. do while
//        int age =30;
//        do {
//            System.out.println("循环代码");
//        } while (age < 40);
        //3. for循环
        int age =30;
        for (int i=30;i<40;i++){
            System.out.println("循环代码");
        }

        System.out.println("第二步");
    }
}

4. 面向对象

面向对象:是一种编程思想,一种分析事物和解决问题的方式,我们通过编程语言的语法来体现这种思想

4.1 面向对象基本概念

类和对象:
类表示归纳和整理
对象表示具体事物
类:
class 类名 { 
特征(属性)
功能(方法)
}
步骤:(比如做一道红烧排骨)
先声明类(菜)
创建对象(红烧排骨)
声明属性,属性就是类中变量
声明方法(烹饪过程,void 方法名() {})
执行方法(对象.属性,对象.方法名())
注意:
在对同一个对象的不同属性进行操作的时候,需要用变量来引用这个对象
Cooking c = new Cooking()
创建对象,用对象类型的变量来引用它,当处理变量时,处理的其实是引用的对象
基本数据类型不是对象,因此不是引用数据类型
用“+”拼接字符串
如果需要新菜,用new再次创建即可
package chapter04;

public class Java01_Object {
    public static void main(String[] args) {
        Cooking c = new Cooking();
        c.name="红烧排骨";
        c.food="排骨";
        c.execute();
        //TODO 面向对象
        Cooking c1 = new Cooking();
        c1.name = "红烧鱼";
        c1.food = "鲫鱼";
        c1.execute();
    }
}

class Cooking{
    //特征 属性
    //名字
    String name;
    //类型
    String type = "红烧";
    //食材
    String food;
    //佐料
    String relish="大料";
    //执行
    void execute() {
        System.out.println("准备食材:"+food);
        System.out.println("准备佐料:"+relish);
        System.out.println("开始烹饪");
        System.out.println(name+"烹饪完成");
    }

}
内存分为三个部分:栈、堆、元空间
	栈 存储方法、变量 User user
	堆 存储对象 new User()
	元空间 存储类的信息

对象是将内存地址赋值给变量,所以变量其实引用了内存中的对象,所以称之为引用对象,而该变量类型称为引用数据类型(new)
空对象(null)是特殊的对象,没有引用的对象(没有在堆中创建,箭头不存在),也称为关键字对象
所有引用类型变量的默认取值就是 null

在这里插入图片描述

4.2 属性

类的对象的相同特征

	语法类似变量的声明,属性类型 名称 = 值

	如果在声明属性时进行了初始化赋值,所有对象的属性就完全相同

	因此不用在声明属性时初始化,属性会在构造对象的时候默认初始化

	默认初始化值取决于属性类型(00.0false,空字符,null)

	变量 是方法的一部分,作用域小,只有在当前大括号内有效

	属性 是对象的一部分,不仅在当前类中有效,可以随对象在其他地方使用

	变量使用前必须初始化,否则会报错;但属性可以不用初始化,JVM 会自动完成初始化

4.3 方法

声明和调用方式

	名词:类、属性

	动词:方法(注意调用顺序,比如先注册后登录)

	void 表示方法的结果为空

	返回值类型 + 方法(),使用 return + 返回值 返回结果

4.4 方法参数

使用外部数据控制方法内部实现的操作(参数语法)

	内部:方法名(参数类型 参数名称)

	外部:传递参数

	当方法传递多个参数时,参数个数、类型、顺序都要匹配

	当参数个数不确定,但类型相同时,可以采用 可变参数 语法声明

	格式:参数类型... 参数名称(String... name)

	如果方法头还包含其他类型参数,可变参数应声明在最后

4.5 参数传值

方法执行在栈内存中完成,在栈帧中存放参数、变量、执行逻辑

	保持CPU箭头不变,调用新方法压栈、执行完方法弹栈

	引用对象及属性存于堆中,调用新方法压栈时,传递箭头(同一个引用地址),但如果进行 字符串拼接 等操作,会创建一个新的字符串(指向新的引用地址)(传递 对象 修改属性不会),如果执行方法内的 s = s + 10,则 新s 和 原s 指向的不是同一个引用地址,因此,执行完毕后,会弹出方法内的 新s 和引用地址,打印出的还是 原s

	Java 中方法参数的传递为 值传递

	基本数据类型传数值,引用数据类型传引用地址

在这里插入图片描述

4.6 静态

	针对于具体对象的属性称为对象属性,成员属性,实例属性

	针对于具体对象的方法称为对象方法,成员方法,实例方法

	static:和对象无关,只和类相关(可以通过 类名. 直接访问)

	先有类,再有对象

	有成员方法的时候,静态方法(类)一定存在,因此 可在成员方法内部调用静态方法/属性,但静态方法不能访问成员方法/属性

4.7 静态代码块

	static { xxx }

	类的信息加载完成后,会自动调用静态代码块,可以完成静态属性的初始化(按照声明静态代码块顺序依次执行)

	对象准备创建时(对象创建前),也会自动调用代码块 {xxx},但不是静态的
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孟意昶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值