目录
2-1-1 对象内存图——103(单个对象)/104(多个对象)
java跨平台原理:java程序可以在任意操作系统上运行。在需要运行java应用程序的操作系统上,安装一个对应的java虚拟机(jvm)即可。
JDK > JRE > JVm
JDK java程序开发工具包;JRE java运行时环境; JVM java虚拟机。
1-1 基础语法
- 注释
单行注释: //
多行注释:/* 注释信息 */
- 关键词
字母全部小写,颜色标记(常用编辑器)
- 常量
常量类型 | ||
字符串常量 | 双引号括起来的内容 | "HelloWorld" |
整数常量 | 不带小数的数字 | 777,-7 |
小数常量 | 带小数的数字 | |
字符常量 | 用单引号括起来的内容 | 'q' |
布尔常量 | 布尔值,表示真假 | true false |
空常量 | 空值 | null |
- 数据类型
数据类型 | 基本数据类型 | 数值型 | 整数 | byte | 1 字节 | -128~127 |
short | 2 | -32768~32767 (2的15次方) | ||||
int (默认) | 4 | -2的31次方~ 2的31次方-1 | ||||
long | 8 | -2的63次方~ 2的63次方-1 | ||||
浮点数 | float | 4 | ||||
double (默认) | 8 | |||||
字符 | char | 2 | 0-65535( 2的16次-1 ) | |||
非数值型 | 布尔 | boolean | 1 | true false | ||
引用数据类型 | 类 | class | ||||
接口 | interface | |||||
数组 |
- 标识符‘
1. 由数字、字母、下划线和美元符组成
2. 不能以数字开头
3. 不能是关键字
4. 区分大小写
常见命名约定
小驼峰命名法:方法,变量
- 约定1:标识符是一个单词的时候,首字母小写: name
- 约定2:标识符是两个单词时,第一个单词首字母小写,其他首字母大写:firstName
大驼峰命名法: 类
约定1:标识符是一个单词的时候,首字母大写:Student
约定2:标识符由多个单词组成,每个单词首字母大写 :GoodStudent
1-2 运算符
- 算术运算符
+ - * / %
整数相除只能得到整数,要想得到小数,必须有浮点数的参与
字符的+操作
字符串的+操作:①拼接 ②从左往右逐个进行,先做运算后做拼接。 例如 1+99+”ddd“
- 赋值运算符
+= 扩展的赋值运算符低层隐含了强制类型转换
- 关系运算符
== , != , >, <. >=, <=
- 逻辑运算符
逻辑与 &,逻辑或 | , 逻辑异或 ^(不同为true,相同为false), 逻辑非 !
短路逻辑运算符
短路与&& 与逻辑与& 区别:
& 无论左边真假,右边都要执行
&& 如果左边为真,右边执行;左边为假,右边不执行
短路或 || 与 逻辑或| 区别:
| 无论左边真假,两边都要执行
|| 左边为真,右边不执行;左边为假,右边执行
- 三元运算符
关系表达式?表达式1:表达式2
1-3 死循环
// for 循环
for(;;){
System.out.println("--");
}
// while 死循环
while(true){
System.out.println("--");
}
//do while 循环
do{
System.out.println("--");
}while(true);
1-4 数组
数组:是一种用于存储多个相同类型数据的存储模型
定义格式:int[] arr;
数组初始化:为数组中的数组元素分配内存空间,并为每个数组元素赋值
数组初始化分为 动态初始化和静态初始化
动态初始化:
初始化只指定数组长度,由系统为数组分配初始值
int[] arr = new int[数组长度]
new: 为数组申请内存空间
(数组在初始化时,会为存储空间添加默认值)
静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度
格式:数据类型[] 变量名 = new 数据类型[] {数据1,数据2,数据3,....};
范例:int[] arr = new int[]{1,2,3}; 或者 int[] arr = {1,2,3};
2-1 类和对象
对象:是能够看得到摸得着的真实存在的实体
类:类就是对现实生活中一类具有共同属性和行为的事物的抽象
特点:
- 类是对象的数据类型
- 类是具有相同属性和行为的一组对象的集合
对象的属性:对象具有的各种特征,每个对象的每个属性都拥有特定的值
对象的行为:对象能够执行的操作
类是对象的抽象,对象是类的实体
类的组成:属性和行为
- 属性:在类中通过成员变量来体现(类中方法外的变量)
- 行为:在类中通过成员方法来体现(和前面的方法相比去掉static关键词)
同一个包下,手机类以及手机测试demo类,demo类可以直接调用手机类的方法?
2-1-1 对象内存图——103(单个对象)/104(多个对象)
多个对象内存图中可以看出:多个对象的成员变量是略有不同的,但是成员方法是可以共用的。
多个对象指向相同的内存图-105
2-1-2 成员变量和局部变量
成员变量:类中方法外的变量
局部变量:方法中的变量
区别:
- 类中位置不同:(成员变量)类中方法外;(局部)方法内或者方法声明上;
- 内存中位置不同:(成员)堆内存;(局部)栈内存
- 生命周期不同:(成员)随着对象的存在而存在,随着对象的消失而消失;(局部)随着方法的调用而存在,随着方法的调用完毕而消失
- 初始化值不同:(成员)有默认的初始化值,(局部)没有默认的初始化值,必须先定义,赋值,才能使用
2-1-3 封装
private关键字
- 是一个权限修饰符
- 可以修饰成员(成员变量和成员方法)
- 作用是保护成员不被别的类使用,被private修饰的成员只在本类中才能访问
针对该修饰的成员变量,若被其他类访问,使用get() 和 set() 方法用于 得到/返回 值
this关键词
- this修饰的是成员变量
- 方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量
- 方法的形参没有与成员变量同名,不带this修饰的变量指的是成员变量
- this的使用情况:解决局部变量隐藏成员变量的问题
- this:代表所在类的对象引用
- 方法被哪个对象调用,this就代表哪个对象
this内存原理---110
1. 封装概述
是面向对象的三大特征之一(封装、继承、多态)
是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外部是无法操作的。
2. 封装原则
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问,例如:成员变量private,提供对应下getXxxx()/setXxxx()方法。
3. 封装好处
①通过方法来控制成员变量的操作,提高了代码的安全性;
②把代码进行封装,提高了代码的复用性。
2-1-4 构造方法
格式:修饰符 类名(参数)
作用:创建对象
功能:主要是完成对象数据的初始化;
① 构造方法的创建
- 如果没有定义构造方法,系统将给出一个默认的无参数构造方法;
- 如果定义了构造方法,系统不再提供默认的构造方法;
② 构造方法的重载
- 如果定义了带参数构造方法,还要使用无参构造方法,就必须再写一个无参数构造方法
③ 推荐使用方式
- 最好都手工书写无参构造方法
Java中定义无参构造方法的意义
在Java程序编写中,子类的构造方法必定会调用父类的构造方法,如果在子类的构造方法中没有指定调用父类的哪个构造方法,在实例化子类对象时,子类会默认调用父类的无参构造方法。如果在父类中没有定义无参构造方法的话,编译会报错。
因此在类中声明一个无参构造函数可以避免其子类在实例化对象时出错
2-1-5 标准类制作--114
2-2 字符串
2-2-1 String (内存图--119)
String对象的特点
① 通过new创建的字符串对象,每一次new都会申请一个内存空间,虽然内容相同,但是地址值不同;
② 以 "" 方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM都只会建立一个String对象,并在字符串池中维护。
例如:针对第一行代码,JVM会建立一个String对象放在字符串池,并给s3参考,第二行则让s4直接参考字符串池中的String对象,也就是说他们本质上是同一个对象
String s3 = "abc" String s4 = "abc"
2-2-2 字符串的比较
使用 == 做比较
- 基本类型:比较的是数据值是否相同
- 引用类型:比较的是地址值是否相同
比较内容是否相同 利用 equals() ,其参数就是一个字符串
3-异常
3-1 Throwable
三个成员方法:
getMessage() 返回此 throwable 的详细消息字符串
toString() 返回此可抛出异常的简单描述
printStackTrace() 把一场的错误信息输出在控制台 - 最全的
异常分为 编译时异常(受检异常) 和 运行时异常(非受检异常)。其中编译时异常 必选显示处理,否则程序就会法伤错误,无法通过编译;运行时异常:无需显示处理,也可以和编译时异常一样处理。
自定义异常
public static 异常类名 extends Exception{
无参构造方法;
带参构造方法。
}
throws 和 throw的区别
2-3 Collection
2-3-1 List
list集合特有方法:add()\remove()\set()\get() 但是collection类没有这些方法;
listIterator 列表迭代器:允许程序员沿任一方向遍历列表的列表迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置。