目录
=======================================================
1 什么是类?
把具有相同属性和相同行为的一些事物,划分成一类
类
类是一个模板,是对事物特征(变量)和行为(方法)的描述
对象
对象是类的一个实体(或者实例),类只是一种对事物的构建描述,
对象则是根据类的表述创建的个体
变量
变量是类对象的特征
方法
方法是类对象的行为
举例:
人 [类] 是个称呼,他不是一个个体
生活在社会中的人 就是人类的一个个实际存在的 [实例对象]
人有身高体重,这就是特征(变量)
人能跑步吃饭,这就是行为(方法)
=================================================================
2 eclipse设置项目分组working set
左侧导航栏右上角——三个垂直点——select working set
==================================================================
3 jdk jre jvm的关系
jdk包含jre
jre包含jvm
jdk:
JDK(Java Development Kit,java开发工具包) 是整个JAVA的核心,
包括了Java运行环境(JRE),
基本组件(javac/java/jdb等)和Java基础的类库(即Java API,如:rt.jar);
jre:
JRE(Java Runtime Environment,Java运行环境),
包含JVM虚拟机及Java核心类库(解释.class文件)。
JRE是Java运行环境,并不是一个开发环境,
所以没有包含任何开发工具(如编译器和调试器)
jvm:
JVM(Java Virtual Machine,java虚拟机),
java程序运行时的环境,JVM是一个进程虚拟机,是一个提供特定的指令集运行.class文件的运行环境,
同时也是一个高级语言虚拟机。
Java语言在不同平台上运行时不需要重新编译。
Java语言使用Java虚拟机(jvm)屏蔽了与具体平台相关的信息,
使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),
就可以在多种平台上不加修改地运行,即一次编译,多处运行
问题一:只有jvm可以运行代码吗?
不行,运行代码还需要运行时依赖的java类库的支持(如:jre/lib/rt.jar)
问题二:jdk自带的jre和安装的jre有什么区别?
文件大小不一样,自带的jre有对开发代码的支持
==============================================
4 编译和运行
编译java文件:javac Run.java 生成Run.class文件
运行程序:java Run 这里的Run指的是Run.class文件
控制台命令:
e: 打开E盘
dir 当前目录文件列表
cd [文件夹名称] 打开文件夹
===========================================
5 配置jdk环境变量
计算机——系统设置——高级系统设置——高级——环境变量
配置系统环境变量
新建:JAVA_HOME=jdk的安装目录
修改:path=%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
===========================================
6 关键字
package包关键字
import引入关键字
class类声明关键字
==========================================
7 主方法
public static void main(String[] args){}
==========================================
8 输出
System.out.println();
==========================================
9 输入
Scanner sc = new Scanner(System.in);
sc.next();
===========================================
10 命名法(给类、变量、方法命名)
驼峰命名法:由若干单词组成,每个单词首字母大写,如:UserName
下划线命名法:单词小写,每个单词之间用下划线连接,如:user_name
匈牙利命名法:首字母用变量的数据类型缩写,后面遵循驼峰命名法,
如:String sUserName
==========================================================
11 java标识符命名规则
什么是标识符?
在java语言中,对各种变量、方法和类等资源命名时使用的字符序列称为标识符,
简单来说,标识符就是类名、变量名、方法名等
1) 由26个英文字母大小写、数字(0-9)、符号( _和$ )组成
2) 标识符应以字母(A-Z a-z)、英文下划线(_)、美元符号($)开头,
数字不能开头
3) 标识符不能是关键字(比如class、package、void等关键字)
==========================================================
12 语法规范
1) 大小写敏感(即大写的变量和小写的变量,不是一个变量)
2) 类名首字母大写,遵循驼峰命名法,如 UserInfo
3) 变量和方法名首字母小写,遵循驼峰命名法
4) 源文件(.java文件)名必须和类名相同,后缀是.java,编译文件后缀是.class
5) 主方法入口,
所有的Java程序由public static void main(String []args)方法开始执行
===========================================================
13 数据类型
1) 基本数据类型:变量名和值放在栈中
整数类型:byte short int long
浮点型(小数类型):float double
字符型:char
布尔类型(true/false):boolean
2) 引用类型:变量名和内存地址放在栈中,值放在堆中,通过内存地址找到堆中的值
如:String 数组 集合 自定义类
============================================================
14 八种基本数据类型
14.1 byte
- 一个byte类型在内存中占用8位二进制,即 1byte = 8bit;
- 有正负号
- 最小值 -128(-2^7)
- 最大值 127(2^7-1)
- 默认值 0
- 应用:byte类型用在大型数组中节约空间,主要代替int类型,因为byte类型的变量占用的内存空间只有int类型的四分之一
- 示例: byte no = 12;
bit、byte与字节(Byte)的关系
bit比特,表示一位二进制位
byte是java语言的基本数据类型 1byte = 8bit
Byte字节,是计算存储空间大小的单位,简称B;1字节 = 8bit,其他还有千字节KB,兆字节MB,千兆字节GB
14.2 short
- 内存占用16位
- 有正负号
- 最小值 -32768(-2^15)
- 最大值 32767(2^15 - 1)
- 默认值 0
- 应用:Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一
- 示例: short no = 12;
14.3 int
- 内存占用32位
- 有正负号
- 最小值 -2,147,483,648(-2^31)
- 最大值 2,147,483,647(2^31 - 1)
- 默认值 0
- 应用:一般地整型变量默认为 int 类型
- 示例: int no = 12;
14.4 long
- 内存占用64位
- 有正负号
- 最小值 -9,223,372,036,854,775,808(-2^63)
- 最大值 9,223,372,036,854,775,807(2^63 -1)
- 默认值 0L
- 应用:这种类型主要使用在需要比较大整数的系统上
- 示例: long no = 12000000L;"L"理论上不分大小写,但是若写成小写"l"容易与数字"1"混淆,不容易分辩,所以最好大写
14.5 float
- float数据类型是单精度,32位,符合IEEE754标准的浮点数;
- 最小值 1.17549435E-38f = 1. 17549435*(10^-38)
- 最大值 3.4028235e+38f
- 默认值 0.0f
- 示例:float no = 12.123f;
14.6 double
- double 数据类型是双精度、64 位、符合IEEE 754标准的浮点数
- 最小值 2.2250738585072014E-308
- 最大值 1.7976931348623157e+308
- 默认值 0.0d
- 示例:double no = 12.123d; double no2 = 12.1234;
解释:单精度和双精度的概念和区别
单精度和双精度精确的范围不一样,单精度,也即float,一般在计算机中存储占用4字节,也就是32位,有效位数为7位;双精度(double)在计算机中存储占用8字节,64位,有效位数为16位。
单精度浮点型(float )专指占用32位存储空间的单精度(single-precision )值。单精度在一些处理器上比双精度更快而且只占用双精度一半的空间,但是当值很大或很小的时候,它将变得不精确。当你需要小数部分并且对精度的要求不高时,单精度浮点型的变量是有用的。例如,当表示美元和分时,单精度浮点型是有用的。
双精度型,正如它的关键字“double ”表示的,占用64位的存储空间。在一些现代的被优化用来进行高速数学计算的处理器上双精度型实际上比单精度的快。所有超出人类经验的数学函数,如sin( ),cos( ) ,和sqrt( )均返回双精度的值。当你需要保持多次反复迭代的计算的精确性时,或在操作值很大的数字时,双精度型是最好的选择。
14.7 char
- char类型是一个单一的 16 位 Unicode 字符
- 最小值 '\u0000'(即为0)
- 最大值 '\uFFFF'(即为65535)
- 作用:char数据类型可以储存任何字符
- 示例:char no = 'a'; 给char类型赋值,必须要用单引号’’
14.8 boolean
- boolean数据类型表示1位的信息
- 只有两个取值:true 和 false;
- 默认值是 false;
- 例子:boolean tar = true;
=============================================================
15 自动类型转换
15.1
数值的范围越大,表示该数据类型的精度越高,根据精度的由低到高排序为:
byte -> short,char -> int -> long -> float ->double
根据上面顺序,低精度数据类型的变量,可以自动地转为高精度类型的变量,如:
byte a = 12;
int b = a;
数据类型转换规则:
- 不能对boolean类型进行类型转换;
- 把高精度类型转换为低精度类型时,必须使用强制类型转换;
- 转换过程中可能导致溢出或损失精度(高精度转低精度);
- 浮点数到整数的转换,舍弃小数部分,而不是四舍五入;
16 强制类型转换
强制类型转换只发生在高精度类型转为低精度类型的情况下,必须显式的在变量前声明要转换的数据类型,且会损失数据精度,如:
float a = 12.23f;
int b = (int) a;
System.out.println(b);//控制台打印12
17 引用类型
引用类型包括三部分:对象名,对象的引用,对象
示例:User user = new User();
栈中保存的是:user = 对象的引用,即对象名和对象的内存地址
堆中保存的是:new User();,即对象本身
对象、数组、集合、String都是引用数据类型。
所有引用类型的默认值都是null。
18 数据类型在内存中的空间分配
基本数据类型只有一块存储空间(分配在栈stack中);
引用类型有两块存储空间(一块在栈stack中,一块在堆heap中);
对于引用类型的对象,对象名和对象的引用放在栈stak中,对象放在堆heap中;引用 就是指向对象在堆heap中的地址
java的内存模型中保存数据的有两部分: 堆(heap) 和 栈(stack) 。
1.基本类型的变量放在栈里;
2.引用类型中,对象本身放在堆里,对象的引用放在栈里