1.1 类
同一个.java文件支持定义多个类,类名不能相同,必须只有一个类(与文件名相同的类)被public修饰,其余都是缺省
1.2 对象:Java中只有引用数据类型才能产生对象
注意:特殊的引用数据类型--数组,可以通过“=”发生地址指向的改变
声明:数据类型 对象名;
实例化(创建):数据类型 对象名 = new 数据类型([参数列表]);
声明和实例化的区别:
①个数。声明:只在栈内存声明一个类的对象。实例化:既在栈内存声明一个类的对象,又通过new关键字将地址指向堆内存。
②能否直接应用。声明:对象不能直接使用,会报空指针异常。实例化: 可以直接使用
1-3 类成员:在类中能定义的内容
① 成员变量Property(全局属性、全局变量、成员字段、成员属性):用来描述一类事物或一个具体的对象
按作用域分:
-
局部变量 : 作用于指定的代码块中,必须定义初值
-
成员变量 : 作用于整个类
按照动静态划分
-
成员变量 -- 实际开发中操作最多 ; 值会根据不同的用户 (不同的条件),进行不同的赋值
-
成员常量 -- 数据值(final) 和存储位置(static) 都相对稳定,实际开发中没有特殊要求一般不建议定义成员常量
② 成员方法 -- 该类事物所具备的功能 (能力)
③ 构造器 (构造方法) -- 用来实例化对象
//类定义方式 -- 名词提炼 : 人开门 伪代码
public class 人 {
public static void main(String[] args){
//门.open(); -- 门表示一类 , 实际开发中 ,不可能出现购买一类事物 , 不推荐使用类调用方法 , 而是通过类的一个具体的对象调用;
//创建(实例化) 门的一个具体对象;
门的对象.open();
}
}
public class 门 {
public static void open();
}
1-4类和类成员的定义格式 (重点记忆)
[ ]中的内容表示可有可无
[访问权限修饰符] [修饰符(一般只有一个)] class 类名 {
//成员属性
[访问权限修饰符] [修饰符(可以有多个)] 数据类型 属性名 [=值];
// 构造器 (构造方法)
[访问权限修饰符] 类名 ([参数列表]) { }
//成员方法
[访问权限修饰符] [修饰符] 返回值类型 方法名 ( [参数列表] ) [throws 异常类] [{
方法体;
[return 返回值结果;]
}]
}
2 访问权限修饰符
作用范围 | 本类 | 同包 | 子类\子包 | 任意 |
---|---|---|---|---|
public | * | * | * | * |
protected | * | * | * | |
缺省 | * | * | ||
private | * |
3 修饰符static:静态的,被修饰内容的位置相对稳定,修饰成员属性和成员方法和代码块
注意:
(1)被static修饰的成员属性可以“类名.成员属性”来调用
(2)在静态代码块中调用其它类成员,则该类成员也必须是静态
(3)修饰代码块时,代码块先加载,然后再执行的主函数,且在程序执行过程中只执行一次
//代码块示例
private static int num;
public static void main(String[] args){
System.out.println(num);
}
static{
num=10;
}
好处:省去创建对象造成内存空间的浪费
缺点:由于被修饰内容的位置相对稳定,不利于JVM虚拟机的清除,因此实际开发中不推荐使用
Work w = new Work();
w.show="123"; //浪费内存空间
Work.show="456"; //不用创建对象就能直接调用,节省内存空间
4 abstract:抽象的
修饰类,此类不能通过new关键字实例化对象
修饰成员方法,此成员方法没有方法体
5 final:最终的
修饰类,此类不能被继承,没有子类
修饰成员字段,必须定义初始值,且常量名要求全部大写
修饰成员方法,此方法不能被重写
拓展:常用于与static配合使用定义成员常量
常量:在某一特定时期内,值和位置相对稳定,存在常量池中
常量的定义格式:public static final 数据类型 常量名 = 值;
static与final:
static表示常量存储的位置相对稳定,final表示常量值相对稳定
6 synchronized:同步
修饰成员方法和代码块
7 面试题总结:请阐述你学过的修饰符有哪些?含义是什么?都能修饰什么 ? 修饰的特点是什么?
修饰符 | 含义 | 能够修饰什么 | 特点 |
---|---|---|---|
static | 静态的 | 成员属性,成员方法,代码块 | 类名.直接调用;代码块优先主函数加载,并且只加载一次 |
abstract | 抽象的 | 类,成员方法 | 类不能实例化对象;方法没有方法体 |
final | 最终的 | 类,成员字段,成员方法 | 类没有子类;成员字段必须有初始值;方法不能被重写 |
synchronized | 同步的 | 成员方法 和 代码块 | 同步操作 |
8 封装:将某些指定的代码 "保护" 起来 , 不被 外界轻易访问
(1)封装的是什么 ?
成员字段 : 全部私有化被private修饰 , 防止其他人外部随意访问
成员方法 : 将功能代码定义到指定类的指定方法中 , 从而简化了主函数代码操作,提高运行效率 , 在主函数中 , 只需要实例化对象 , 对象.调用方法
(2)使用封装的好处 (重点记忆)
-
提高代码安全性
-
简化主函数代码编写
-
降低类与类之间耦合度(解耦合):修改代码时的数量少,便于维护
9 构造器:①实例化对象 ②进行值传递
特点:
-
构造器方法名和类名一致
-
构造器没有返回值部分
-
空参构造与有参构造构成重载
注意事项 :
1 . 当类中没有明确定义构造器时 , JVM虚拟机会为当前的类自动配置一个默认的无参构造器
2 . 当类中如果明确定义了构造器 , JVM不会提供任何的构造器给你
3 . 实际开发过程中定义类时 , 无参、有参构造器同时编写以满足不同用户的需求
10 标准JavaBean类:定义属性、字段、方法、事件
(1)定义的Java类 必须使用 public 作为访问权限修饰符
(2)成员变量使用private修饰
(3)必须提供无参构造方法
(4)成员方法提供每一个成员变量对应的setXxx()和getXxx()方法
区分属性与字段:
① 字段 (Field) : Java类中 被访问权限修饰符 修饰变量 -- 一定是成员变量
② 属性 (Property) : Java中指定字段的get/set方法去掉get/set之后 单词首字母小写 与 成员字段名 一致 , 称之为属性
拓展 :
当成员字段的数据类型是 boolean 时 , 对应的 get方法会变为isXxx()
11. Java中的算法 -- 递归算法
(1)Java 不侧重算法 和 数据结构 ; 但是要求会两种算法 (递归算法和递推算法) 和集合部分的底层的存储结构
(2)使用算法的前提 : 已知一组数据 , 具有一定的规律
(3)以上的两种算法除了写法不一样 ,其他的都一样
(4)以上的两种算法含义 (典型例子:n的阶乘)
①递归算法 : 在自身的方法体中 , 再次调用自己
②递推算法 : 使用循环语句 (一般是 for循环) 对指定的代码完成重复操作
12 总结
(1)面试题 : 实际开发中 , 使用递归算法和递推算法哪个更好 ?
答 : 没有最好 , 只有最合适
① 当操作的次数较少时 , 推荐使用 递归方式 , 编写更加简便
② 当操作次数较多的时候 , 推荐使用递推 , 更节省栈内存空间
(2)递推方式更节省内存空间
递归方式实现原理在方法的本身再次调用方法 ,当且仅当执行到某一确定值的时候才能计算出结果 ,并不断的向前计算 ,结束之前开辟出来的方法 ,如果操作次数过多容易造成栈内存溢出