一:四种访问修饰限定符
①private:私人;只有自己知道
💚使用范围:同一包中的同一类
💛(private不能修饰类)
②default:默认值,也被称为包访问权限;什么都不写时就是default,
💚使用范围:同一包中的同一类/同一包中的不同类
💛(default不仅可以修饰方法/成员变量,还可以修饰类)
③protected:用于继承
💚使用范围:同一包中的同一类/同一包中的不同类/不同包中的子类
💛(protected不仅可以修饰方法/成员变量,还可以修饰类)
④public:公开;谁都能看到
💚使用范围:同一包中的同一类/同一包中的不同类/不同包中的子类/不同包中的非子类
💛(public不仅可以修饰方法/成员变量,还可以修饰类)
💗注意:一般情况下成员变量设置为private,成员方法设置为public
二:封装
(1)概念
将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互
💛把类的实现细节进行隐藏,你只需要用这个类即可,关于它怎么实现的你不要管
(2)封装使用的限定符
private
💜被private修饰的属性,只能在当前类使用,别的类无法访问
(3)private变量的使用
🌟 问题:private修饰的变量只能在当前类使用,那么如果我们需要在外类使用该怎么办?
💖方法:设置接口,即写一个方法
💙(设置用set;获取用get)
💚记住,只要private修饰变量,就set和get
💛快速创建set/get方法:右键代码页 ➯ generate ➯ Getter and Setter ➯ 点击需要的变量
class student{
//使用private修饰变量,就证明只能在student类使用
private String name;
private int age;
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 class hlizoo {
public static void main(String[] args) {
student s1 = new student();
s1.setName("hlizoo");
s1.setAge(18);
System.out.println("这位同学名字叫"+s1.getName()+","+"他的年龄是"+s1.getAge()+"岁");
}
}
三:封装扩展之包
(1)包的概念
①为了更好的管理类,把多个类收集在一起成为一组,称为软件包
②包其实是Java当中组织类的一种方式
③当你导入相应的包,包里面包含的类你就可以使用了
④同一个工程中允许存在相同名称的类,只要处于不同包即可
(2)常见的包
1. java.lang:系统常用基础类(String、Object)
(由编译器自己导入,不需要手动import即可使用)
2. java.lang.reflect:java 反射编程包
3. java.net:进行网络编程开发包
4. java.sql:进行数据库开发的支持包
5. java.util:是java提供的工具程序包。(集合类等) 非常重要
6. java.io:I/O编程开发包
(3)导入包中的类
💓①方法:import java.包名.类名;
💚例如:import java.util.Scanner;
💓②通配符:*
💛作用:充当任何类;不是导入包中的所有类,而是你用到哪个类它帮你导入哪个类
💚例如:import java.util.*; ➯当你用到util当中的哪个类就帮你导入哪个类
💓③更建议显式的指定要导入的类名,否则还是容易出现冲突
💚例如:util和sql里面都有Date类,如果都加通配符而不指定类名的话,编译器就不知道该使用哪个,从而造成报错
💛修改:
💓④可以使用import static导入包中静态的方法和字段
💚例如:导入lang包中Math的静态方法
💓⑤导入的包如果没用到就变灰色
(4)自定义包
1.基本规则
①在文件的最上方加上一个package语句指定该java文件在哪个包中
②包名尽量指定成唯一的名字
通常会用公司的域名的颠倒形式(例如 com.baidu.www )
③包名要和代码路径相匹配
例如创建com.baidu.www的包, 那么会存在一个对应的路径com/baidu/www来存储代码
④如果一个类没有 package 语句, 则该类被放到一个默认包中
2.操作步骤
①在 IDEA 中先新建一个包:右键 src ➯ new新建 ➯ package包
②在弹出的对话框中输入包名:
例如:com.baidu.com
③在包中创建类, 右键包名 ➯ new新建 ➯ Java Class类 ➯ 输入类名
例如:在com.baidu.com包中创建一个类hlizoo
④同时我们也看到了, 在新创建的 hlizoo.java 文件的最上方, 就出现了一个 package 语句
四:static成员
(1)static修饰成员变量
1.概念
static修饰的成员变量,称为静态成员变量,或者叫类成员
2.特性
①不属于某个具体的对象,是所有对象所共享的,共用的
②静态成员变量不属于对象,属于类
因此静态成员变量不存储在某个对象的空间
③静态成员变量/类变量存储在方法区中
(我们之前说的对象存储在堆上,成员变量储存在对象里)
④既能通过对象访问,也能直接通过类名访问(推荐后者)
静态成员的访问其实不需要对象,不用new对象直接类名访问即可
⑤随类的加载而创建,随类的卸载而销毁,伴随类的一生
⑥静态成员变量不能用this访问,因为它不属于对象
⑦即使为null,不指向任何对象,也可以用静态成员变量,因为静态成员变量属于类
3.区分三种成员变量
①普通成员变量:每个对象都有一份
💙创建范围:类内方法外
💚不初始化有默认值
②静态成员变量:所有对象共用一份
💙创建范围:类内方法外,但被static修饰
💚不初始化有默认值
③局部变量
💙创建范围:方法内部
💚不初始化会报错
4.代码理解
public class Student {
public String name;
public static String classRoom = "317"; //静态成员变量classroom
public static void main(String[] args) {
// 静态成员变量可以直接通过类名访问
// 连new对象都不用
System.out.println(Student.classRoom);
}
}
(2)static修饰成员方法
1.概念
static修饰的成员方法,称为静态成员方法,或者叫类方法
2.特点
①静态方法不属于某个具体对象,是属于类
②既能通过对象访问,也能直接通过类名访问(推荐后者)
③静态方法里只能用带static的静态成员变量
静态方法里不能使用this
④静态方法中只能调用带static的静态方法
⑤静态方法无法重写,不能用来实现多态
3.代码理解
public class Student {
public String name; //非静态成员变量name
public static String classRoom = "317"; //静态成员变量classroom
public static String getclassroom(){ //静态方法getclassroom
return classRoom;
}
public static void main(String[] args) {
// 静态方法可以直接通过类名访问
// 连new对象都不用
System.out.println(Student.getclassroom());
}
}