java入门基础

 

Java基础

编程语言

编码 idea VScode vim

编译 使用javac去编译

javac HelloWorld.java会生成同名字节码文件

运行 使用java 命令 运行

不需要.class

找不到主类

字节码文件是否生成

java Hello命令对不对,文件名对不对

CLASSPATH不要写错,可以不写,如果其余没有问题再回来看

高级语言的编译方式

编译型

使用专门的编译器,针对特定的操作系统,将源代码翻译成机器码

C C++

解释型

有专门的解释器,将源码解释成特定平台的机器码,且立即执行,不会生成新文件

就是将编译型语言的编译和执行结合成一步同时进行

缺点 效率低

混合型

编码+注释

源码要经过编译 生成与平台无关字节码

class文件不是可执行程序

需要jvm去解释执行 Java为不同系统提供不同虚拟机

*Java跨平台原理

wirte once run any where

常用命令

javac 编译命令

格式 Javac [-d 目录路径] 文件名.java

作用 编译源码文件 获得字节码文件:将字节码文件存放-到后面指定的位置

使用javac HelloWorld.java/不指定目录.class存放当前文件

javac -d obj/HelloWorld.java

java 运行的命令

格式 Java[-cp文件的目录] 类名

作用 运行字节码文件

package

定义格式

package 包名

要求

package语句必须是程序第一条可执行代码

package语句在一个Java文件中最多有一条

package语句在一个Java文件可以没有

这个包名的代码package com.briup; 编译后 字节码文件会存放到

com/briup下

场景

教务系统:学生系统 教师系统 新增修改删除查询

package按角色去分模块

com.briup.students;

AddStudent

EditStudent

DeleteStudent

UpdateStudent

按功能去分模块

com.briup.add;

addStudent;

导包

import 包名.类名;

import java.util.Scanner;

不需要导包可以使用

java.lang

JVM

day03

第二章

注释://单行注释 /*多行 */ /**文档注释

多行注释不能嵌套多行注释

关键字:被java赋予特殊含义的单词

保留字:暂时没被java赋予特殊含义的单词

比如const 在java在Scrip中关键字

标识符(变量 常量 方法)

命名规则

1.不能使用java中保留字 关键字

2.可以使用由字母 数字 下划线和$组成

3.数字不能开头

4.大小写敏感

5.长度没有限制

编码器习惯

命名规则:

类和接口

首字母大写(大驼峰)

class HelloWorld

class HelloMyWorld

方法和变量

首字母小写 第二个单词开始每个首字母大写

int num;

getStudentById();

常量

全词大写 多个单词之间用_分割

LIGHT_COLOR

临时变量 一般用_开头

_a

思考

int _ =0;

int $=0;

变量和常量的定义

常量

定义: 在程序运行中,他的值不可以发生改变

除了null,其他常量可以直接用输出语句输出

分类

字面值常量

字符串常量

用""扩起来的0个或者1个或者多个字符

""

"0"

"hello"

"a"

整数常量

0 1 2 3 99 -10 -19

小数常量

0.1 -1.1

字符常量''单引号扩起来的单个字符

'a' 'B' '你' '好'

布尔常量

true false

空常量

null

自定义常量

声明final关键字

final int NUM_A = 1;

类的常量定义在main的外部

const 在JavaScript中声明常量的关键字

变量

定义 用于储存值的一种容器

强类型语言:比如在java中 声明变量需要指定他的数据类型,并且这个类型不能更改了

int a;

a = 10;

a = 10.1;// 报错

弱类型语言中:比如javascript 声明变量不需要指定数据类型,这个类型赋值时确定

let a;

a = 10;

a = 10.1;

a = true;

a = {name:"张三",age:12};

a = [1,2,3,4,5,6,7,{name:"张三",age:12},[],true]

声明

int a = 10; // 声明和初始化

或者

int a; // 声明

a = 10; // 初始化

注意:

java中变量一定要先声明 再赋值 再使用

S.o.p(a);// a?

int a;

int a;

S.o.p(a); // a=?

a = 1;

基本数据类型

整型

int a = 20;

long b = 20L; b = 20l;

byte

short

浮点型

double a = 1.0D; a = 1.0d;

float a = 1.0F; a = 1.0f;

字符型

char 单引号扩起来的单个字符

不可以为空单引号

布尔型

boolean(值:true false)

引用数据类型

String

数组

接口

比特位:bit 是计算机存储信息的最小单位 二进制 0 1

字节byte 是计算机分配内存的最小单位 通常用B表示

1byte == 8bits

转义字符

\

\n 换行

\t 缩进

\\ \

\'

\"

进制

二进制 0 1 组成

0b1 0b0

八进制 0-7组成 00-07(0开头)

十进制 0-9组成

十六进制 0-9 abcdef组成 不区分大小写

0x0a(0x开头)

数据类型转换

数据类型表示范围

隐式类型转换double>float>long>int>short>byte

char

在赋值过程 小数据类型值或变量可以直接赋值给大类型变量 类型会自动转换

大类型数据给小类型数据可能会损失 编译错误

short/byte/char自动转换int 计算

各种类型的值都参与计算,范围小的会自动提升范围大的 计算

显示类型转换

赋值过程如果大类型都赋值给小类型变量 编译报错 可以强制类型转换

格式float float1=(float)3.14;

强制转换 注意值的问题

操作符

对于字面值常量 变量进行操作的符号 也叫运算

表达式

用操作符将字面值常量,变量连起来的式子

运算符分类

算数运算符

+ - * / %

求余运算 结果正负符号只与表达式运算符左边操作符符号有关

表达式只要有字符串参与 结果都是字符串

字符串加其他任何类型数据 结果都是字符串System.out.println("hello"+'a'+1); helloa1

区分字符串和字符

自增 自减 a++ ++a 没区别单独使用

赋值运算符

= *= <<= &=

比较 条件 关系 运算符分类

> < >= <= == !=

// 在js

== != 判断值是否相同

=== !== 判断类型是否相同 在判断值

从键盘录入两个整形数字 比较大小 输出结果

移位操作符

逻辑操作符

&& ||

带逻辑短路

2>1&&3>2;

同真则真

2>3&&3>2

true||fasle 结果为true

! 非 取反

^ 异或

两个都是0 结果0

两个都是1 结果0

1个1 1个0 结果1

有假则假

三目运算符

求两个数最大值 最小值

表达式?语句1:语句2

可读性低 不建议

流程控制

顺序执行

分支结构

if(){

} else{

}

循环结构

for while do-while

switch case

switch case()

case 1:

语句1;

break;

case 2:

语句2;

break;

default:

所有条件都不匹配 执行这里

如果满足case语句 没有break 代码回顺序往下执行 直到遇到break 如果一直没有break 执行default

break;跳出当前循环

循环语句遇到break跳出循环

continue

结束本次循环 进入下次循环

循环结构

for

for(初始化语句;条件判断语句;条件控制语句){

// 循环语句体

}

// 死循环

for(;;){

}

while

while(条件判断语句){

循环语句

条件控制语句

}

// 死循环

while(true){

}

do-while

do{

循环语句

条件控制语句

}while(条件判断语句)

// 死循环

do{

}while(true)

循环中的几个关键字

break;

跳出当前循环

循环语句遇到break关键字,循环直接结束

continue;

结束本次循环,进入到下一次循环

label;

代码中出现多层循环嵌套,label标签配合break关键字,可以使程序从内部循环中跳出

如果想让break或continue针对某一个指定的循环起作用,那么可以使用label标签 给循环起名字,然后 使用break或continue加上label标签名即可。

循环嵌套

一个循环可以嵌套另外一个 或者多层for 循环

方法

就是完成特定功能的代码块

通过方法的定义和调用,可以大大提高代码的复用性和可读性

定义格式:

修饰符 返回值类型 方法名 形参列表 形式参数列表

public void main (){

// 方法体

}

public int getSum(int a,int b){

return a + b;

}

getSum(1,2);

方法重载

同一个类中,如果函数名相同,但是参数列表不同(参数的数据类型不同、参数的个数不同),就构成方法的重载

重载与返回值类型无关

数组

表示一块连续的内存空间

可以存储多个元素

要求元素的数据类型一致

数组定义的方式

// 数据类型[] 数组名

int[] arr;

double[] arr;

// 数据类型 数组名[]

int arr[]

double arr[]

数组在没有初始化的时候不能使用

数组长度

arr.length 是一个属性 不是方法

必须在创建数组对象时就明确指定

一旦确定,无法改变

>=0 不能为负数

数组的下标从0开始 数组的下标最大值是 length - 1;

数组异常

数组下标越界

java.lang.ArrayIndexOutOfBoundsException

索引越界异常发生在尝试访问数组或集合的某个位置时,该位置超出了实际存在的范围。

例如,数组的索引是从0到数组长度减1,如果尝试访问超出这个范围的索引,就会抛出IndexOutOfBoundsException。

public class Main {

public static void main(String[] args) {

int[] numbers = {1, 2, 3, 4, 5};

System.out.println(numbers[5]); // 尝试访问数组的第六个元素

}这段代码会抛出IndexOutOfBoundsException,因为数组numbers只有5个元素,索引范围是0到4。

}

空指针异常

java.lang.NullPointerException

空指针异常发生在尝试使用一个未被分配内存的引用变量时。

换句话说,当你尝试调用一个未指向任何对象的引用变量的方法或访问其字段时,就会抛出NullPointerException。

public class Main {

public static void main(String[] args) {

String str = null;

System.out.println(str.length()); // 尝试访问null引用的length方法

}

}这段代码会抛出NullPointerException,因为str没有指向任何字符串对象。

数组的默认值

动态初始化后的数组会有默认值

int 0

double float 0.0

char \u0000

boolean false

String null

数组初始化

动态初始化

int[] arr1 = new int[3];

静态初始化

int[] arr2 = new int[]{1, 2, 3, 4, 5};

int[] arr3 = {1, 2, 3, 4, 5};

注意错误写法

内存空间

使用

工具类

注意导包

java.util.Arrays 包含了操作数组的很多方法

Arrays.copyOf(array,10);

Arrays.toString(array);

Arrays.sort(arr1);

Arrays.fill(arr1,10)

数组拷贝

数组的长度不能更改,但是如果有更多的元素存入数组,可以创建一个新的更大的数组,将旧的数组中的元素放进去,然后再放新数组

java.lang.System 中 有个方法

arraycopy 可以实现复制数组中的元素的功能

[0,1,2,3]

[0,0,0,0,0,0,0,0,0,0]

[0,1,2,0,0,0,0,0,0,0]

arraycopy(

老数组,

int 从哪里开始复制, 0

新数组,

int 复制到哪里,0

int 长度,3

)

二维数组

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

方式二

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

元素的赋值与访问

可变参数列表本质是一个数组 方法中使用可变参数列表 比用数组做参数更强大

可变参数和普通参数共同存在 可变参数必须放到最后一个参数的位置

public ststic void addAB{int a,int b}

public ststic void addAB(double a,double b}

学习中遇到所有报错

编译型报错 Javac

运行型 Java

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值