参数传递的机制
引用类型传递,比如类的类型 在main方法中赋给形参,赋的是地址,对象操作实际就是在操作main方法中的变量,基本数据类型,调用赋值的是数值,不是地址
for循环
第一个条件可以不赋值,不用定义,如果赋值,变量调用不了,在括号里面,如果在for中没有定义,变量使用范围i++ 就可以出去了,后面还可以直接用
//如果是上面这种,i=1
for (int i = 1; i < arr.length; i++) {
if (minValue > arr[i]) {
minValue = arr[i];
}
a=i;
//如果写成下面这种
int i = 1
for (; i < arr.length; i++) {
if (minValue > arr[i]) {
minValue = arr[i];
}
b=i;
//后面的i++还是可以用的,到时候退出i=arr.length
对象必须要在main入口处调用才可以使用,要先new创建对象,然后调用
递归
计算f(n)就需要把后面的表达式调一下调到相对于的f(n)的表达式
常见递归问题:汉诺塔问题(附代码)
public class Hanoi1
{
private int n;
private String a;
private String b;
private String c;
public void move(int n , String a ,String b ,String c)
{
if(n<1)
{
System.out.println("Wrong Number <0");
}
else if(n == 1)
{
System.out.println(a + ">>"+ c);
}
else
{
this.move(n-1, a, c, b);
System.out.println(a + ">>"+c);
this.move(n-1, b, a, c);
}
}
}
兔子问题(附代码)
(斐波那契数列)
public class Test{
public static void main(String[] args){
int i = 1;
for(i=1;i<=20;i++){
System.out.println("兔子第"+i+"个月的总数为:"+f(i));
}
}
public static int f(int x){
if(x==1 || x==2){
return 1;
}else{
return f(x-1)+f(x-2);//此时就是f(x)=f(x-1)+f(x-2)
}
}
}
例:已知有一个数列:f(0) = 1,f(1) = 4,f(n+2)=2*f(n+1) + f(n),
其中n是大于0的整数,求f(10)的值。
public int f(int n){
if(n == 0){
return 1;
}else if(n == 1){
return 4;
}else{
// return f(n + 2) - 2 * f(n + 1);此时就是要把f(n)整体都减去2,就得出以下式子
return 2*f(n - 1) + f(n - 2);
}
}
还有快速排序也是递归,就不附代码了。
递归,就是方法体,自己调用自己,那么就有一个问题,方法体(非main方法),可不可以调用其他方法,经过验证是可以的,然后在被main方法调用。
return 后面不可以声明执行语句,但可以执行表达式语句
封装性
最底层的人提供api给Java的程序员,Java程序员做好项目提供用户,大家只要知道一个接口就可以了。(理解)
低耦合,外面的人需要什么就暴露出来什么入口调用,相当于一个功能按钮对应
如果加了限制符private只能通过调用方法,加入对属性的限制条件(逻辑语句)。
调用形参进行赋值,不可以 对象. 属性 直接调,提供方法作为一个形参入口来调属性,private的变量真实存在,相当于隐身了,new后堆中依然有这个变量,只是权限范围很小,栈中局部变量 不可以直接调用堆中的 成员变量,需要通过方法调用
封装后只能调用形参方法进行赋值,要想知道legs的值需要提供另外一个方法,return来返回值,才可以获得
封装性有几个体现
私有化属性
私有化方法,方法不可调用,内部类用自己用
单例模式,构造器
权限修饰符来修饰实现封装性
default是缺省,四个访问权限修饰符
修饰 类 只能 缺省,public
内部类就四个修饰符都可以
不同的包class可以重名,private同一个类,可见性的大小,相当于贴了一个标签,可见性标签
当封装后,set和get功能不要写在一起,不然就是有个别人起名字,又问别人叫什么,乱套了,要分开写比较人性化
构造器
任何一个类都有构造器 constructor 建设者
作用: 建造对象 创建对象 初始化对象的信息
如果没有显式定义类的构造器,系统提供一个空参的构造器
初始化对象的方法或属性,常见是初始化属性通过构造器形参
一个类可以有多个构造器,构造器在一个类中构成重载,一旦定义了构造器,系统不在提供默认的构造器
相当于没有就给你,有了就不给你了
对象或者类来调方法,方法相当于是功能