[学习笔记 随手记版·一刷]Java基本内容-1

1.Java跨平台的原理是什么?

首先 明白这里指的平台是不同的操作系统: 比如 Windows Mac Linux

其次 Java实现跨平台是借助于 JVM(虚拟机)实现的

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
 

2. 什么是JDK?什么是JRE?二者与JVM啥关系?

JDK: 程序员的开发需要的工具包,提供一些已经封装好的库

JRE: 程序运行所需要的环境

3. 一个源文件只能有一个public类. 但是可以有多个非public类

4.为什么Java文件中只能含有一个public类?

因为Java程序是从一个public类的 main函数开始执行的, 就像C里面程序的执行是从 main()函数开始执行一样.

5.

想要运行一个已有的Java程序, 那么只需要安装JRE

想要开发一个全新的Java程序, 必须安装JDK

6. Java和Js都是解释型语言

7.  什么是JIT(Just-In-Time)?

JIT是just in time的缩写,也就是即时编译。  

JIT除了具有缓存的功能外,还会对代码做各种优化,包括:逃逸分析、 锁消除、 锁膨胀、 方法内联、 空值检查消除、 类型检测消除、 公共子表达式消除  

想要触发JIT编译,首先要识别出热点代码

为了提高执行速度,便引入了 JIT 技术当JVM发现某个方法或代码块运行特别频繁的时候,就会认为这是“热点代码”(Hot Spot Code)。然后JIT会把部分“热点代码”编译成本地机器相关的机器码,并进行优化,然后再把编译后的机器码缓存起来,以备下次使用。

8. java语言是多线程的: 

   在java 语言中 线程是一种特殊的对象.

      java语言支持多个线程同时执行,并且提供多线程之间的同步机制

9.什么叫做服务端?

服务端是一种针对性的程序, 是专门为某一客户端设立的程序, 服务端是不具备运算能力

进一步拓展: 服务端和客户端的区别是什么?

简单来说:  客户端负责和用户交互, 也就是显示屏负责显示(UI/UE下文有解释), 服务端负责数据存储, 也就是我们的用户的数据, 而计算能力则是二者各负责一部分

什么是UI/UE?

UI(User Interface): 即用户界面设计, 就是产品的美观

UE(User Experience): 即 用户体验设计师, 就是看产品好不好用, 是不是人性化

10. [通俗解释]Java中的一些专用名词:

JDK(Java Development Kit): 编写Java程序的软件

JRE(Java Runtime Environment): 运行Java程序的软件

Server JRE(JavaSE Runtime Environment): 服务端运行Java

SDK(Software Development Kit): 软件开发工具包

DAO(Date Access Object):  是微软第一个面向对象的数据库接口

MVC(Model View Controller):  是模型(model)-视图(view)-控制器(controller)的缩写, 但是说白了就是一种软件设计的框架

11.面向对象程序设计的主要特征都有那些?

封装性,继承性,多态性,抽象(如果要回答抽象是加分项不假 但是你需要在抽象类里面写一个飞方法, 你继承抽象类 就必须会把飞实现)

12. 明确区别一下 JDK和SDK:

13. Java标识符:

什么是标识符?

变量的名称叫做标识符.  在我们写代码的过程中,总是要给 包,类,变量,方法起名字, 这名称就是标识符

关于Java标识符有以下需要注意:

1) 标识符大小写敏感

2)关键字不能做标识符

3) 所有的标识符都应该以字母, 美元符, 或者下划线开始

3)首字符之后可以是字母,美元符,下划线或数字等任何字符的组合

14. 引用自 菜鸟编程:

Java的修饰符:

15.数据类型的溢出:

我们可以将数据类型的取值范围看作一个圆, 每多一个数据就向前移动一个, 当数达到最大值时,我们再加1, 就可以变成最小值, 这就是数据的溢出.

16.throw和throws区别:

17. Java的数据的基本类型有 8 个:

boolean 布尔

byte 字节

short / int / long 短整数/整数/长整数

float/double 浮点数

char 字符

进一步解释:

byte:

byte字节 1byte = 8 bits(8位)

存储有符号的, 以二进制补码表示的整数

最小值为 -128 最大值为127 默认值为 0

byte 类型用在大型数组中可以显著节约空间, 主要替代小整数, 因为byte变量占用的空间

只有int类型的四分之一

byte在二进制文件读写中使用较多

float 单精度 32位4个字节   double 双精度 64位8个字节

flaot和double都不能用来表示很准确的数字

short 16位 2个字节   int 32位 4个字节   long 64位 8个字节 

char是一个单一的16位Unicode字符 

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

数据类型小结:

变量存储的数据类型分为 基本数据类型引用数据类型两种.

Java语言中的基本数据类型总共有 8 种

基本数据类型的使用, 需要注意的几点:

        1) 各种基本数据类型有固定的存储空间大小和取值范围, 不受底层操作系统的影响, 以保证Java程序的可移植性

        2) char 类型表示"字符", 每个字符占两个字节, 采用 16位Unicode 编码

        3) boolean类型数据只允许取值true 或 false, 不可以用 0 或 非0 的整数代替 true或false

        4) 整数类型, 如: 123, 默认的数据类型时整型int, 定义一个长整型变量的语法时: long var = 123L, 即需要再整数常量后加上"L" 或者 "I"

        5) 浮点数常量: 如1.2 默认的数据类型时双精度浮点型 double. 定义一个单精度浮点型变量的语法时: float var = 1.2F, 即需要再浮点数常量后加上"F" 或者 "f".

18. 同一个类中, 函数名称可以相同, 即重载函数(overload), 但是函数参数的个数或者类型必须不同

函数的重载是函数名相同,形参列表必须有所不同

19.   类是对某一类事物的共性描述, 定义了一类事物共有的 特征属性和 功能行为.\

        对象是某类事物的个体的存在, 每个对象都是独一无二的, 对象也称为类的实例

        类是对象的模板

面向对象程序设计(Object Oriented Programming) 简称 OOP

20. 面向过程程序设计 和 面向对象程序设计的区别:

 1. 面向过程程序设计中

   1). 数据和基于数据上的操作是分离的 

   2) 一般通过 函数调用来实现其功能a

2. 面向对象程序设计中:

   1) 数据和基于数据的操作是通过类(对象) 封装在一起的

   2) 一般通过向对象发送信息调用对象方法来实现其功能

21. 面向对象方法的几种重要思想:

1. 抽象

什么是抽象?

抽象是一种设计技术, 重点说明事物的各个本质的方面, 而忽略或者掩盖不重要, 非本质的方面

面向对象方法中的抽象:

只关注实体与我们所面向的问题的 "属性" 和 "行为"

2.封装

对象 可以看成是 数据(属性) 和 方法(行为) 的封装体

可以看成是具有相同数据 和 方法的对象的集合. 反过来, 对象可以看成是那个类的一个实例.

22. 基本数据类型的转换要遵循的原则:

        1) boolean 类型不可以与其他数据类型进行转换

        2) byte,short,char之间不会相互转换, 这三种类型在计算时,会首先转换为int类型,在进行计算

        什么是隐式转换(自动类型转换)?       

                          3) 当数据类型B的取值范围大于数据类型A的取值范围时, 会进行自动类型转换,又称为隐式类型转换:例子:  将一个long 类型的值赋给一个float类型的变量: long x= 10L; float y = x;             

       什么是强制转换并且如何造成精度丢失? 

                         4)  当数据类型B的取值范围小于数据类型A的取值范围时, 需要进行强制类型转换, 又称为显示类型转换. 而且进行强制类型转换时, 可能会出现数据溢出的情况, 这种情况又称为精度丢失. 比如: 将一个int类型的值赋给一个char类型的变量: int x = 10; char y = (char)x;

进一步通俗易懂的解释精度丢失: 

        装修的时候 我们有一块100*100的砖  但是需要的仅仅时10*10的砖 所以我们不得不从中取出一块 10*10的砖 其他没有被利用的部分就是所谓的精度丢失.

如果还不明白 我再举个例子吧: 我们可以把数据类型取值范围小的变量比喻成一个小杯子, 把数据类型取值范围大的变量比喻成一个大的杯子, 把数据比喻成杯子里的水. 将小水杯的水倒入大水杯子中, 大水杯子肯定能装下 .然而将大水杯子的水倒入小杯子中,则小杯子可能装得下, 也可能会溢出

23. 什么叫做基本类型变量?什么叫做引用类型变量?

一个变量如果存储的是基本数据类型, 就称为基本类型变量.

如果存储的时引用数据类型,就称为引用类型变量.

引用类型变量 其实就是C语言中的指针(Point)类型变量, 这种变量存储的是一个内存的地址值.

在Java语言中, 一个引用类型变量存储的通常是一个对象在内存中的地址.

引用类型变量的默认值是 null, 表示这个引用类型变量没有指向具体的对象

24. 什么叫做成员方法?

        Java语言中的成员方法 (也可以简称为方法) 等同于C语言中的函数, 一个方法就是一段用来实现某个常用功能的代码块.

25. 什么叫做方法重载(Overload)?

在一个类的内部可以定义多个方法名相同的方法, 但是要求每个同名方法都有自己唯一的形参列表. 不同的形参列表是指 形参个数不同, 或者是形参类型不同. 这种语法机制 被叫做 方法重载. 同时在调用同名方法时候, 会根据输入的实参列表来确定具体的方法.

注意:构造方法也可以重载

26.什么叫做方法签名(Method Signature)?

方法签名是 由方法名和形参列表组成的字符串. 方法重载的含义是指多个方法的方法名相同, 但是方法签名不同

27.什么叫做构造方法(Constructor)?

在所有的成员方法中, 有一种特殊的方法被称为构造方法. 构造方法的作用是初始化对象属性, 也就是说, 通常在构造方法中对成员变量进行赋值.

构造方法的特殊之处在于以下几点:

        构造方法的方法名与类名完全相同.

        构造方法是不能声明任何返回值类型, 既不能用int, Person邓数据类型, 也不能用void

        构造方法不能显式的返回一个值,  即构造方法的方法体中不能有  return 语句

        当某个类的代码中没有定义构造方法时, 编译器会给这个类添加一个默认结构,这个默认构造方法是没有参数的, 方法体也是空的, 即: 类名 () {}. 但如果某个类的代码中定义了构造方法, 则编译器就不再给这个类添加默认构造方法.

28. "new Person()" 执行的过程是在内存中 创建一个新的Person对象, 并且初始化了这个对象的属性. 语句"new Person()"执行的结果是返回了这个新建Person对象在内存中的地址. (这里的地址值并不是指物理内存地址,而是JVM管理的地址空间中的逻辑地址)

29. Java程序运行时的内存分析

从某种层面上讲, 程序的执行过程就是内存中数据的变化过程, 对Java程序运行时内存中数据变化的过程进行分析, 有助于更清晰地理解 Java程序的执行过程

        当要解释执行一个Java程序时, Java虚拟机首先要把硬盘中对应的Java类文件(Java字节码文件, *.class文件),通过类装载器装载到内存中, 然后再从Java程序的入口方法main()开始执行.

        Java程序时运行在Java虚拟机中的, JVM会把它管理的内存分为几个区域, 不同的区域存放不同类型的数据:

                方法区 Method Area: 存放类的信息(类原型). 当Java虚拟机装载一个类时, 会把这个类的信息保存到方法区. 

                栈Stack: 存放局部变量. 调用一个方法时, 会在栈中为该方法分配一块内存, 称为方法的"栈帧", 用以存放这个方法中定义的局部变量, 当方法调用结束后, 会收回这块内存

                堆Heap: 存放对象的数据. 一个对象的数据包含: 对象的属性和类原型引用, 类原型引用就是一个保存类信息内存地址的引用型变量, 即指向方法区中类原型的指针. 对象都是在程序执行的过程中动态创建的, 需要使用 "new"关键字, 动态申请堆中的内存, 以存放新建对象的数据. 当一个对象不被引用时, 这个对象所占用的内存会被JVM中的垃圾回收器 GC(Garbage Collection) 进行回收

30.  this是一个引用类型变量, this变量中存放的值 是对象自身在内存中的地址值, 或者说this 是一个指向对象自身的指针 

this这个引用实际上并不存放在对象数据中, 而是所有实例方法都默认拥有的一个方法形参

31. 介绍静态修饰符static 什么叫做静态成员变量?什么叫做类变量?

        修饰符"static"表示"静态的". 可以用修饰符static修饰成员变量,成员方法和类代码块

        用static修饰的成员变量称为静态成员变量(static member variable).一个类的静态成员变量是存放在方法区中的类原型里的, 这个类所有对象都共享这唯一的静态成员变量. 静态成员变量这个类的公用变量, 在内存中只有一份. 

静态成员变量又称为类变量

32.什么叫做 非静态成员变量(non-static member varuavke)?

没有用static修饰的成员变量称为 非静态成员变量.  一个类的非静态成员变量是存放在堆中的对象数据里的, 这个类的每个对象实例都有自己单独的非静态成员变量. 所以 非静态成员变量又称为 实例变量(instance variable)

33.什么是静态方法和静态代码块?

用static修饰的方法叫做静态方法,

        静态方法中不能访问非静态变量和非静态方法,但是非静态方法中既可以访问非静态变量和非静态方法,也可以访问静态变量和静态方法

用static修饰的代码块是静态代码块.

一个类的静态代码块(Static Code Block) 是定义在类的内部,方法的外部的,语法如下

         进一步解释:

                        1)静态代码块不是方法, 没有方法名,返回值和参数

                        2)静态代码块的作用是对类自身进行初始化, 主要是对类的静态成员变量进行初始化

                        3)当JVM装载一个类时, 会执行这个类的静态代码块. 由于JVM装载某个类的操作只会执行一次, 所以这个类的静态代码块也只会执行一次      

34.对 static修饰符的使用进行小结:

        1) 用static修饰的成员变量是静态成员变量(类变量), 是该类所有对象的共享变量, 内存中只有一份

        2)用static修饰的方法是静态成员方法(类方法),在静态成员方法中不能访问非静态成员

        3)用static修饰的代码块是静态代码块, 只在JVM装载该类时执行一次

35. 包机制的作用?什么是包机制?

随着Java语言的广泛应用, 用Java编写的类越来越多, 为了解决类名冲突的问题, Java语言引入"包机制".

包机制 就是通过不同的包名 为类提供了多重的命名空间, 也就是说把"包名+类名"作为一个类的完整名字,或者说是类的全称

        进一步介绍包机制:

                在定义一个类时候,为例将这个类定义到某个包里, 需要在源代码的开头部分指明该文件定义的类所属的包名, 语法规则如下:

         Java编译器会把包对应于文件系统的目录. 假设把类A定义到包p中, 那么类A编译后生成的A.class文件 就会放到目录p中

        一个包中类可以直接访问本包中的其它类. 但是如果一个包中类要访问另一个包中类, 那么在访问之前,需要先导入(import) 另一个包中类.. 比如包p1中的类A要要访问包P2中的类B,语法规则如下:

        注意:

                        在Java语言的所有包中, Java语言核心包: "java.lang"是特殊的, 任何Java类都默认以及导入import了"java.lang"包中所有的类

36.简单介绍一下Java SE的核心包, 这些核心包都在rt.jar这个文件内

        java.lang: 包含一些Java语言的核心类, 如: String,Math,System, 提供常用功能, 这个包里的类是默认导入的, 即不用显式的写import.

        java.util: 包含一些实用工具类, 如: Date, Random, Collection框架等等

        java.io: 包含能提供多种输入/输出功能的类

        java.sql: 包含数据库访问和处理的相关类

        java.net: 包含执行于网络相关的操作类

        java.awt:包含用于创建GUI程序的相关类(图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口))

        java.swing: 包含轻量级的GUI组件

                

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值