方法设计
解决代码的重复的解决方案:
方案一:使用循环,但是循环只能解决代码结构重复.
如果代码结构不同,循环解决不了.
方案二:使用方法,来解决代码中功能重复的问题.
方法定义:
(Method,有人又瞎称为函数(function),表示某一个功能/行为):
程序中完成独立功能,可重复使用的一段代码的集合;
方法定义(Method,有人又瞎称为函数(function),表示某一个功能/行为):
程序中完成独立功能,可重复使用的一段代码的集合;
分析main方法:
方法定义格式:
[修饰符] 返回值类型 方法名称([形式参数1,形式参数2])
{
方法体
[return 值;]
}
注意:必须定义在类里面,方法和方法之间是兄弟关系/平行关系,不能再方法内部再定义方法.
方法中的术语:
1):修饰符,顾名思义,对方法起修饰作用,public表示访问权限,static表示属于类(后详讲).
2):返回值类型,表示该方法完成一个功能之后,最终返回一个数据的数据类型.
1>:没有返回值: 此时使用关键字:void来表示.
2>:有 返回 值: 此时返回值类型就应该是基本数据类型/引用数据类型,比如int类型.
如果方法有返回值类型,此时在方法体里面,必须使用return关键字,用于返回一个该类型的值;
3):方法名称,方法表示功能,必须使用动词或动名词,而且首字母小写.
4):形式参数,方法圆括号里面的变量,形式参数可以有多个.
5):参数列表,参数的类型,参数的个数,参数的顺序.
6):方法签名,方法签名 = 方法名称 + 参数列表,不同的方法的方法签名是不同的.
7):实际参数,调用方法的时候,实际传递的数据,把实际传递的数据传给方法的形参.
方法的设计:
1>:方法的返回值类型如何确定:
方法的返回值类型,用于给当前方法的调用者返回一个结果.
如果某一个方法,仅仅只是完成一个功能,完成功能之后,不需要返回结果,此时返回类型是void.
如果方法需要给调用者返回一个结果,如果需要返回trye/false,此时返回类型就使用boolean.
2>:方法的参数列表如何确定:
在完成该方法功能的过程中,有哪些未知的元素参与,就把未知的元素作为参数.
比如:求两个整数之和.(此时两个整数是未知的)
方法的调用:
方法必须调用之后,才能执行(娶媳妇生孩子的例子).
方法可以重复被调用
注意:
1):现在,main方法只能调用使用static修饰的方法.
2):使用被调用方法所在的类名.方法名(实际参数);
3):对应使用void修饰的方法,调用不需要接收方法.
没有使用void修饰的方法,我们应该接收返回值.
方法返回类型 变量 = 方法所在的类名.static方法名(实际参数);
方法重载设计:模拟情景:
需求1:求两个int类型的数之和.
public static int getSum1(int a,int b){}
需求2:求两个float类型的数之和.
public static int getSum2(float a,float b){}
需求3:求两个long类型的数之和.
需求4:求两个double类型的数之和.
需求5:求一个int类型的数和一个double类型的数之和.
public static int getSum5(int a,double b){}
上述方法的设计都没有问题,但是美中不足,不同类型的加数对应的方法名称不同,我们软件攻城狮就得去记住哪些类型相加对应哪一个方法名称.
分析上述问题:上述问题的功能,都是求和,但是因为参数列表不同而造成了方法的名称不同,就给我们带来很大不利.------->解决方案:既然功能相同了,要是方法名称相同,就好记忆多了.
JVM内存模型
JVM内存划分:
根据内存的不同的存储特点,人为的划分为5个逻辑区域.
程序计数器:当前线程所执行的字节码的行号指示器。
本地方法栈:为虚拟机使用的native方法服务。
Java虚拟机栈(Stack):描述Java方法执行的内存模型,每个方法被执行的时候都会同时创建一个栈帧用于存储局部变量表、操作栈、动态链接、方法出口等信息。
Java堆(heap):被所有线程共享的一块内存区域,在虚拟机启动时创建。所有的对象实例以及数组都要在堆上分配空间,凡是 使用 new 关键字创建出来的对象,都存放于堆中。
方法区:线程共享的内存区域,存储已被虚拟机加载的类信息、常量、静态变量即时编译器编译后的代码数据等(这个区域的内存回收目标主要是针对常量池的回收和对类型的卸载)。
一维数组
面向对象思想
类和对象
构造器
static修饰符
深入变量
封装思想
继承思想
多态思想
代码块
final修饰符
基本类型包装类
抽象类
模板方法设计模式
接口
内部类
枚举
组合关系
Eclipse
常用类
异常处理
打包/归档/文档
线程和并发
数据结构
集合框架
I/O 操作
网络编程
Java5新特性
Java7新特性
Java8新特性
NIO操作
类加载器
反射机制
注解(Annotation)
内省机制