一、面向对象概述
面向对象是一种现在最为流行的程序设计方法,几乎现在的所有应用都以面向对象为主了,最早的面向对象的概念实际上是由IBM提出的,在70年代的Smaltalk语言之中进行了应用,后来根据面向对象的设计思路,才形成C++,而由C++产生了Java这门面向对象的编程语言。
js : prompt(); 能否把功能实现!
函数:function() 重复执行。
但是在面向对象设计之前,广泛采用的是面向过程,面向过程只是针对于自己来解决问题。面向过程的操作是以程序的基本功能实现为主,实现之后就完成了,也不考虑修改的可能性,面向对象,更多的是要进行子模块化的设计,每一个模块都需要单独存在,并且可以被重复利用,增强可维护性,所以,面向对象的开发更像是一个具备标准的开发模式。
面向对象的三大特征:封装,继承,多态。
java面向对象五大特征:封装,继承,多态,抽象,接口。
面向过程:针对开发中程序遇到的每一个问题,进行单个的编码解决。
面向对象:只对结果,不管实现的细节。
学习面向对象其实就是学习如何在代码中使用 封装,继承,多态。
在面向对象定义之中,也规定了一些基本的特征:
(1)封装:保护内部的操作不被破坏;
(2)继承:在原本的基础之上继续进行扩充;
(3)多态:在一个指定的范围之内进行概念的转换。
对于面向对象的开发来讲也分为三个过程:
OOA(面向对象分析)、OOD(面向对象设计)、OOP(面向对象编程)。
代码不是为了更简单 是为了更快
总结:面向对象最终的目的是在保证功能实现的基础上,方便后期程序的维护。
二、类和对象
2.1、类和对象的概述
类与对象是整个面向对象中的最基本的组成单元。
类:是抽象的概念集合,表示的是一个共性的产物,类之中定义的是属性和行为(方法);
对象:对象是一种个体的表示,表示一个独立的个体,每个对象拥有自己独立的属性,依靠属性值来区分不同对象,实实在在存在的。
类是对象的模板,对象是类的实例化。类只有通过对象才可以使用,而在开发之中应该先产生类,之后再产生对象。
类不能直接使用,对象是可以直接使用的。
2.2、类的定义
类不能工作
万物皆对象。程序是为了模拟现实。
程序中的类与对象。
[权限修饰符] class 类名{
}
注意
大驼峰,见名知意,$ _ 不能以数字开头,不能使用关键字。
public class Person {
//定义一个类中共有的属性
int age;
String name;
int height;
}
2.3、类对象的定义,的使用
为什么要·用对象? 为了更好的存储数据
JAVA中的对象。 想要用对象就必须先有类
创建对象需要以下三步:
声明:声明一个对象,包括对象名称和对象类型。
实例化:使用关键字 new 来创建一个对象。
初始化:使用 new 创建对象时,会调用构造方法初始化对象。
java:
1、创建类 并且类中要定义我们想要的属性
2、根据创建好的类,创建对象
类名 对象名 = new 类名();
3、使用创建好的对象来调用类中的方法和属性。
案例
public class Dog {
//属性:共有特征的提取
String name;
String color;
String breed;
//方法就是共有行为的提取
void jbxx(){
System.out.println("名字:"+name+"颜色:"+"品种:"+breed);
}
/*接收参数 food就是一个形式参数 形参
他的值谁调用谁决定
(参数列表: 数据类型 变量名 ,数据类型 变量名)
* */
String cc(String food,String yingliao){
System.out.println(name+"吃"+food+",喝"+yingliao);
//return 返回值 必须定义数据类型 void 代表没有返回值
return "吃饱了";//将结果给变量者
}
void kj(){
System.out.println(name+"在看家");
}
public static void main (String []args){
Dog xg=new Dog();
xg.name="小黑";
xg.color="黑色";
xg.breed="中华田园犬";
xg.jbxx();
xg.cc("鸡头","白开水");
xg.kj();
String str=xg.cc("鸡头","白开水");
System.out.println(str);
}
}
以后:运行代码要创建一个测试类 JavaTest,在测试类中测试代码是否可以运行。
定义一个测试类来去测试代码的运行
三、方法的函数和使用
3.1、什么是方法/函数
函数是指一段可以直接被另一段程序引用(调用)的具有特定功能的程序。也叫做子程序、(OOP中)方法。
If(){ 代码块 }: 控制代码块是否执行
For(){ 代码块}:控制代码块执行次数
Function(){代码块}:控制代码块何时执行 (调用的时候执行)
一个较大的程序一般应分为若干个程序块,每一个模块用来实现一个特定的功能。所有的高级语言中都有子程序这个概念,用子程序实现模块的功能。在C语言中,子程序的作用是由一个主函数和若干个函数构成。由主函数调用其他函数,其他函数也可以互相调用。同一个函数可以被一个或多个函数调用任意多次。
在程序设计中,常将一些常用的功能模块编写成函数,放在函数库中供公共选用。要善于利用函数,以减少重复编写程序段的工作量。
函数分为全局函数、全局静态函数;在类中还可以定义构造函数、析构函数、拷贝构造函数、成员函数、友元函数、运算符重载函数、内联函数等。
3.2、定义和调用
[权限修饰符] public [static] 返回值类型/void 方法名(参数列表){
代码块;return 返回值 ;
}
//权限修饰符 静态的 返回值类型 方法名 参数列表
public [static] void show(int a,String b){
}
都是非静态方法。
返回值类型:如果没有返回值,就是void 否则 根据具体的返回值的类型来写。类似 String int
方法和属性的调用:对象名.方法名(); 对象名.属性名;
3.3、参数和返回值
无参无返回值 没有返回值 要使用void 没有参数 小括号中不写内容。
public class Dem01{
public void aaa(){
System.out.print("无参无返回值的方法aaa()")//void 没有返回值
}
public static void maing (String [] args){
Dem01 dem01 =new Dem01();
dem01.aaa();//创建类的对象通过创建的对象去调用这个方法
}
}
无参有返回值 没有参数 但是有返回值
public String bbb(){
return "无参有返回值的方法aaa();
public static void main (String []args){
Dem01 dem01 =new Dem01;
dem01.aaa();
String str =dem01.bbb();
System.out.print(str+"1111");
}
注意事项
- 使用类中的方法或者属性之前,一定要先创建对象 先new。
- 对象中的属性和方法的调用 对象名.方法名/属性名
- 调用方法时传入方法的数据类型和顺序,都要跟定义方法时定义的参数数据类型和顺序完全一致。
- 方法的返回值类型根据自己的需求,看是否有返回值,如果没有返回值,就写void,如果有返回值,就写上与返回值数据类型相同的数据类型。
- 参数列表中不能有同名参数。
- 方法返回值的类型要大于等于 return 数据的类型;
四、方法的总结,重载,构造方法,
**静态方法可以使用.点来调用 但是和对象无关
虽然使用“引用.”来调用 但是实际还是重写前的方法
**
所有静态方法一般不用覆盖
因为方法覆盖不要和多态分开
4.1、方法的总结
方法的三要素:
方法名
返回值
参数列表
无参无返,无参有返,有参无返,有参有返。
方法应该定义在类(xxx.java)中,并且不能在方法中嵌套方法。
方法定义的前后顺序无所谓
方法定义之后不会执行,如果要执行,一定要调用
如果有返回值必须写return 返回值 必须有;
对于一个没有返回值的方法 return;可以用来结束方法
一个方法中可以有多个return,但同时被执行的只能有一个。 而且不能连写
if(a>b){
return a;
}else{
return b;
}
//判断两个数是否相同
public boolean fff(int a,int b){
if(a==b){
return true;
}else{
return false;
}
}
public static void main(String[] args) {
Test sc=new Test();
boolean c= sc.fff(23,34);
System.out.println(c);
}
4.2、重载
4.2.1、为什么需要方法?
在一个类中可以有很多的方法,并且每一个方法都有自己的功能,但是方法太多,对开发者不友好,名字太多不好记,所以使用方法重载,控制每一个方法中传入的参数,并且方法的名字都一样,java,会自动的根据传入参数的不同,调用参数相对应的方法。此时开发者不需要再记各种方法的名字了。非常nice !
4.2.2、什么是重载?
在一个类中可以有很多个相同名字的方法,并且这些方法中参数列表不同(参数个数不同,顺序不同,类型不同),这就是方法重载。
新 通俗
在同一个作用域里面方法名相同但参数个数和数据类型标题的方法 方法重载
4.2.3、特点
1. 函数/方法名相同
2.参数列表不同(参数个数不同,顺序不同,参数类型不同)。
如果方法名相同,参数列表也相同,此时虚拟机就懵逼了,不能分辨到底调用哪一个方法。
3.**注意**:方法重载不考虑返回值。
案例
public class Person {
/*求和
* */
public void getSum(int a, int b ){
System.out.println(a+b);
}
/*求小数
*
* */
public void getSum(int a,float b){
System.out.println(a+b);
}
/*求立方
* */
public void getSum(int a){
System.out.println(a*a*a);
}
public static void main(String[] args) {
Person mr=new Person();
mr.getSum(5,5);
mr.getSum(5,5.5f);
mr.getSum(5);
}
}
此时,两个同名方法,参数列表相同,方法的返回值不同,此时编译器不能区分两个方法,直接报错。所以:方法重载不考虑返回值。
java内置的方法重载
4.3、构造方法
4.3.1、什么是构造方法
构造方法 ,是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。
4.3.2、构造方法的声明
方法名跟类名要一致,没有返回值,也没有void。
public 方法名(参数列表){
}
构造方法生成的快捷方式:
alt + insert
4.3.3、特点
1、构造方法也是一个特殊的方法,new的时候调用
2、构造方法的方法名跟类名一致
3、没有返回值 也不能写void
4、如果不写构造方法的话,系统会默认一个无参构造
但是只要写了一个构造方法 默认的就没有了
5、建议写有参构造的时候直接吧无参也自己写出来
推荐在定义类时,直接把有参和无参构造都写出来。
6、构造的作用就是创建对象/成员变量初始化:给属性赋值。如果显示赋值以系统显示赋值为主,如果 没有构造会默认赋值 引用类型就是默认为null 数字为0 boolean类型默认 false char “\u000”
7、构造方法可以重载:构造方法可以写很多个——方法重载(参数列表不同)
this
4.4、static
static 静态的 修饰关键词
4.4.1、作用
修饰变量和方法,{代码块}
- static 修饰变量叫 静态变量
- static 修饰方法叫 静态方法
- static 修饰的代码块 叫做静态代码块
4.4.2、特点
static 静态的地址是共享的
第一次加载类的时候开辟 (第一次看见类名加载这个类)此时空间就开辟了 与new对象无关
所有的静态(静态变量和静态方法)都属于类 (全局)。//静态的内存占用要小心谨慎
推荐用类名调用静态变量
- 实例方法:可以调用静态方法和静态变量,又可以调用成员方法和成员变量。
- 静态方法: 只能通过类名调用静态方法和静态变量。如果想调用非静态的需要通过new对象来调用。
- 调用静态变量和方法时可以使用类名直接调用,也可以使用new对象来调用
但是推荐使用类名直接去调用。
实例方法可以调用静态变量
静态方法不能调用实例方法和实例变量。
3.4.2Final关键字
看上一天的内容
final 修饰的是常量 不能更改的量。
常量的赋值可以同时赋值 也可以在先声明后赋值 但赋值只能付一次
局部变量
成员变量
参数变量
final ----局部变量
引用变量
成员变量------final
new的时候需要显示给变量名的赋值 ,避开默认值的赋值
4.5、包、权限修饰符
包
为什么要包
没有包类多的时候不好找,所以包的作用在于管理类。包在磁盘体现上就是文件夹。
不同包下的类可以重名(同一目录类不能重名) 可以通过包做一些限定
包的定义语句:package 包名;
跨包请求的时候需要导入包:import 包名.类名;导入指定类import 包名.*;
权限修饰符
public 公共的
主要修饰成员变量和方法 作用:权限的设置,保护属性不被外界侵犯。
public 公共的 类似 公共wc。 一个项目中都可以。
protected 受保护的 小区里的wc。
默认:default friendly
private 私有的 自己家的wc