JAVA4
JAVA是一种面向对象的编程语言,在JAVA中万事万物皆对象(在linux中,万事万物皆文件)
面向过程和面向对象
面向过程:面向过程就是分析出实现需求需要的步骤,通过一些方法来一步一步实现
面向对象(行为化):把整个需求按照特点、功能划分,将这些存在共性的部分封装成类(类实例化之后才是对象),让对象去解决问题。
高级的编程语言,会向着人的思考靠近。
面向对象是更高级的抽象,是对现实是世界的映射。
在JAVA中,面向对象的三大特征:封装、继承、多态(要是四个有 +抽象)
1.4种访问修饰符
public | 共有的、公共的 、最大 。只要public声明的方法,只要在文件里都可以用 |
protected | 受保护的 |
default(默认的) | 友好的 |
private | 私有的,只有在当前类里才能用 |
访问权限: | |
public | 一个工程下任意位置都能呈现。 可以放在、类、属性、方法、构造器上 |
protected | 可以跨包。 如果跨包,必须是它的子、 属性、方法、构造器 |
默认的(default) | 当前包下可以访问 类、属性、方法、构造器 |
private | 只有在当前类里才能访问 属性、方法、构造器 |
2.成员方法
(1)成员方法:(JS里是函数)
定义一个成员方法 例:public void run(){}
public:访问权限修饰符
void:没有返回值
run():方法名:标识符
{}:方法体,这个方法要干什么
()里面可以传参数
#在声明方法时()里的参数,形式参数(形参),形参可以当局部变量使用
#在调用方法时,真正传入方法的参数叫实际参数(实参)
(2)参数可以是多个,中间用“,”隔开 JAVA中的传参需要明确数据类型
(3)开发中大部分的方法都是有返回值的
public boolean run1(int gasoline) {
if (gasoline == 95) {
System.out.println(brand+"在快跑");
return true;
} else if (gasoline == 92) {
System.out.println(brand+"在跑");
return true;
} else {
System.out.println("假油");
return false;
}
}
这是有返回值的方法
boolean:返回值类型
返回值:return xxx 需要匹配类型
return关键字:
a:return关键字是终止方法继续执行
b:返回方法的返回值
3.创建对象
创建对象的过程,类的实例化的过程,对象又叫做类的一个实例
Car car1 = new Car();
//给车的属性赋值
car1.brand = "奥迪";
car1.color = "白色";
car1.length = 5;
//去除属性的值
System.out.println("第一台车,属性为:"+car1.brand+car1.color+car1.length);
//对象 方法名
car1.run(95,"米其林");
//有返回值的方法在执行后会得到一个具体的值,这个值可以保存下来
car1.run1(92);
boolean b = car1.run1(92);
System.out.println(b);
我们创建了一个Car的对象car1
car1就是对象的名
对象名的命名规则:小驼峰
创建对象的语法:类名 对象名 = new 类名()
5.封装
从两个层面考虑封装:1.代码层面 2.思想层面
如果把变量直接声明在类里,则是成员变量
如果把变量声明在方法里,局部变量
6.递归
方法名不能重复 自己调用自己就是递归
(1)递归问题:StackOverflowError 栈溢出 内存溢出
public static void main(String[] args) {
Ch02 c = new Ch02();
c.run();
}
public void run(){
run();
}
(2)斐波那契而数列
public int fibonacci(int number){
if (number == 1 || number == 0){
return number;
} else {
return fibonacci(number - 1) + fibonacci(number -2);
}
}
public static void main(String[] args) {
Ch02 c = new Ch02();
c.fibonacci(5);
System.out.println(c.fibonacci(5));
}
我们知道除了0和1,第number个数字,等于第number-1和第number-2个数的和
(3)阶乘
7.方法的重载(Overload)
(1)特点
a:方法名相同
b:参数不同(类型不同、个数不同、顺序不同)
c:发生在同一个类里
#方法的重载与返回值类型无关 与访问权限修饰符无关 与方法体无关
(2)好处
把功能相似、甚至相同的方法都叫同一个名字
public class Ch03 {
public void max(int a,int b){
if (a > b){
System.out.println("最大的数是:"+a);
} else if (b > a) {
System.out.println("最大的数是:"+b);
} else {
System.out.println("两个数相等");
}
}
public void max(int a,int b,int c){
if(a >= b && a >= c){
System.out.println("最大的数是:"+a);
} else if (b >= a && b >= c) {
System.out.println("最大的数是:"+b);
} else {
System.out.println("最大的数是:"+c);
}
}
public static void main(String[] args) {
Ch03 c = new Ch03();
c.max(3,4);
c.max(5,6,7);
}
}
#不定长参数
int ... arr
1.参数列表中至多有一个不定长参数
2.不定长参数必须在最后的位置
public int sum(int ... arr){
int result = 0;
if(arr.length < 2){
result = arr[0];
}else {
for (int i : arr){
result += i;
}
}
return result;
}
8.构造器(构造方法)
(1)语法:
访问权限修饰符 类名(){
}
(2)特点:
a.JAVA在new对象的时候,先看对象所对应的类有没有构造器,有什么样的构造器
如果没有构造器,则无法创建对象
b.每个类会有一个默认的无参的构造器
c.在对象被实例化时,调用了构造器
d.我们创建对象实际上是通过构造器创建的
e.如果一个类中显示的声明了一个构造器,那么原来默认自带的无参构造器就失效
所学知识还需熟练理解,递归问题理解欠佳,其他方面能够很好的理解,熟练掌握还需要一个阶段
早晨天气晴 晨跑 羽毛球 继续锻炼
晚天气阴雨 心情尚佳