包
1 包的来历
当有个包叫A包有一个类加C.另一个B包也有一个类叫C,当在一个项目中出现两个类的时候,该怎么分辨.这时候就要通过在他们面前加上他们的包名来区别.
2 包的命名规则
但是包名又该怎么命名呢,用域名,每一个地方的独一无二的,所以用域名来命名.一般的格式为
域名的反转+部门名称+项目名称+模块名.
而且一般用小写,中间用.分开,一般不能用驼峰命名
比如 :com.qianfeng.big1901.javalession
3 包的使用
我在B包要用A包的东西,吧A包导入进来才能使用.
导入格式 : 通过import+类的全路径名(包名+类名)
4 包的特殊地方
1 包名不能以java开头,javax开头(保护机制,只有java内部的类才能用java命名)
2.在同一个包下面的类不需要导入,在lang包下面类不需要导入可以直接使用(不如System.out.println)
3 如果要导入一个包下面的所有的类,那么可以用通配符*来导入,但是不推荐使用,造成导入的类冗余
构造器
1 构造器的创建
构造器规范: [修饰符] 类名([参数列表…]){
}
2 构造器的理解和作用
是一个特殊的方法,在使用new关键字或者创建对象时候被JVM调用,就是在new关键字的时候,他会自动调用.一般用来给一个类进行赋值.
3 构造器的注意事项
1 默认构造器
如果没有定义构造器,那么系统默认给一个无参构造器
2 覆盖默认构造器
如果自定义构造器,那么系统就不会再提供无参构造器(强制用户输入所需的属性)
3 构造器和方法比较:
构造器是没有返回值,连void也不行; 而且其名字一定要和类名一样,假如有返回值的话就是方法了,不是构造器了.
4 构造器相互调用
在构造器中调用构造器时,不能用类名,也不能用new,一定要用this关键字,并且传入已经定义好的构造器参数,并且构造器在互相调用的时候,必须把this([]),放在第一行调用.构造器不能互相调用,否则会形成死循环,当然代码也不能编译通过
6 构造器的重载
如果有多个构造器参数不一样,那么也可以称之为构造器重载
7 自己定义有参构造器要注意
如果我们定义了有参构造器,一般情况下要必须定义一个无参构造器(在框架中调用反射生成一个对象时候,默认都用无参构造器)
代码块
1 定义
在类里面,方法外面通过一对大括号来定义
2 作用
需要在一个类初始化时必须要执行的代码,就可以放在代码块.也就是这里可以写当new出一个对象的时候同时必须要干的事.例如:项目框架中使用,JDBC中连接数据库必须要注册驱动,这个驱动在代码块中执行
3 特点
1 执行时期
默认在创建对象时候执行(一般是new关键字),也就是说在new关键字的时候就执行了.每new一次就执行一次.
修饰符
public
共有的(public),对所有类可见。
default(默认)
在定义时默认的修饰符号,在同一包内可见,不使用任何修饰符,
注意:是不用任何修饰符
default int a ;
这样也是错的,直接 int a 就是默认default了
private
在同一个类中可见.实现对类的封装.一般要访问的话通过get和set函数来访问.
protected
受保护的(protected),对同一包内的类和所有子类可见
类
同级类
平级类是在第一个public类外面定义的一个类,修饰词不能用public和private因为一个类只能有一个入口除了这个限制以外,其他定义方式和常见类一样.平级类编译后的class文件名和主类是一样的.
类关键字
静态 static
static 修饰的变量的储存情况.
作用:
static定义的东西会存放在方法区,多个对象可以去使用,也就是多个对象共同使用带有static关键字的变量或者方法.会产生值的覆盖.而且使用是不用new对象,直接用类名就可以点出来使用.这便是他的方便之处.当然new对象也可以点出来但是不推荐使用.
特点:
1.静态方法是否可以调用静态方法 可以
2.静态方法是否可以调用非静态方法 不可以
3.静态方法是否可以调用静态字段 可以
4.静态方法是否可以调用非静态字段 不可以
非静态方法可以调用所有(跟上面比较)方法和属性(静态非静态)
/项目中使用:
1.常量一般用静态修饰符
2.工具类的使用,直接使用类调用方法,不用创建对象,譬如Arrays
总结:
有这么一个需求.需要实现自己的小金库,也就是自己创了一个类A,想只能自己使用,于是在A前面加了private,但是不行,java也不允许,因为,这样这个类就废了,完全封闭访问不了.但是可以在A的构造中加了private,这样在主函数中还是new不出来对象来.而这时可以在A类中写一个方法,在这个方法中new这个对象出来.并且加上static.这样就可以在main中通过static方法吧private类new出来了.