吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 552|回复: 2
收起左侧

[学习记录] Java自学第二天-数据类型、类、对象、源文件、包

[复制链接]
xiaotian1339 发表于 2022-3-31 20:04

自学Java-0基础到框架(JDK17 ->JDK8)-day02

昨天发帖说自己从jdk17入门,发现好多大佬都在jdk8,甚至觉得目前自己用jdk12都觉得版本很高。发现目前还是jdk8为主流。趁现在只写了“hello world”赶紧转jdk8。jdk8学完之后再慢慢了解jdk17的新特性,不过目前基础部分使用jdk8和jdk17应该大差不差

1.基本数据类型

变量就是申请内存来存储值。

Java的两大数据类型

  • 内置数据类型
  • 引用数据类型

内置数据类型

  1. Byte
    • 长度8位

    • 有符号

    • 以二进制补码表示的整数

    • -128~0(默认)~127

    • 可在数组中使用byte类型替代int类型。因为 byte 变量占用的空间只有 int 类型的1/4

    • byte a = 100;
      byte b = -10;
  2. short
    • 长度16位

    • 有符号

    • 二进制补码表示的整数

    • -2^15~0(默认)~(2^15)-1

    • 可在数组中使用short类型替代int类型。因为 short 变量占用的空间只有 int 类型的1/2

    • short a = 7652;
      short b = -1245
  3. int
    • 长度:32位

    • 有符号

    • 二进制补码表示的整数

    • -2^31~0(默认)~(2^31)-1

    • 一般地整型变量默认为 int 类型

    • int a = 123456;
      int b = -20321;
  4. long
    • 长度:64 位

    • 有符号

    • 以二进制补码表示的整数

    • -2^63~0L(默认)~(2^63) -1

    • 数字后加Ll否则Java将作为整型解析

    • long a = 1234567L;
      long b = -1234567L

      L"理论上不分大小写,但是若写成"l"容易与数字"1"混淆,不容易分辩。所以最好大写

    以上类型都可以用十进制,八进制,十六进制表示0前缀表示八进制     0x表示16进制
    >
    > java > int a = 100; > int b = 0142; > int c = 0x64; >

  5. float
    • 单精度、32位浮点数

    • 在储存大型浮点数组的时候可节省内存空间

    • 浮点数不能用来表示精确的值,如货币

    • 默认0.0f

    • float a = 1234.5f
  6. double
    • 双精度、64 位浮点数

    • 浮点数的默认类型为 double 类型

    • double类型同样不能表示精确的值,如货币

    • 默认0.0d

    • double a = 6D;
      double b = 6.;
      double c = 7.0;
      double d = 8.D;
      double e = 1.234

      上面都表示double类型数据

  7. boolean
    • 长度:一位

    • 只能取true 或 false

    • 默认值是 false

    • boolean a = true;
  8. char
    • 单一的 16 位 Unicode 字符

    • 最小值是 \u0000(十进制等效值为 0)

    • 最大值是 \uffff(即为 65535)

    • char 数据类型可以储存任何字符

    • char letter = 'A';
/*
* 1.二进制位数: 类型.SIZE
* 2.包装类:java.lang.类型
* 3.最小值:类型.MIN_VALUE
* 4.最大值:类型.MAX_VALUE
*/
        //以int类型为例
        System.out.println("基本类型:int 二进制位数:" + Integer.SIZE);  
        System.out.println("包装类:java.lang.Integer");  
        System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);  
        System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE); 

引用类型

  • 引用类型指向一个对象,指向对象的变量就是引用变量,一旦声明后,类型就不能被改变了

  • 它的值是指向内存空间的引用,就是地址,所指向的内存中保存着变量所表示的一个值或一组值。

  • 对象、数组都是引用数据类型

  • 默认值null

  • 一个引用变量可以用来引用任何与之兼容的类型

  • ClassName obj = new ClassName();

常量

常量在程序运行时是不能被修改的

final关键字来修饰常量

final double PI = 3.1415926535898

转义字符

zhuanyi

类型转换

整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算,转换从低级到高级

(低级)byte,short,char—> int —> long—> float —> double (高级)
  • 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入
  • 转换过程中可能导致溢出或损失精度
  • 不能把对象类型转换成不相关类的对象
  • 不能对boolean类型进行类型转换
  • 在把容量大的类型转换为容量小的类型时必须使用强制类型转换

类型自动转换

必须满足转换前的数据类型的位数要低于转换后的数据类型

类型强制转换

  • 条件:转换的数据类型必须是兼容的

  • 格式:(强转类型)值

  • a = 123.456;
    int inta = (int)a;
  • 整数默认类型int,小数默认类型double,float需要在数字后跟fF

变量

qWTjPJ.png

  • 静态变量属于类,该类不生产对象,通过类名就可以调用静态变量
  • 实例变量属于该类的对象,必须产生该类对象,才能调用实例变量
  • 实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量
  • 静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了

2.类和对象

类是一个模板,它描述一类对象的行为和状态。其中包含属性和方法

对象

类的实例化

构造方法

  • 每个类都有构造方法。如果没有显式地为类定义构造方法,Java 编译器将会为该类提供一个默认构造方法

  • 在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法

  • public class First{
      public First(){
          //构造器1
      }
    
      public First(String nihao){
          // 这个构造器2仅有一个参数:name
      }
    }

创建对象

在Java中,使用关键字 new 来创建一个新的对象。

  • 声明:声明一个对象,包括对象名称和对象类型
  • 实例化:使用关键字 new 来创建一个对象
  • 初始化:使用 new 创建对象时,会调用构造方法初始化对象

例如“犬”是类,斗牛犬、柴犬、牧羊犬、柯基等除品种外包含各种详细信息(年龄、毛色、动作等)则为“犬”这个类的实例化对象

访问实例变量和方法例子

public class FirstClass {

    /*
    * 因为本来有一点python面向对象的基础
    * 所以写了一个示例函数,感受一下与其的不同和相同之处
    */

    String name;
    String color;
    int age;
    int size;

    public FirstClass(){
        System.out.println("创建小狗对象");
    }

    public void setColor(String color) {
        this.color = color;
        System.out.println("Color:"+this.color);
    }

    public void setName(String name) {
        this.name = name;
        System.out.println("name:"+this.name);
    }

    public void setSize(int size) {
        this.size = size;
        System.out.println("size:"+this.size);
    }

    public void setAge(int age) {
        this.age = age;
        System.out.println("age:"+this.age);
    }

    public void getInfo() {
        System.out.println("调用getInfo方法!\n");
    }

    public static void main(String[] args) {
        FirstClass chai = new FirstClass();
        chai.setName("chaiquan");
        chai.setColor("Orange");
        chai.setAge(18);
        chai.setSize(2);
        chai.getInfo();

    }
}
  • this 指向对象本身的指针,形参与成员名字重名,用 this 来区分。
  • super 超(父)类对象的一个指针。

输出结果:

创建小狗对象
name:chaiquan
Color:Orange
age:18
size:2
调用getInfo方法!

3.源文件、包

Java包

  • 包主要用来对类和接口进行分类。当开发 Java 程序时,可能编写成百上千的类,因此很有必要对类和接口进行分类
  • 作用就是 c++ 的 namespace 的作用,防止名字相同的类产生冲突

import语句

  • import 语句就是用来提供一个合理的路径,使得编译器可以找到某个类

源文件

  1. 一个源文件中只能有一个 public 类,多个非 public 类
  2. 源文件的名称应该和 public 类的类名保持一致
  3. 如果一个类定义在某个包中,那么 package 语句应该在源文件的首行
  4. 如果源文件包含 import 语句,那么应该放在 package 语句和类定义之间。如果没有 package 语句,那么 import 语句应该在源文件中最前面
  5. import 语句和 package 语句对源文件中定义的所有类都有效。在同一源文件中,不能给不同的类不同的包声明

资料

Java强制要求类名(唯一的public类)和文件名统一,因此在引用其它类时无需显式声明。在编译时,编译器会根据类名去寻找同名文件

例子

在刚刚创建的FirstClass类目录下创建SecondClass类

public class SecondClass {
    public static void main(String[] args) {
        FirstClass fir = new FirstClass();
        fir.setSize(2);
        fir.setName("fir");
        FirstClass sec = new FirstClass();
        sec.setName("sec");
        sec.getInfo();
    }
}

执行结果:

创建小狗对象
size:2
name:fir
创建小狗对象
name:sec
调用getInfo方法!

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

赵小迪 发表于 2022-4-1 11:24
楼主通过什么途径学习的呀
 楼主| xiaotian1339 发表于 2022-4-1 23:24
赵小迪 发表于 2022-4-1 11:24
楼主通过什么途径学习的呀

因为有点别的语言的基础,这个是在菜鸟教程上看的,然后调整了一下学习的顺序
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 13:39

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表