面向对象的三大特性:封装(基础、简单)、继承、多态。(抽象)
-
面向对象和面向过程的编程思想和编程方式。
-
了解了生活中的类和对象
-
程序中如何从生活中抽象出类和对象
-
Java中类和对象的使用
-
方法:面向过程的核心
- 方法的分类 4大种
- 方法的使用
- 构造方法
- this
- 方法重载
- 成员变量和局部变量的区别
理解封装的作用 - 可以有效解决不合理赋值的问题。
- 可以降低程序之间的耦合性。
- 可以提升代码的复用性。
- 降低了大型系统的风险…
合理的Java Bean规范(扩展) - 属性私有化
- 提供公共的getter和setter方法
- 提供无参构造
- 实现序列化接口 serializable
例:
public class Person implements Serializable{
// 了解 private static final long serialVersionUID = 2250398795727474486L; private String name; private int age; private char gender; // Alt+Shift +S -> r + Alt+A全选 -> Alt+r确认生成 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public char getGender() { return gender; } public void setGender(char gender) { this.gender = gender; } public Person() { super(); }
}
会使用Java的包来组织类
package
公司域名的倒序,包名全部小写。
为什么使用包:
因为在同一个文件夹下,是无法存放多个同名文件内容的。
因为在同一个文件夹下,如果所有文件都放在一起,无法有效的进行区分和查找。
可以根据包来定义访问权限。
模仿了windows等系统的树形结构目录。
如何使用包:
在定义好包之后,如果在包下定义类,类中一定要在有效代码的第一行添加package
包声明。
如果在不同包中使用某个类:
那么一定要在使用类中声明包的导入语句。 import
要引入的类地址; 例如:使用Scanner 、 Arrays
如果不这样做,JVM无法确认该类型的地址,也无法区分多个同名类型。
import
导入包声明 需要放在package声明下,类声明上的位置,它们之间的位置顺序固定。
java.lang
包下的内容不需要手动导入!例如:System、String
例:
package cn.kgc.demo1;
// 导入时 可以使用精细导入(全类名 / 全限定名 / 全/类路径) 也可以使用批量通配导入*
import java.util.Scanner;
public class Test{
}
包的命名规范:
公司域名的倒序,包命全部小写。
理解和掌握使用访问修饰符
public 公共的 在整个项目中都能用
private 私有的 只能在同一个类中使用
默认/包级访问修饰符(default/friendly) 什么也不加就是默认访问修饰符 只能在同一个包中使用。
protected 受保护的 和继承中的子类和父类有关
。
它们可以用来修饰类、方法、属性…
public class 类名{
public String name;
public void show(){
}
}
**
static 关键字
static 静态的
public static void main(String[] args){
}
- static修饰的信息是属于类的,它是随着类的加载而加载的。
- 我们没有被static修饰的信息是非静态/实例的,多个实例/对象之间的信息是相互隔离。而static修饰时被多个实例共享。
- 被static修饰的信息可以直接采用类名.的形式来调用,也可以使用对象来调用(不推荐)。
加载顺序
static可以用来修饰属性、方法,还可以用来修饰代码块。
静态代码块 -> 构造代码块 -> 构造方法
疑问:
当出现了父类 、 子类关系后
父类的相关代码块和方法 与 子类的相关代码块和方法 加载顺序如何?
public class Student {
public String name;
public int age;
public static int classId;
// 每一次创建对象都会执行 优先构造方法执行
// 代码块/构造代码块/成员代码块/非静态代码块
{
System.out.println("构造代码块执行了!");
}
public Student(){
System.out.println("构造方法执行了!");
}
// 静态代码块 它随着类加载而出现 所以只会在【第一次】创建对象时执行
static {
System.out.println("静态代码块执行了!");
}
}