目录
1.封装
1.1概念
将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。
1.2访问限定符
访问权限是用来控制方法和字段能否直接在类外使用。
范围 private default
protected public 1 同一包中的同一类 √ √ √ √ 2 同一包中的不同类 √ √ √ 3 不同包中的子类 √ √ 4 不同包中的非子类 √ default:什么也不写,包访问权限。
1.3封装拓展之包
1.3.1包的概念
为了更好的管理类,把多个类收集在一起成为一组,成为软件包。(包名小写)
package会告诉你当前这个类是在哪一个包中。
tip:包是对类、接口等的封装机制的体现。是一种对类或者接口等的很好的组织方式。
在同一个工程中允许存在相同名称的类,只要处在不同的包中即可。
1.3.2导入包中的类
可以使用import语句导入包
*为通配符,更建议显示的指定要导入的类名,否则容易出现冲突的情况。
快捷键:alt+enter可以知道它在哪一个类。
import java.util.Date; public class Test { public static void main(String[] args) { Date date =new Date(); } }
1.3.3自定义包
基本规则:
1.在文件的最上方加上一个package语句指定该代码在哪一个包中。
2.包名需要尽量指定成唯一的名字,通常会用公司的域名的点到形式(例如com/bit/demo1)。
3.包名要和代码路径相匹配,例如创建com.bit.demo1的包,那么会存在一个对应的路径com/bit/demo1来存储代码。
4.如果一个类没有package语句,则该类被放到一个默认包中。
创建方法:
1.3.4常见的包
1.java.lang:系统常用基础类(String,Object),此包从JDK1.1后自动导入。
2.java.lang.reflect:java反射编程包。
3.java.net:进行网络编程开发包。
4.java.sql进行数据库开发的支持包。
5.java.util:是java提供的工具程序包。(集合类等)。
6.java:I/O程序开发包。
2.static成员
2.1static
在Java中,被static修饰的成员,称之为静态成员,也可以称为类成员,其不属于某个具体的对象,是所有对象所共享的。(静态的只能是成员变量,不能是局部变量)
2.2static修饰成员变量(类变量)
被static修饰的成员变量,称为静态成员变量。
tip:1.不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中。
2.既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问。
3.类变量存储在方法区当中
4.生命周期伴随类的一生(随类的加载而创建,随类的卸载而销毁)
2.3static修饰成员方法
被static修饰的成员方法称为静态成员方法,是类的方法,不是某个对象所特有的。
tip:1.不属于某个具体的对象,是类方法。
2.可以通过对象调用,也可以通过类名.静态方法名字(...)方式调用,后者更合理。
3.不能在静态方法中访问任何非静态成员变量。(不能在静态方法中出现this)
4.静态方法中不能调用任何非静态方法,因为非静态方法有this参数,在静态方法中调用时候
无法传递this引用。
class Student{ static int score; public void getScore(){ System.out.println(score); } public static void get(){ getScore(); } }
2.4示例代码
class Student{
static int score;
public static void printScore(){
System.out.println(score);
}
}
public class Test {
public static void main(String[] args) {
Student stu1 = new Student();
Student stu2 = new Student();
Student stu3 = new Student();
Student.score = 30;
//score为三个stu的共同拥有的。
Student.printScore();
}
}
3.代码块
3.1概念
使用{ }定义的一段代码称为代码块。
*普通代码块
*构造快
*静态块
*同步代码块(后面会有)
3.2普通代码块
定义在方法中的代码块,不需要条件,永远会被执行。(使用的少)
public static void main(String[] args) { {//普通代码块 int x = 10; System.out.println(x); } int x = 100; System.out.println(x); }
3.3构造代码块(实例代码块)
定义在类中的代码块,一般用于初始化非静态的数据成员。
public static void main(String[] args) { Data data = new Data(10,20); } class Data { private int x; private int y; { this.x = 10; this.y = 20; System.out.println(this.x); }//构造代码块 public Data(int x, int y) { this.x = x; this.y = y; } }
3.4静态代码块
使用static定义的代码块,一般用于初始化静态成员变量。
public class Tests { static { System.out.println("静态代码块被执行了"); int a = 20; } static { int a = 30; System.out.println(a); } public static void main(String[] args) { Tests t = new Tests(); } }//最后会输出30,合并数据了
tip:1.静态代码块不管生成多少个对象,其只会执行一次。
2.静态成员变量是类的属性,因此是在JVM加载类时开辟空间并且初始化。
3.如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后顺序依次执行(合并)
3.5代码块执行顺序
27静态代码块>构造代码块
public class Tests { public int num1 = 10; public char ch = 'a'; { System.out.println("代码块执行了"); } static { System.out.println("静态代码块被执行了"); int a = 20; } static { int a = 30; System.out.println(a); } public static void main(String[] args) { Tests t = new Tests(); { System.out.println("普通代码块执行了"); } } }