Java面向对象
1.java是一门面向对象的编程语言,在java中,万事万物皆对象;
(在Linux中万事万物皆文件)
2.面向过程和面向对象
面向过程:就是分析出实现需求需要的步骤,通过一些方法一步一步实现
面向对象(行为化):可以把整个需求按照特点,功能划分,把这些存在共性的部分封装成类(类实例化之后才是对象),让对象去解决问题。
*举个例子:
七夕,你想送给女朋友一个包
面向对象:先找个店,买个包,不管是商家还是包,都是现实中真实存在的事物
这个商店或者是包,就可以称为对象,在整个你去买包或者是商家买包,我们都忽略了包是怎么加工的?
面向过程:找到原材料,字节切割,自己缝制,每一个工序自己干。
其实,高级的编程语言,会向着人的思考靠近
例子 :准备开个4S店,需要场地,车辆,
-
先说说怎么用代码怎么描述一辆车
-
描述信息:属性,从代码的角度来说就是变量,如品牌brand颜色color长度,宽度,价格
-
-
问题又来了,怎么才能描述好几个车,这时就可以使用面向对象来使用,车比较多可能就需要很多的数组来维护车的信息。
-
这时我们就要用面向对象的思想,我们要将车的属性封装为一个对象。
-
代码展示如下
-
package com.jsoft.morning; public class Car { /* * 我们要造车了,必须有一个图纸 * 根据图纸,可以造一百台车 * 图纸就是描述车的具体信息,对车的信息的封装 * 封装: 1.代码层面 2.思想层面*/ //车的品牌 只声明 不赋值 String brand ; // 颜色 String color; // 长度 String length; /*造车的图纸画完了, * 这个类,描述汽车属性的类: 有了图纸,就去造车*/
代码展示:
-
package com.jsoft.morning; public class Dog { //创建类 String name; //定义属性 String color; int ages; } package com.jsoft.morning; public class ch06 { public static void main(String[] args) { //定义一个main方法 Dog dog = new Dog(); // dog.name="月熊"; dog.ages=3; dog.color="白色"; System.out.println(dog.ages+dog.name+dog.color); } 定义一个没有返回值的方法:修饰符 返回值 方法名(自己起) (参数){} }
调用方法有返回值的用 .var
4.在java中面向对象中的特征
-
封装:分为两个层面:1.代码层面 2.思想层面
-
继承
-
多态
-
抽象
封装
-
如果把变量直接声明在类中,叫做成员变量,(作用和全局一个作用)说明变量时类的成员,如果把变量声明在一个方法中叫局部变量,说明只能在某一个部分好使。成员变量又可以叫做属性。
-
重点:之前我们学习过八种基本数据类型,从今天开始我们的数据类型就更多了,我们能够遇见的类包括刚刚创建的car类是一种数据类型,所有的类都是引用数据类型,只要有new就不是空,就有了地址
-
赋值的时候除了String之外其余的引用数据类型都需要new
-
我们需要了解两块内存空间,
-
栈:存变量和基本数据类型,
-
堆:赋值都在堆内存里
-
引用的数据类型默认值是null
-
成员方法
//publid:访问权限修饰符
//void:没有返回值,
//run():方法名,
//():传参数
//参数可以有多个,用,隔开
public void run(int you){
//定义了一个一个跑的方法
//省略了大火,挂挡
if(you==92){
System.out.println("92号油跑的很快");
}else if(you==95){
System.out.println("95号油跑的很快");
}else{
System.out.println("你加的假油吧");
}
System.out.println(brand+"在漂移");
}
-
标识符的命名规则:
-
类:大驼峰
-
变量名,方法名:小驼峰
-
-
java中的传参必须要定义类型,
-
在声明方法时()里的参数叫做形式参数,形参可以当作局部变量使用,调用方法时传进去的参数叫做实际参数。
-
return:终止方法继续执行,返回方法的返回值
-
访问权限修饰符:
-
public:公共的,只要在同一个工程中都可以掉用
-
protected:受保护的,
-
默认的:友好的,
-
private:私有的,最小只有在当前类可以用
(成员方法) 1.方法名不能重复
-
如果一个方法上有static要调用一个非static的方法,就只能创建对象使用对象.方法调用
-
自己调自己:递归。问题:错误,栈溢出
-
方法的重载
-
方法名相同
-
参数不同才能构成方法的重载
-
参数的类型不同,
-
参数的个数不同
-
参数的顺序不同
-
与返回值类型无关
-
与参数名称无关
-
与访问权限修饰符无关
-
与方法体无关
-
方法的重载一定发生在同一个类中,
好处:为了把功能相似或是相同的的方法
-
不定长参数
-
参数列表中,至多有一个不定长参数
-
不定长参数必须在最后位置。
-
代码展示:
package com.sunnaiyu;
//import java.lang.String;
/*
* 写两个重载的方法
* 求两个数的最大值
* 求三个数的最大值*/
public class Ch04 {
public static void main(String[] args) {
int max = max(1, 4, -5);
int max1 = max(4, 9);
System.out.println("两个数的最大值"+max);
System.out.println("三个数的最大值"+max1);
String str="您好";
String a=new String("haha");
System.out.println(a);
}
public static int max(int a, int b) {
return a > b ? a : b;
}
public static int max(int a, int b, int c) {
return (a > b ? a : b) > c ? (a > b ? a : b) : c;
}
/*public void sum1(int a1,int a2){
System.out.println(a1+a2);
}
public void sum1(int a1,int a2,int a3){
System.out.println(a1+a2+a3);
}
public void sum1(int a1,float a2){
System.out.println(a1+a2);
}
public void sum1(int a1,double a2){
System.out.println(a1+a2);
}
}*/
}
方法重载代码展示:
package com.jsoft.morning;
public class ch0000 {
public static void main(String[] args) { //方法名相同,都是sum
sum(1,2);
sum(4,5,6);
}
public static void sum(int a,int b){ //参数不同
int c=0;
c=a+b;
}
public static void sum(int a,int b,int c){
System.out.println("fy");
}
}
访问权限
-
public:公共的,只要在同一个工程中都可以掉用
-
protected:受保护的,
-
默认的:友好的,
-
private:私有的,最小只有在当前类可以访问
构造器(构造方法)
-
语法:访问权限修饰符 方法名(就是类名){}
特点:
-
java在new对象的时候,看对象所在的类有没有构造器,有什么样的构造器,如果没有构造器,无法创建对象,
-
每个类会有一个默认的无参构造器,
-
构造器什么时候使用的:对象被实例化时使用的。类名 对象名=new 构造器();
-
我们创建对象时是通过构造器创建的
-
如果一个类中显示的声明了一个构造器,原来默认的构造器就没了,只要写了构造器,按你的来,没写按他的来
*重点总结
有static:方法调用
1.首先定义一个类
2.public static void main(String[] args) { (main方法)
3.创建一个方法(public static void run(自己建){}
4.run(参数);
无static方法调用
1.创建对象(Text2 sch=new Text2();)/(类名+对象名=new 对象名)
2. sch.(方法名)(参数);
学习心得:
今天学习了函数的调用,方法重载,类(class),如何创建对象,遇到不会的题会问旁边的同学,他们讲的很仔细,很认真,会认真解答我的每一个问题,因为他们的热心帮助,今天的学习内容基本都了解了。