A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 黄冬 于 2015-5-12 23:15 编辑

封装定义:隐藏对象的属性和细节,只对外提供公共访问方式。
类、方法等都是封装的体现。
private:是一个关键字,表示私有的意义,可用于修饰成员变量和成员方法,
被它修饰完毕后的内容,其他类中不能直接访问。
一个访问权限修饰符,仅仅是封装的一种体现。
常见的应用:
将类中的所有成员变量私有,给出对应的get/set方法,可以在方法中做逻辑校验。

构造方法
构造方法格式及特点: 1、方法名与类名相同
                                 2、没有返回值类型  (三条都是构造方法的硬性要求
                                 3、没有具体返回值             缺一不可)
构造方法的作用:通过传递参数,给对象成员变量赋值,即为对象初始化。
构造方法注意事项:
1、如果没有给出构造方法,系统会默认给出无参构造方法
2、假如自定义了一个构造方法,系统将不再提供无参构造。如果需要无参构造,                只能自己再定义了。                建议是永远自定义无参构造。
3、构造方法重载是构造方法接收不同的参数,根据创建对象时的参数列表,选择                合适的构造方法。
给成员变量赋值: 可以通过set方法,(建议是用set方法,和get成对出现)
也可以通过构造方法,

this关键字
this代表其所在方法所属对象的引用,即this代表本类对象的引用。
简单记:在方法中,哪个对象调用方法,this就代表谁。
当在函数内需要用到调用该函数的对象时,就用this
除了静态方法外,所有的方法中有隐含的有一个this引用
应用场景:
用于解决局部变量隐藏全局变量值的问题,
构造函数中用。

代码块
概念:大括号括起来的代码就是代码块,
分类:1、定义在方法中的代码块,叫局部代码块。
  括号中定义的变量在括号结尾处即在内存中消失,即可以提高效率。
2、定义在方法外的代码块,叫构造代码块。
A、执行顺序:构造代码块一定是在构造方法之前执行的,而构造方法是在创建对象时调用的。  
B、作用:把所有构造方法中相同的内容定义在构造代码块中。
面试题:
class PersonTest
{
public static void main(String[] args)
{
Person p = new Person();
}
}
执行测试类,并创建对象的过程在内存中如何执行的?
1、加载PersonTest.class类文件到内存,
2、将主方法加载到方法区该类标示的空间,并在栈内存中开辟空间
3、执行到创建对象语句时,先加载Person.class文件到内存,还有要加载static修饰的变量和方法。
4、在main开辟的栈内存空间中,批出一块给Person p使用
5、new Person()就会在堆内存开辟空间
6、类方法进方法区,有类名做标记,同时成员变量进堆内存并给出默认初始化值
7、对成员变量进行显示初始化
8、如果有构造代码块,可以在构造代码块中对成员变量赋值。
9、执行构造方法,对成员变量赋值。
10、到此为止,初始化完毕;把堆内存对象的首地址值赋值给栈内存的p变量

static关键字
static可以修饰成员变量、成员方法,不能修饰构造方法
特点:
1、随着类的加载而加载,即随着.class文件加载进内存
2、因为1,所以静态优先于对象存在
3、为什么要使用静态修饰?【重要】
如果某个内容被所有对象共享,该内容就应该用静态修饰。
没有被静态修饰的内容,其实是属于对象的特殊描述。
这个是实际编程时应该考虑的。。。。
4、可以直接被类名调用【可以方便调用】
用static修饰的成员变量和成员方法都可以被类名直接调用,和对象调用效果一样。    类名.变量名-----类名.方法名()
注意事项:
1、在静态方法中,没有this关键字的。
因为静态是在类加载的时候被加载的,而this是对象创建才存在的
2、静态方法只能访问静态成员变量和静态成员方法,
非静态的方法,可以访问所有的变量和方法。
3、静态修饰的成员可以通过类名去直接调用的,也可以通过对象去调用
推荐使用类名调用。
应用场景:某个内容被所有对象共享的时候,考虑用static修饰。


不同java文件中类的方法的调用方式:
在测试类文件中,直接定义别的类的对象,然后该文件编译的时候,会自动编译调用类的文件。

通过javadoc命令制作帮助文档:
先在文件中写入【文档注释】的内容,
然后DOS中运行javadoc -d doc -author -version ArrayTools.java
                       文件夹名               帮助文档针对的类

API帮助文档的使用:(API:应用程序编程接口---帮助文档)
1、找到文档,双击打开
2、点击左上角的显示,变成隐藏,然后点击索引
3、在索引的输入框中,输入要寻找的类,回车显示查看
4、看这个类的结构
Java.lang包下的类,可以直接使用,类Math
Java.util包下的类,是需要导包操作才型,类Scanner
5、看看对这个类的说明
6、看看构造方法
a)有构造方法,那么就通过构造方法创建对象,然后对象调用变量和方法
b)如果没有构造方法,那么这个类一般都是静态的,通过类名直接调用
7、最后按照正常的操作使用方法
是否静态:如果静态,可以通过类名调用;否则必须创建对象调用
是否有明确返回值:void类型可以直接调用,否则需要输出或者赋值
看方法名:不要写错了
看参数:参数的类型和个数。

【以Math为例说明】
Math类是java.lang下的类,可以直接使用。
Math类中没有构造方法,而且方法都是static修饰的,所以可以类名直接调用
Math.abs(参数);返回参数的绝对值
Math.ceil(double a);返回大于等于a的最小整数,返回类型double
Math.floor(double a);小于等于参数a的最大整数,返回类型double
Math.round(参数);参数为double或者float,是返回最接近参数的值,即四舍五入后的结果。
Math.max(参数,参数);是比较求两个的最大值
Math类的随机数(掌握)        
        产生1-100之间的随机数:
        int number = (int)(Math.random()*100)+1;
【自学Random类的使用】
Random类是java.util下的类,所有使用之前要导包
Random类下有两个构造函数,而且方法中很少有static修饰的,所以要创建对象才能调用方法。
两个构造函数分别为:
Random();创建对象调用的方法,每次获取的随机数都不同
Random(long seed);创建对象后调用方法,每次获取的随机数都一样
int nextInt();获取int范围内的一个随机数
int nextInt(int n);获取0到n范围内的一个随机数,且包括0不包括n。
产生一个1-100之间的随机数:
Random r = new Random();
int number = (int)(r.nextDouble()*100)+1;
或者int number = r.nextInt(100)+1;

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马