Java基础知识总结

知识点:

1. 当程序在JVM(java虚拟机中运行时),JVM会在内存中划分一块区域,各区域中内容的执行方式与类型都不同。内存区域划分如下:

寄存器:

  • 寄存器给cpu用。

本地方法区:

  • 调用系统底层内容。

方法区:

  • 方法区也称为数据区、共享区、BSS。
  • 存放静态变量,存放静态方法与数据的代码。
  • 存放非静态方法与非静态数据的代码。

栈内存:

  • 存储的都是局部变量。
  • 栈中变量的所属的作用域一旦结束,该变量自动释放。
  • 函数调用时会自动加载进入栈内存区。

堆内存:

  • 存储的是数组和对象。
  • 凡是new建立的全都存在堆里面。
  • 堆里面存储实体,实体为是存多个数据的地方,堆会对里面的数据进行默认初始化。
  • 每一个实体都有首地址。
  • 堆内存中的每一个变量都有默认初始化值,根据类型的不同而进行不同的初始化。
  • 将堆内存中存储实体的首地址给栈中函数的局部变量。
  • Java中有自动内存回收机制,对比于java与c++,在c++中是程序员自己手动回收内存,避免内存泄露。在java中有自动内存回收机制,java内存管理优于c++。

2. 函数中只能调用函数不能定义函数。

3. 函数只有在被调用时才会加载进入内存,调用结束后会从内存中释放直到下一次调用才会被加载进入内存,函数被调用时会加载进入栈中。

4. 当程序中访问到数组中不存在的角标时,编译时编译器不会报错,只有当运行访问时才会报错。

5. 当引用变量没有任何实体指向时,还在用其操作实体就会发生异常。

6. 对一个引用进行进行打印操作时,打印出来的字符中含有@,在@左边是实体的类型,右边是实体的嘻哈置也就是内存中存放的地址。

7. 面向对象的优点:

  • 符合现在人们思考的习惯。
  • 让复杂的事情变得简单化。
  • 让曾经的执行者变为现在的指挥者。
  • exp1:项目主管一般可以自己单独解决项目中的所有问题,但是为了节省时间,就会去找一些专业编程的人也就是找具备这个能力的对象去完成这件事情,对于完成时间的过程不必管。
  • exp2:在餐馆用餐,我们需要寻找一个具备点单,上菜,倒水的对象。我们不必管这些过程是怎么实现的,我们只需要找到一个具备这些能力的对象即可。这个对象也就是餐馆的服务员。

8. 类就是用来描述事物两个特点的:属性,行为。

9. 对象就是该类事物实实在在存在的个体。

10. 构造函数首字母一般大写,一般函数首字母小写,便于区分。

11. 用java语言对现实生活中的事物进行描述。通过类的形式来体现。怎么描述事物呢?对于事物描述通常只关注两方面。一个是属性,一个是行为。

12. 只要明确该事物的属性和行为并定义在类中即可。对象:其实就是该类事物实实在在存在的个体。

13. 类与对象之间的关系?类:事物的描述。对象:该事物的实例。在java中通过new来创建的。

14. 构造函数:构建创造对象时调用的函数。作用:可以给对象初始化。建对象必须要通过构造函数初始化。

15. 一个类中如果没有指定的构造函数,那么该类中会有一个默认的空参数的构造函数。如果类中定义了指定的构造函数,那么该类中的默认构造函数就没有了。

16. 一般函数跟构造函数有什么区别呢?

  • 构造函数:对象创建时,就会调用与之对应的构造函数,对对象初始化。
  • 一般函数:对象创建后,需要函数功能时才调用。
  • 构造函数:对象创建时,会调用只调用一次。
  • 一般函数:对象创建后,可以调用多次。

17. 什么时候定义构造函数呢?在描述事物时,该事物已存在就具备一些内容,这些内容都定义在构造函数当中。

18. 当局部变量和成员变量重名时,可以用this来区分。

  • this代表对象,代表哪个对象呢?当前对象。
  • this就是所在函数所属对象的引用。
  • 简单说:哪个对象调用了this所在的函数,this就指这个对象。

18. static的特点:

  • static是一个修饰符,用于修饰成员。
  • static修饰的成员被所有的对象所共享。
  • static优先于对象存在,因为static的成员随着类的加载就已经存在了。
  • static修饰的成员多了一种调用方式,就可以直接被类名所调用。
  • static修饰的数据是共享数据,对象中存储的数据是特殊数据。
  • static变量是先于对象创建之前被加载的,所以静态方法中不能够有非静态变量,因为非静态变量只有等对象创建之后才能创建分配内存。

19. 成员变量和静态变量的区别:

两个变量的生命周期不一样。

  • 成员变量随着对象的创建而存在,随着对象的回收而释放。
  • 静态变量随着类的加载而存在,随着类的消失而消失。

调用方式不同。

  • 成员变量只能被对象所调用。
  • 静态变量可以被对象所调用,还可以被类名所调用。

别名不同。

  • 成员变量也称为实例变量。
  • 静态变量称为类变量。

数据存储位置不同。

  • 成员变量数据存储在堆内存的对象中,所以也叫对象的特有数据。
  • 静态变量数据存储在方法区的静态区,所以也叫对象的共享数据区。

20. 静态使用时的注意事项:

  • 静态方法只能访问静态成员。(非静态既可以访问静态又可以访问非静态)。
  • 静态方法中不可以使用this或者super关键字。
  • 主函数是静态的。

21. 静态什么时候用:

静态变量

  • 当分析对象中所具备成员变量的值都是相同的。
  • 这时这个成员就可以被静态修饰。
  • 只要数据在对象中都是不同的,就是对象的特有数据,必须存储在对象中,是非静态的。
  • 如果是相同的数据,对象不需要做修改,只需要使用即可,不需要存储在对象中,定义成静态的。

静态函数

  • 函数是否用静态修饰,就考虑一点,就是该函数功能是否有访问到对象中的特有数据。
  • 简单点说,从源代码看,该功能是否需要访问非静态成员变量,如果有需要,该功能就是非静态的。
  • 如果不需要,就可以将该功能定义成静态的。

22. Java数据类型:

  • 整型数据:byte 1字节、short 2字节、int 4字节、long 8字节。
  • 浮点型数据:float 4字节、double 8字节。
  • 字符型数据:char 2字节。
  • 布尔型数据:boolean 1字节。

23. unicode为国际标准码表包含ASCII码表。

24. 关于数据类型面试易错题:

class Demo
{
    public static void main(String[] args)
    {
        byte b=4;
        byte b1=3;
        byte b2=7;
        b=b1+b2;
    }
}

为什么以上代码编译时编译器会报错?

编译器报错为:

D:\Java_Code>javac  Demo.java
Demo.java:31: 错误: 不兼容的类型: 从int转换到byte可能会有损失
                        b=b1+b2;

答:编译器会报错,由于b,b1,b2都是byte类型,在做加法时是byte=byte+byte。如果变量b1,b2的值较大的话产生的和在byte的变量中不一定能够装的下。因为编译器在执行加法时不知道变量b1,b2中的具体数值,为了避免产生的和超出byte类型的范围从而丢失精度所以编译器会报错。如果直接做b=3+7的话编译器不会报错,因为在做加法时编译器知道常量具体数值不会超出范围所以编译器不会报错。如果换成b=127+4呢?编译器会报错做加法时编译器知道这两个常量的和超出范围了所以报错了。总结一句:当右边是变量时编译器不确定其值会报错;当右边是常量是编译器根据其具体值执行。

如果将byte类型全部换成int类型数据呢?

class Demo
{
    public static void main(String[] args)
    {
        int b=4;
        int b1=3;
        int b2=7;
        b=b1+b2;
    }
}

答:编译器是不会报错的因为int类型为计算机整数计算的默认类型,就算两个较大的int类型整数进行加法产生了溢出,溢出之后底层有强制转换保存其原有位数舍弃高位仍然以整型int类型数据表示,所以无论计算结果是什么int类型都能装的下编译器不会报错。

25. 当使用%进行取摸、取余运算时,运算结果的符号只参考被模数。并且浮点型数据也可以取模运算。

26. ~取反运算符将原数按位取反。数据在计算机中按补码存储,负数的补码为符号位不变其余各位取反加1。正数的补码是正数本身。在计算机中存储格式为11111111 11111111 11111111 11111011 这是-5,00000000 00000000 00000000 00000101 这是5。

27. 移位运算符:

  • <<左移运算符,低位补0.
  • >>右移运算符,高位按符号位补。
  • >>>无符号右移无论最高位是什么都是高位补0。

28. 小端模式为数据的低位存放在内存的低地址当中。

29. 大端模式为数据的高位存放在内存的低地址当中。

30. 算数运算时数据的转换:

自动转换(隐式转换):自动转换发生在不同数据类型的变量混合运算时,由编译系统自动完成。

自动转换遵循以下规则:

1)若参与运算量的类型不同,则先转换成同一类型,然后进行运算

      如输出2.3+1,会转换成浮点型进行计算

2)转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int型转换成long型,再做运算。

3)所有的浮点运算都是以双精度进行的,即使两个float单精度量运算的表达式,也要先转换成double型,再做运算。

4)char型和short型参与运算时,必须先转换成int型。

      如输出'a'+1

5)在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换成左边量的类型。如果右边量的数据类型长度比左边长  

      时,将丢失一小部分数据,这样会降低精度。

      如int a=2.3+1; int b=2.6+1;会直接省略小数点后面的数据。

强制类型转换(显式转换)由程序员自己编写。

为什么要进行强制类型转换?

如在团队中对接口的时候这边要求是int型,但是那边给的是double型,这样类型不一致,团队协调代价大,可采用强制类型转过来,也是为了编译通过。

其一般形式为:(类型说明符)(表达式)其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。

如:(float)a把a转换成浮点型;(int)(x+y)把x+y的结果转换成整型。

31. 写法规范:常量所有字母都大写,多个单词,中间用_连接。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值