类与对象
-
类:class 类别的概念
- 用代码来描述一类事物
- 相同或者相似的属性、特征、行为、功能
-
对象:Object 具体的事物
- 代码中的对象实际上是不存在的,只有创建对象的代码
- 对象是存在进程中的内存中的 是内存中的一份数据体
-
类的定义:
- 语法: class 类名{ }
- 内容: 用户类(用户名 密码 年龄 在线标识 | 查看信息 验证密码 登录 登出 等… )
- 对象成员相关:
- 属性:这类事物数据信息
- 变量: 数据类型 数据变量名;
- 常量: final 数据类型 数据变量名=值;
- 方法:这类事物的行为/功能逻辑
- 初始化构造部分: 创建对象时 初始化执行的
- 构造方法:
- 格式: 修饰符 类名(){ }
-
- 每个类都有一个空参数的隐式构造方法
-
- 如果显式的写了构造方法,不管有无参数都会覆盖隐式的构造方法
-
- 构造方法可以实现重载 方法重载(同一个类中可以存在多个同名的方法,参数不一致)
-
- 在创建对象时调用,通过传入不同的参数选择不同构造方法执行
- 构造代码块:
- 格式: { }
- 每次创建对象时都会执行构造代码块
- 构造方法:
- 属性:这类事物数据信息
- 静态资源部分:static 静态的 特性:唯一
- 属性: 在内存中只会创建一份,不管创建多少个对象,都是共享的 可以由类名直接调用
- 方法: 类名直接调用 ,方法中不能使用本类的对象成员
- 代码块:static{ }
- 类被加载时调用 且只会调用一次
- 对象成员相关:
package com.oop1.zyf0702;
public class User{
// 对象成员部分:
String name;
int age;
final int id;// 每个对象的常量,要求初始化赋值或者在对象构造区域赋值(代码块赋值/或者所有的构造方法中赋值)
{
// id = 1;
}
// 构造方法
public User(){
id = 1;
System.out.println ("User()");
}
public User(String name,int id){
this.id=id;
this.name = name;
System.out.println ("User(String name)");
}
// 构造代码块 用于初始化对象 不管调用哪个构造方法都会执行
{
System.out.println ("构造代码块");
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
// 静态资源部份:
static int num;
static final int MIN_AGE = 0;// 静态常量 表示固定不变的数据
static{
System.out.println ("num:" + num);
System.out.println (MIN_AGE);
System.out.println ("静态代码块");
}
public static void staticMethod(){
System.out.println ("num:" + num);
System.out.println ("staticMethod()");
}
public static void main(String[] args){
System.out.println (num++);
System.out.println (User.num++);
User.staticMethod ();
User user1 = new User ();
User user2 = new User ("张三",2);
user1.setName ("李四");
System.out.println (user1.getName ());
System.out.println (user2.getName ());
System.out.println (user1.id);
System.out.println (user2.id);
// user1.id=100;
}
}
封装
-
访问权限修饰符: 在程序运行中不受限制的 作用于编译阶段
- public 公共的
- protected 受保护
- package-default 缺省不写
- private 私有的
-
1: 使用受限制的修饰符修饰属性和方法
private int age;
-
2: 提供一系列的不受限制的访问方法来操作
-
- 实现数据赋值前的验证操作,保证参数赋值给属性的合法性
-
- 实现获取数据时,对数据的处理操作,保证数据的安全性与功能性
-
- 实现了读写分离,数据变量隔离,只能操作数据不能操作属性变量
-
private long time;
// long整数存储的是 1970年1月1日0时0分0秒到现在的毫秒数
public void setAge(int age){
if(age<MINAGE){
this.age=MINAGE;
}
this.age=age;
}
public int getAge(){
return age;
}
public long getTime(){
return time;
}
public String getTime(){
// 将 time 转成 年月日时分秒的格式 输出
return time;
}
- 构造方法也有访问权限修饰符,那我将构造方法私有化呢?
- 限制这个类不能随便创建对象,保证一个类只有固定的对象,不能由类的使用者随意来创建——单例模式。