目录
- 一、java项目文件组成
- 二、封装
- 1. 概念解释
- 2. 封装的优点
- 3. 构造方法
一、java项目文件组成
- src:放自己写的代码
第一层-包:例 com.zyf1007
第二层:java文件,例 HelloWorld.java
第三层:类{ } ,例 public class HelloWorld{ }, class Test{ } - out: 放输出的内容
①字节码的存储文件夹
②运行的字节码文件 .class - 库包: java 本身的类库、导入的其他jar包
二、封装
1. 概念解释
访问权限修饰符:作用于代码编译阶段,限制代码的使用范围(域)
各种访问权限修饰符的作用范围:
- private 本类中
- public 整个项目下都可以
- protected 本包中 、所有的子类中
- 不写 本包中
封装过程:
①用访问权限修饰符限制属性和方法的使用范围
②然后自己提供不受限制的方法来读写属性
2. 封装的优点
1.读写分离,代码更加规范,例:
private int age;
// 定义public 的方法 读写 属性
public void setAge(int age){
if(age<0){
throw new IllegalArgumentException("age < 0");
}
this.age=age;
User user = new User ();
user.setAge(20);
- 限制写入属性值的参数不合法的情况,例如age<0、数据长度超出范围,例:
private int age;
public void setAge(int age){
if(age<0){
throw new IllegalArgumentException("age < 0");
}
this.age=age;
}
- 对传入的参数整合 ,多个值可以整合为一组数据,例如长宽可以合并成一个参数,例:
private Point p;
public void setPoint(int x,int y){
p = new Point(x, y);
}
- 返回数据,对数据做整理。例:数据库中存储数据会简化 时间 - long变量 ,用户需要看到的是 年月日时分秒:
private long time;
public void setTime(long time){
this.time = time;
}
public String getTime(){
Date date = new Date(time);
return date.toString ();
}
User user = new User ();
long time = System.currentTimeMillis();
System.out.println (time);
user.setTime (time);
System.out.println (user.getTime ());
3. 构造方法
格式:以类名为方法名,没有返回值结构
用处:针对对象的创建,初始化属性以及必要调用的方法。
书写格式: [权限修饰符] 类名(){ }
规则:
- 每个类都有一个隐式的空参数构造方法
- 如果显式的写了构造方法,都会覆盖隐式的,不管有无参数
- 构造方法是在创建对象时执行,每个对象只有一次构造。
-每个对象至少调用2个构造方法,因为会调用父系类的构造方法 - 构造方法还可以带参数 、以及方法重载(同类中存在多个同名的方法,要求是参数不一致),例如:
private User(String username, String password, int age, long time, Point p){
this.username = username;
this.password = password;
this.setAge (age);
this.time = time;
this.p = p;
User user2 = new User ("a", "1", 20, time, new Point (10, 20));
- 私有化构造方法:这个类在本类之外不能实例化对象了,例:
父类:学生类,子类:大学生类、中学生类。
学生类比较抽象,不能拥有实例对象。要么私有化构造方法限制,或者直接写出抽象类。
但是在本类中可以创建对象,需要结合static使用。
static : 静态,可修饰属性、方法等。
性质1:唯一性(修饰属性在内存中只存在一份 ) ,不受对象限制。
性质2:由类名可以直接调用。
可以举这样的例子来解释唯一性,无论是直接用类调用的num(UserManage.num)还是创建对象的num(new UserManage ().num)都指向同一个num。
class UserManage{
static int num;// 只存在一份 不管多少个对象使用的都是同一份
public static void main(String[] args){
System.out.println (UserManage.num++);//0
System.out.println (++new UserManage ().num);//2
System.out.println (++new UserManage ().num);//3
System.out.println (UserManage.num);//3
}
}
static用于对象时为单例模式,一个类只能创建一个对象,一般用于要实例化对象是独一无二的情况。一般分为饿汉和懒汉两种方法:
①饿汉:在类中先实例化好,要用直接获取
private static User king = new User ("King");
public static User getKing(){
return king;
}
②懒汉:需要用该对象时再实例化(更节约空间,比较推荐)
private static User king1;
public static User getKing1(){
if(king1 == null){
king1 = new User ("King1");
}
return king1;
}
懒汉方法用于不是独一无二的对象时,称为工厂模式。如:
// 工厂模式 每次调用都能获取一个新的对象
public static User getUser(int id){
return new User("id");
}