一.java的关键字和保留字,标识符和数据类型

00编写第一个java文件

以下文件代码是名为HelloHu.java 文件

class HelloHuman{
    public static void main(String[] args){
    System.out.println("hellohuman");
    }
}

使用javac HelloHu.java 编译会生成 HelloHuman.class 的字节码文件

这时候只能通过java HelloHuman 解码,而不能是java HelloHu 解码

总结:对第一个java程序进行总结
1,java程序编写-编译-运行的过程
我们将编写的java代码保存在以".java"结尾的源文件中
使用javac.exe命令编译我们的java源文件。格式: javac 源文件名.java

编译:
运行:使用java.exe命令解释运行我们的字节码文件。 格式: java 类名
2.在一个java源文件中可以声明多个c1ass,但是,只能最多有一个类声明为public的.

而且要求声明为public的类的类名必须与源文件名相同

3.程序的入口是main()方法。格式是固定的

public class Hello{
    public static void main(String[] args){//public static void main(String a[]) //argument 参数
        System.out.println("hello world");
    }
}

class Person{
}

class Animal{
}

4.输出语句:
System.out.println():先输出数据,然后换行
System.out.print():只输出教据


5.每一行执行语句都以";"结束


6,编译的过程:编译以后,会生成一个或多个字节码文件。字节码文件的文件名与java源文件中的类名相同

补充:java程序运行关系

1、java源文件(.java文件)

2、java编译器即javac.exe

3、java字节码文件(.class文件)

4、由解释执行器即(java.exe)将字节码文件加载到java虚拟器(jvm)

5、字节码文件(.class)就会在java虚拟机中执行

简单的java基本语法--定义变量,初始化,赋值

定义变量

1、什么是定义变量?

int a; 这就是定义了一个变量,变量名是a

float haha;这也定义了一个变量,表示一个float类型的小数,变量名是haha

初始化变量

在定义变量的时候,就给值

int a=45;这就是初始化变量a

给变量赋值

比如你先定义了变量:int tt;

然后再给值tt=780;  ->这就是给变量赋值

变量的使用
1.java定义变量的格式    数据类型 变量名= 变量值;


2.说明:

01.变量必须先声明,后使用
02.变量都定义在其作用域内。
在作用域内,它是有效的。换句话说,出了作用域,就失效了

03.同一个作用域内,不可以声明两个同名的变量

变量的分类----按声明的位置的不同

在方法体外,类体内声明的变量称为成员变量

在方法体内部声明的变量称为局部变量

成员变量(Field)

成员变量是定义在类中但在方法、构造方法或任何块之外的变量。它们属于对象的一部分,与对象的生命周期相同。

  • 作用域:成员变量在整个类中都是可见的,可以被类的任何方法访问。
  • 生命周期:成员变量的生命周期与创建它的对象的生命周期相同。当对象被创建时,成员变量被初始化;当对象被垃圾回收时,成员变量也随之消失。
  • 默认值:如果未初始化,整型成员变量默认为0,浮点型为0.0,布尔型为false,引用类型为null。
  • 访问控制:可以使用访问修饰符(如public、private、protected)来控制成员变量的可见性。
  • 示例:
public class MyClass {
    private int memberVar; // 成员变量
    public void myMethod() {
        // 方法体
    }
}

局部变量(Local Variable)

局部变量是在方法、构造方法或任何代码块内部声明的变量。它们只在声明它们的作用域内可见。

  • 作用域:局部变量只在声明它们的块内可见,例如在一个方法或一个循环内。
  • 生命周期:局部变量的生命周期仅限于声明它们的块的执行期间。当控制流程离开这个块时,局部变量将不再存在。
  • 必须初始化:在使用之前,局部变量必须被显式初始化。
  • 示例
public class MyClass {
    public void myMethod() {
        int localVar = 0; // 局部变量
        // 方法体
    }
}

区别

  • 作用域:成员变量在整个类中可见,局部变量仅在声明它们的块内可见。
  • 生命周期:成员变量的生命周期与对象相同,局部变量的生命周期仅限于它们声明的块。
  • 初始化:成员变量可以不初始化(有默认值),局部变量必须在使用前初始化
  • 访问控制:成员变量可以使用访问修饰符,局部变量不可以。

01java的关键字

Java的关键字是预定义的,具有特定含义的词,它们不能用作变量名、方法名或其他标识符名称。

以下是一些Java中常见的关键字:

- `abstract`:声明抽象类或方法。
- `assert`:断言,用于调试。
- `boolean`:布尔数据类型。
- `break`:跳出最近的循环或switch语句。
- `byte`:8位有符号整数数据类型。
- `case`:用于switch语句。
- `catch`:异常处理。
- `char`:16位Unicode字符数据类型。
- `class`:定义类。
- `const`:Java中没有const关键字,final变量可以作为常量。
- `continue`:继续下一次循环。
- `default`:用于switch语句的默认分支。
- `do`:do-while循环。
- `double`:64位浮点数数据类型。
- `else`:if语句的否定分支。
- `enum`:枚举类型。
- `extends`:类继承。
- `final`:声明不可改变的变量、方法或类。
- `finally`:无论是否发生异常,都会执行的代码块。
- `float`:32位浮点数数据类型。
- `for`:for循环。
- `goto`:Java中没有goto关键字。
- `if`:条件语句。
- `implements`:接口实现。
- `import`:导入类或包。
- `instanceof`:类型检查。
- `int`:32位整数数据类型。
- `interface`:定义接口。
- `long`:64位整数数据类型。
- `native`:声明本地方法。
- `new`:创建对象或数组。
- `package`:声明包。
- `private`:访问控制。
- `protected`:访问控制。
- `public`:访问控制。
- `return`:从方法返回值。
- `short`:16位整数数据类型。
- `static`:静态方法或变量。
- `strictfp`:浮点数表达式严格遵守精度要求。
- `super`:引用父类。
- `switch`:条件分支语句。
- `synchronized`:同步方法或代码块。
- `this`:引用当前对象。
- `throw`:抛出异常。
- `throws`:方法可能抛出的异常。
- `transient`:序列化时忽略该字段。
- `try`:尝试执行代码块。
- `void`:无返回值的方法。
- `volatile`:变量可以被多个线程同时读写。

02java的保留字

保留字是Java语言中预留的词汇,目前尚未使用,但未来版本可能会成为关键字。Java的保留字包括:

- `goto`:虽然Java中没有使用goto关键字,但它是一个保留字。
- `const`:Java中没有const关键字,但保留作为可能的未来使用。

请注意,这个列表可能不是详尽无遗的,因为Java语言可能会随着新版本的发布而增加新的关键字。


03java的标识符

在Java中,标识符是用来给类、变量、方法等命名的有效名称。Java对标识符有以下规则和限制:

1. **命名规则**:
   - 标识符可以包含字母、数字、下划线(_)和美元符号($)。
   - 标识符不能以数字开头。

2. **大小写敏感**:
   - Java是大小写敏感的语言,这意味着`identifier`和`Identifier`是两个不同的标识符。

3. **关键字和保留字**:
   - 标识符不能是Java的关键字或保留字。

4. **Unicode字符**:
   - 可以使用Unicode字符作为标识符的一部分,包括汉字等。

5. **命名约定**:
   - 虽然不是强制性的,但Java社区有一些约定俗成的命名规则,比如类名通常使用大驼峰式(CamelCase),变量和方法名使用小驼峰式(camelCase)。

6. **可见性**:
   - 标识符的可见性可以被访问修饰符(如`public`、`private`、`protected`)控制。

7. **实例**:
   - 合法的标识符示例:`variable1`, `_myVariable`, `$variable`, `class1`
   - 不合法的标识符示例:`2variable`(以数字开头),`static`(关键字),`for`(关键字)

8. **命名空间**:
   - Java中没有命名空间的概念,但可以通过包(package)来组织类。

9. **重载**:
   - 方法名可以相同,但参数列表必须不同,这是Java支持方法重载的方式。

10. **重写**:
    - 子类可以重写父类的方法,方法名和参数列表必须与被重写的方法相同。

遵循这些规则,你可以创建有效的Java标识符,以确保代码的可读性和正确性。

04java的数据类型

Java的数据类型主要分为两大类:基本数据类型引用数据类型

基本数据类型(Primitive Data Types)


基本数据类型是Java语言预定义的,用于存储基本值的数据类型。Java有8种基本数据类型:

1. **整型**
   - `byte`:占用内存 一个字节,8位有符号整数,取值范围从 -128 到 127。
   - `short`:占用内存 两个字节16位有符号整数,取值范围从 -32,768 到 32,767。
   - `int`:占用内存 四个字节32位有符号整数,默认的整数类型,取值范围从 -2^31 到 2^31-1。
   - `long`:占用内存 八个字节64位有符号整数,取值范围从 -2^63 到 2^63-1。在数值后加上 `L` 或 `l` 来表示

2. **浮点型**
   - `float`:占用内存 四个字节 32位单精度浮点数。在数值后加上 `F` 或 `f` 来表示
   - `double`:占用内存 八个字节64位双精度浮点数,默认的浮点数类型

3. **字符型**
   - `char`:可以表示 单个字符,字符类型是char。char是两个字节16位Unicode字符,可以存储任何字符(可以存放汉字)

多个字符我们称为字符串,在java中String这种数据类型表示,但是String不是基本数据类型,而是类,类是复合数据类型

4. **布尔型**
   - `boolean`:只有两个可能的值:`true` 和 `false`。

引用数据类型(Reference Data Types)


引用数据类型指向内存中的一个对象,而不是直接存储数据。Java中的引用数据类型包括:

1. **类(Class)**:用户自定义的对象类型。
2. **接口(Interface)**:可以包含抽象方法和默认方法,但不能直接实例化,需要通过类实现。
3. **数组(Array)**:一种容器对象,可以包含固定数量的单一类型值,可以是基本数据类型或引用数据类型的数组。
4. **枚举(Enum)**:固定数量的常量值集合,通常用于表示一组固定的常量。
5. **字符串(String)**:字符序列,虽然在Java中是一个类,但它是不可变的,并且有大量用于字符串操作的方法。

### 自动装箱与拆箱
Java 5 引入了自动装箱和拆箱机制,允许自动地在基本数据类型和相应的包装类(如 `Integer`、`Double` 等)之间转换。例如,自动装箱可以将 `int` 类型转换为 `Integer` 类型,而拆箱可以将 `Integer` 类型转换回 `int` 类型。

### 包装类(Wrapper Classes)
Java为每个基本数据类型提供了对应的包装类,使得基本类型可以拥有对象的特性,如方法调用。包装类如下:

- `Integer` 对应 `int`
- `Double` 对应 `double`
- `Float` 对应 `float`
- `Long` 对应 `long`
- `Short` 对应 `short`
- `Byte` 对应 `byte`
- `Character` 对应 `char`
- `Boolean` 对应 `boolean`

这些包装类提供了许多有用的方法,比如数值转换、字符串表示等。自动装箱和拆箱机制使得在基本类型和包装类之间转换变得非常方便。
 

java基本数据类型之间的运算规则

Java中基本数据类型之间的运算遵循一些明确的规则,这些规则确保了运算的正确性和数据类型的安全转换。以下是一些关键的运算规则:

1. **隐式类型转换(小范围类型到大范围类型)**:
   - 当不同类型的基本数据类型参与运算时,较小范围的类型会自动转换为较大范围的类型。例如,

`byte` 和 `int` 相加时,`byte` 会先转换为 `int` 类型,然后再进行运算。

byte,char,short  => int => long => float => double 

2. **数值提升(小数类型提升为较大数类型)**:
   - 在涉及浮点数和整数的运算中,整数会自动转换为浮点数。例如,`int` 和 `float` 相加时,`int` 会转换为 `float`。

3. **按位运算符的类型转换**:
   - 使用按位运算符(如 `&`、`|`、`^`、`<<`、`>>`、`>>>`)时,操作数会被转换为整数类型 `int`,除非它们已经是 `long` 类型,在这种情况下,结果将是 `long` 类型。

4. **赋值兼容性**:
   - 当将一个表达式的结果赋值给一个变量时,结果的类型必须与变量的类型兼容。如果类型不兼容,编译器会报错。

5. **运算结果的类型**:
   - 运算结果的类型取决于参与运算的操作数的类型。如果操作数都是整数类型,结果将是整数类型;如果至少有一个操作数是浮点类型,结果将是浮点类型。

6. **溢出处理**:
   - 当整数运算的结果超出了该类型的表示范围时,会发生溢出。Java中整数溢出时,结果会环绕回该类型的有效范围内。例如,`int` 类型溢出时,结果会循环到 `-2^31` 到 `2^31-1` 的范围内。

7. **精度丢失**:
   - 在涉及浮点数的运算中,可能会发生精度丢失,因为浮点数不能精确表示所有十进制小数。

8. **字符和整数的运算**:
   - 字符类型 `char` 在运算时会被隐式转换为其对应的整数值(Unicode码点),例如,`'A'` 转换为整数 `65`。

9. **布尔类型的运算**:
   - 布尔类型 `boolean` 只能用于逻辑运算,不能用于算术运算。

10. **字符串和数字的运算**:
    - 字符串不能直接与数字进行运算。如果需要将字符串转换为数字,必须使用相应的解析方法,如 `Integer.parseInt()`。

11.**强制类型转换**,自动类型提升运算的逆运算

class NumTest{
	public static void main(String[] args){
		double d1 = 12.4;
		int i1 = (int)d1;//截断操作
		System.out.println(i1);
	}
}

a.需要使用强制符:()

b.注意点:强制类型转换,可能导致精度丢失

关于进制


所有数字在计算机底层都以二进制形式存在


对于整数,有四种
>二进制(binary)    0,1    满2进1.以0b或0B开头.
>十进制(decimal): 0-9,满10进1.
>八进 (octal): 0-7,满8进1,以数字0开头表示,
>十六进制(hex): 0-9及A-F,满16进1,以0x或0X开头表示。此处的A-F不区分大小写.
如:0x21AF+1= 0X21B0

进制转换问题

先学习几个单词:

dec: 十进制

bin:二进制

oct:八进制

hex:十六进制

二进制的转换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值