-
Java语言的特点
面向对象的语言:
-
两个基本概念:类、对象。
-
三大特性:封装、继承、多态。
-
支持静态和动态风格的代码继承及重用
健壮性:提供了一个相对安全的内存管理和访问机制
(结构中立)跨平台性:通过JAVA语言编写的应用程序在不同系统平台上都可以运行。原理:只要在需要运行的java应用程序的操作系统上,先安装一个JAVA虚拟机(JVM Java Virtual Machine)即可。由JVM 来负责Java程序在该系统中的运行。
多线程
安全
平台无关性(Platform Independent):Java使用解释器来执行代码,所以可以实现“一次编写,到处运行”
简单:风格类似C++,摒弃了C++中容易引发程序错误的地方
Java两种核心机制
Java虚拟机(JVM Java Virtual Machine),简称JVM,是运行所有Java程序的假想计算机,是Java程序的 运行环境,是Java 最具吸引力的特性之一。我们编写的Java代码,都运行在 JVM 之上。Java语言的跨平台特性是由JVM实现的,我们编写的程序运行在JVM上,而JVM 运行在操作系统上。Java的虚拟机本身不具备跨平台功能的,每个操作系统下都有不同版本的虚拟机
在一台计算机上由软件或硬件模拟的计算机。
Java虚拟机(JVM)读取并处理经编译过的平台无关的字节码class文件 。 Java编译器针对Java虚拟机产生class文件,因此是独立于平台的。 Java解释器负责将Java虚拟机的代码在特定的平台上运行。
垃圾收集机制(Garbage Collection)
①不再使用的内存空间应回收——垃圾回收
②垃圾回收在Java程序运行过程中自动进行,程序员无法进行精确控制和干预。
编写HelloWorld
JDK和JRE关系
-
JRE (Java Runtime Environment) :是Java程序的运行时环境,JVM+核心类库。
-
JDK(Java Development Kit):是Java程序开发工具包,JRE+开发人员使用的工具。
-
JDK > JRE > JVM
-
我们想要运行一个已有的Java程序,那么只需安装 JRE 即可。
我们想要开发一个全新的Java程序,那么必须安装 JDK 。
DOS常用命令:盘符名: (盘符切换命令) dir(查看当前文件夹) cd 文件夹名 (进入文件夹命令) cd..(退出文件夹命令) cd\(退出到磁盘根目录) cls(清屏)
编译:javac 源文件名.后缀名(举例:java HelloWorld.java)
运行:java 类名字(java HelloWorld) 存放在方法区的类代码区
关键字:public class static void
标识符:
-
英文字母26个(区分大小写) 、 0-9数字 、 $(美元符号) 和 _(下划线) ,数字不能作为首字母
-
汉字可以作为JAVA的合法标识符,因为字符集使用的是Unicode编码
-
关键字不能作为标识符使用
-
标准类库的类不能作为标识符使用
基本数据类型分类:四类八种基本数据类型:整数、浮点数、字符、布尔。
数据类型 关键字 内存占用 取值范围 字节型 byte 1个字节 -128 ~ 127 短整型 short 2个字节 -32768 - 32767 整型 int(默认) 4个字节 -2^31 - 2^31 - 1 长整型 long 8个字节 -2^63 - 2^63 - 1 单精度浮点数 float 4个字节 1.4013E-45~3.4028E+38 双精度浮点数 double(默认) 8个字节 4.9E-324~1.7977E+308 字符型 char 2个字节 0-65535 布尔型 boolean 1个字节 true,false 引用类型:类、接口、数组
变量的定义:常量是固定不变的数据,那么在程序中可以变化的量称为变量。
-
变量定义的格式包括三个要素: 数据类型 、 变量名 、 数据值 。
数据类型 变量名 = 数据值;
-
变量名称:在同一个大括号范围内,变量的名字不可以相同。 (不同方法内局部变量的名字可以相同,因为变量只在该方法内有效)
变量赋值:定义的变量,不赋值不能使用。
数据类型转换
自动转换:将 取值范围小的类型 自动提升为 取值范围大的类型 。
强制类型转换:将 取值范围大的类型 强制转换成 取值范围小的类型 。
数据类型 变量名 = (数据类型)被转数据值;
// double类型数据强制转成int类型,直接去掉小数点
int i = (int)1.5;
注意:浮点转成整数,直接取消小数点,可能造成数据损失精度。
int 强制转成 short 砍掉2个字节,可能造成数据丢失。
运算符
算术运算符:注意a++和++a区别复制与那算符
赋值运算符:= +=(+= 是一个运算符,只运算一次,并带有强制转换的特点,) -= /= %=
比较运算符:== < > <= >= !=
逻辑运算符: &&短路与 ||短路或 !取反
三元运算符:
数据类型 变量名 = 布尔类型表达式?结果1:结果2
布尔类型表达式结果是true,三元运算符整体结果为结果1,赋值给变量。
布尔类型表达式结果是false,三元运算符整体结果为结果2,赋值给变量。
方法入门
方法:
就是将一个
功能
抽取出来,把代码单独定义在一个大括号内,形成一个单独的功能。
修饰符 返回值类型 方法名 (参数列表){
代码...
return ;
}
举例:
public static void methodName() {
System.out.println("这是一个方法");
}
JShell脚本工具
当我们编写的代码非常少的时候,而又不愿意编写类,main方法,也不愿意去编译和运 行,这个时候可以使用JShell工具。 启动JShell工具,在DOS命令行直接输入JShell命令。JShell工具,只适合片段代码的测试,开发更多内容,建议编写在方法中。 流程控制语句
判断语句、选择语句、循环语句、跳出语句(break、continue)、死循环、嵌套循环
IDEA的使用
调用方法的三种形式:直接调用、赋值调用、输出语句调用
方法重载
:指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返
回值类型无关。
参数列表:个数不同,数据类型不同,顺序不同。
数组3种定义和访问
数组概念: 数组就是存储数据长度固定的容器,保证多个数据的数据类型要一致。
-
数组存储的数据类型[] 数组名字 = new 数组存储的数据类型[长度]; int[] arr = new int[3];
-
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...}; int[] arr = new int[]{1,2,3,4};
-
数据类型[] 数组名 = {元素1,元素2,元素3...};
int[ ] arr = {1,2,3,4,5};
-
索引访问数组中的元素:
数组名[索引]=数值,为数组中的元素赋值 arr[0] = 1;
变量=数组名[索引],获取出数组中的元素 int i = arr[0];
JAVA虚拟机的内存划分
寄存器 给CPU使用,和我们开发无关。
本地方法栈 JVM在使用操作系统功能的时候使用,和我们开发无关。
方法区 存储可以运行的class文件。
堆内存 存储对象或者数组,new来创建的,都存储在堆内存。
方法栈 方法运行时使用的内存,比如main方法运行,进入方法栈中执行。
一个数组内存图
两个数组内存图
两个变量指向同一个数组
数组异常
数组越界异常:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:
数组空指针异常:Exception in thread "main" java.lang.NullPointerException
数组遍历(重点)
遍历、数组获取最大值元素、数组反转
数组作为方法参数和返回值
数组作为方法参数传递,传递的参数是数组内存的地址。
数组作为方法的返回值,返回的是数组的内存地址
方法的参数类型区别(易错)
方法的参数为基本类型时**,传递的是数据值.** 方法的参数为引用类型时**,传递的是地址值**
面向对象 三大基本特征:封装、继承、多态
类的定义
定义类:就是定义类的成员,包括成员变量和成员方法。(驼峰命名法)
成员变量:和以前定义变量几乎是一样的。只不过位置发生了改变。在类中,方法外。(小驼峰命名法)
成员方法:和以前定义方法几乎是一样的。只不过把**static去掉**,static的作用在面向对象后面课程中再详细
讲解。
public class Student {
//成员变量
String name;//姓名
int age;//年龄
//成员方法
//学习的方法
public void study() {
System.out.println("好好学习,天天向上");
}
//吃饭的方法
public void eat() {
System.out.println("学习饿了要吃饭");
}
}
对象的使用
创建对象:类名 对象名 = new 类名();
使用对象访问类中的成员: 对象名.成员变量; 对象名.成员方法();
-
-
引用类型:类、接口、数组
-
变量的定义:常量是固定不变的数据,那么在程序中可以变化的量称为变量。
-
变量定义的格式包括三个要素: 数据类型 、 变量名 、 数据值 。
数据类型 变量名 = 数据值;
-
变量名称:在同一个大括号范围内,变量的名字不可以相同。 (不同方法内局部变量的名字可以相同,因为变量只在该方法内有效)
变量赋值:定义的变量,不赋值不能使用。
-
数据类型转换
-
自动转换:将 取值范围小的类型 自动提升为 取值范围大的类型 。
-
强制类型转换:将 取值范围大的类型 强制转换成 取值范围小的类型 。
-
数据类型 变量名 = (数据类型)被转数据值;
-
// double类型数据强制转成int类型,直接去掉小数点
-
int i = (int)1.5;
注意:浮点转成整数,直接取消小数点,可能造成数据损失精度。
int 强制转成 short 砍掉2个字节,可能造成数据丢失。
运算符
-
算术运算符:注意a++和++a区别复制与那算符
-
赋值运算符:= +=(+= 是一个运算符,只运算一次,并带有强制转换的特点,) -= /= %=
-
比较运算符:== < > <= >= !=
-
逻辑运算符: &&短路与 ||短路或 !取反
-
三元运算符:
数据类型 变量名 = 布尔类型表达式?结果1:结果2
布尔类型表达式结果是true,三元运算符整体结果为结果1,赋值给变量。
布尔类型表达式结果是false,三元运算符整体结果为结果2,赋值给变量。
方法入门
-
方法:
就是将一个
功能
抽取出来,把代码单独定义在一个大括号内,形成一个单独的功能。
修饰符 返回值类型 方法名 (参数列表){
代码...
return ;
}
举例:
public static void methodName() {
System.out.println("这是一个方法");
}
JShell脚本工具
-
当我们编写的代码非常少的时候,而又不愿意编写类,main方法,也不愿意去编译和运 行,这个时候可以使用JShell工具。 启动JShell工具,在DOS命令行直接输入JShell命令。JShell工具,只适合片段代码的测试,开发更多内容,建议编写在方法中。 流程控制语句
-
判断语句、选择语句、循环语句、跳出语句(break、continue)、死循环、嵌套循环
-
IDEA的使用
-
调用方法的三种形式:直接调用、赋值调用、输出语句调用
-
方法重载
:指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返
回值类型无关。
参数列表:个数不同,数据类型不同,顺序不同。
数组3种定义和访问
-
数组概念: 数组就是存储数据长度固定的容器,保证多个数据的数据类型要一致。
-
数组存储的数据类型[] 数组名字 = new 数组存储的数据类型[长度]; int[] arr = new int[3];
-
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...}; int[] arr = new int[]{1,2,3,4};
-
数据类型[] 数组名 = {元素1,元素2,元素3...};
int[ ] arr = {1,2,3,4,5};
-
索引访问数组中的元素:
数组名[索引]=数值,为数组中的元素赋值 arr[0] = 1;
变量=数组名[索引],获取出数组中的元素 int i = arr[0];
-
-
JAVA虚拟机的内存划分
寄存器 给CPU使用,和我们开发无关。
本地方法栈 JVM在使用操作系统功能的时候使用,和我们开发无关。
方法区 存储可以运行的class文件。
堆内存 存储对象或者数组,new来创建的,都存储在堆内存。
方法栈 方法运行时使用的内存,比如main方法运行,进入方法栈中执行。
-
一个数组内存图
-
两个数组内存图
-
两个变量指向同一个数组
数组异常
-
数组越界异常:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:
-
数组空指针异常:Exception in thread "main" java.lang.NullPointerException
数组遍历(重点)
-
遍历、数组获取最大值元素、数组反转
数组作为方法参数和返回值
-
数组作为方法参数传递,传递的参数是数组内存的地址。
-
数组作为方法的返回值,返回的是数组的内存地址
方法的参数类型区别(易错)
方法的参数为基本类型时**,传递的是数据值.** 方法的参数为引用类型时**,传递的是地址值**
面向对象 三大基本特征:封装、继承、多态
-
类的定义
定义类:就是定义类的成员,包括成员变量和成员方法。(驼峰命名法)
成员变量:和以前定义变量几乎是一样的。只不过位置发生了改变。在类中,方法外。(小驼峰命名法)
成员方法:和以前定义方法几乎是一样的。只不过把**static去掉**,static的作用在面向对象后面课程中再详细
讲解。
public class Student {
//成员变量
String name;//姓名
int age;//年龄
//成员方法
//学习的方法
public void study() {
System.out.println("好好学习,天天向上");
}
//吃饭的方法
public void eat() {
System.out.println("学习饿了要吃饭");
}
}
-
对象的使用
创建对象:类名 对象名 = new 类名();
使用对象访问类中的成员: 对象名.成员变量; 对象名.成员方法();