java学习之封装,加碎片知识:
(萌新每日记录,求指点)内容参考自b站动力节点及疯狂java讲义.
最难不过坚持,最易不过放弃。
一、方法小知识
形参个数可变的方法:
public class Product {
public static void test(int a,String...books){
//books被当作数组处理
for(String tmp:books)
{
System.out.println(tmp);
}
System.out.println(a);
}
public static void main(String[] args) {
test(2,"这个就像数组一样","字符串类型的","好方便");
}
}
输出应该是:
这个就像数组一样
字符串类型的
好方便
2
注意:个数可变的形参只能处于形参列表的最后。
二、封装
1、封装的优点:
(1) 提高代码的安全性。
(2)提高代码的复用性。
(3)高内聚”:封装细节,便于修改内部代码,提高可维护性。
(4)“低耦合”:简化外部调用,对外提供简单的操作入口,便于调用者使用,便于扩展和协作。
实现封装需要从两方面考虑:
·将对象的成员变量和实现细节隐藏起来,不允许外部直接访问。
·把方法暴露出来,让方法控制对这些成员变量进行安全的访问和操作。
2、封装步骤
1、属性私有化,使用private关键字修饰(所修饰数据只能在本类中访问)。
2、对外提供操作入口
·修改调用set方法
·读取调用get方法
3、set方法命名规范:(例子)
public void set+属性名(形参){
}
get方法命名规范:
public int get+属性名(){
return 属性;
}
注意:方法的属性名首字母应该大写(命名规范)。
在这里举个例子,如果有一个person类没有加以封装,对其中的age成员变量就可以随意操作,你可以对其赋值为负值,但这是错的,而封装侯就可以在setAge()方法中对年龄进行判断,输出正确的年龄,这个set/get方法和c++中的什么好像很像(只了解过,忘了,嘿嘿嘿。),封装后你就可以在setter中增加自己的控制逻辑,保证不会出现与实际不符的情形。
三、package,import和import static
1、package机制,我理解它是提供了类的多层命名空间,解决了类的命名冲突等问题。同一个包下可以存放功能相关的一组类。
在一个包使用不同包中的其他类时,需要使用该类的全名,如在lee包下的Hello类中创建lee包下子包sub中的Apple类时,必须加上包前缀:
lee.sub.Apple a=new lee.sub.Apple();
2、为了简化编程便引入了import关键字,可以向某个java文件中导入指定包层次下的某个类或全部类,则上述类导入可以写成:
import lee.sub.Apple
使用import package.subpackage…*:可以导入包下的全部类.
导入包后就可以直接使用这些类而不才需要加上包前缀。
3、import static是一种静态导入语法,可以导入指定类的单个静态成员变量,方法或全部静态成员变量,方法,前者格式如下:
import static package.subpackage...Classname.filedName|methodName;
//filedName为静态成员变量名,methodName为静态方法名
导入全部静态成员变量,方法的格式如下:
import static package.subpackage...ClassName.*;
就作用而言,使用import可以省略写包名,而import static可以连类名都省略:
import static java.lang.System.*;
import static java.lang.Math.*;
public class StaticImportTest()
{
public static void main(String[] args)
{
out为java.lang.System类的静态成员变量,PI为java.lang.Math类的静态成员变量
out.prntIn(PI);
}
}
四、碎片化知识:
1、栈中主要存储方法体中的局部变量。
2、方法的代码片段以及整个类的代码片段都被存储到方法区内存当中,在类加载的时候这些代码片段会载入。
3、使用new运算符创建的java对象,存储在堆内存中。对象内部有实例变量,所以实例变量存储在堆内存中。
4、变量分类:
·局部变量【方法体中声明】
·成员变量【方法体外声明】
·实例变量【前边修饰符没有static】
·静态变量【前边修饰符有static】
5、静态变量存储在方法区内存中。
6、最先有数据的是方法区内存,垃圾回收器主要针对堆区。
7、JVM【java虚拟机】主要包括:栈内存,堆内存,方法区内存三个内存空间。
8、一个java源文件中只能有一个公共类:
(请参考这位的博客:
https://www.cnblogs.com/zhukunqiang/p/6652787.html)