1.面向过程:将一件事分成若干步骤,自己亲力亲为一步一步去做事。解决简单问题。
2.面向对象:将做一件事的所有参与实体找出来,自己不做事,调用这些实体协同把这件事做完。解 决复杂问题。面向过程和面向对象是一个相辅相成,互为补充的关系。
3.Java是一种纯面向对象的跨平台的语言。面向对象的语言:封装,继承,多态。
4.对象:用来描述客观事件的一个实体。(能用具体数据描述的都是对象) 类:具有相同属性和方法组成的对象的集合。 属性:对象的静态特征。 方法:对象的动态特征。 类与对象的关系:类是对象的数据类型,类是对象抽象,类是对象的模板,对象是类一个具体实 例,对象是类的代表。
5.类:是java最小单位,也是最基本单位。 5.1:关键字:class 5.2:类的声明的语法 访问修改符 class 类名{ 访问修饰符 数据类型 属性名;(成员变量) … 访问修饰符 返回值类型 方法名(形参列表){ 方法体; } … }
eg:/** * 老师类 * @author sx * @version 1.0 2019年6月25日 */ public class Teacher { /** * 姓名属性 */ public String tname; /** * 年龄属性 */ public int tage; /** * 性别属性 */ public char tsex; /** * 上课的方法 */ public void goToClass() { System.out.println("老师在上课"); } }5.3:一个类中可以有0个到多个属性,也可以有0个到多个方法。 5.4:用public修饰的类名必须与原文件名同名,但是不用public修饰的类名可以与原文件名不 同名。 5.5:一般情况下一个文件一个类(规范)。但是一个文件中写了多个类是可以。 5.6:一个类可以创建无数个对象。 5.7:一个可以有很多属性和方法,但是我们不是都将这些属性和方法写出来,只写与研究问题 相关和属性和方法。
6.对象的创建和使用 6.1:创建对象的语法:类名 对象名=new 类名();
6.2:属性的调用: 在同一个类中调用属性:属性名; 在不同的类中调用属性:对象名.属性名;
6.3:方法的调用: 在同一个类中调用方法:方法名(实参列表); 在不同的类中调用方法:对象名.方法名(实参列表);
eg://由类创建对象 Teacher t1=new Teacher(); //用对象调用属性,并给属性赋值 t1.tname="孙星"; t1.tage=18; t1.tsex='女'; //用对象调用方法 t1.goToClass(); t1.showMyself();7.this:代表当前类的对象的引用。(谁调用this就指代谁) 当方法的参数名和类中属性名同名,this用来区分属性和参数,此时的this不可以省略。 7.1:this调用当前类的属性:this.属性 (省略this) 7.2:this调用当前类的方法:this.方法名(实参列表) (省略this) 7.3:用this调用构造方法:this(参数列表); 只能写构造方法第一名。
eg:/** * 无参 * 构造方法 */ public Teacher() { System.out.println("这是teacher类的无参构造"); } /** * 全参数 * 构造方法 * @param name * @param age * @param sex */ public Teacher(String name,int age,char sex){ this();//调用本类的无参构造 this.tname=name; this.tage=age; this.tsex=sex; }8.封装:隐藏事件内部细节,提供对外访问的接口。是面向对象语言三大特性之一。 8.1:方法:对功能的封装。作用:提高代码的复用性和可维护性。 8.2:对属性的封装。作用:保证数据的安全性。 实现步骤:私有化属性,给属性提供公有的get和set方法供外界用
eg:/** * 私有化年龄属性 */ private int tage; /** * 获得年龄属性的方法 * @return */ public int getTage() { return tage; } /** * 设置年龄属性的方法 * @param tage */ public void setTage(int tage) { if (tage>0&&tage<150) { this.tage = tage; }else { System.out.println("年龄输入有误!"); } }9.构造方法:是一种特殊的方法。 9.1:构造方法的语法:public 方法名(形参列表){
} 9.2:构造方法的作用:创建对象或初始化属性。 9.3:构造方法的特征: 9.3.1:构造方法没有返回值类型。 9.3.2:构造方法的方法名与类名同名。 9.3.3:构造方法的调用,创建对象时默认调用。 9.3.4:每个类都有构造方法,如果你没有给类写构造方法,系统会默认给这个类分配一个 无参构造,如果你给类写了构造方法,系统就不会分配构造方法。
eg:/** * 老师类 * @author sx * @version 1.0 2019年6月25日 */ public class Teacher{ /** * 无参 * 构造方法 */ public Teacher() { } /** * 全参数 * 构造方法 * @param name * @param age * @param sex */ public Teacher(String name,int age,char sex){ this.tname=name; this.tage=age; this.tsex=sex; } /** * 姓名属性 */ public String tname; /** * 私有化年龄属性 */ private int tage; /** * 获得年龄属性的方法 * @return */ public int getTage() { return tage; } /** * 设置年龄属性的方法 * @param tage */ public void setTage(int tage) { if (tage>0&&tage<150) { this.tage = tage; }else { System.out.println("年龄输入有误!"); } } /** * 性别属性 */ public char tsex; } public static void main(String[] args) { //用自己声明的全参构造方法来创建对象 Teacher t3=new Teacher("王二麻子", 32, '男'); //给属性赋值 t3.tname="张大麻子"; //用对象调用属性或方法 System.out.println("姓名:"+t3.tname+",年龄:"+t3.getTage()+",性别:"+t3.tsex); //用无参构造方法来创建对象 Teacher t4=new Teacher(); //用对象调用属性或方法 System.out.println("姓名:"+t4.tname+",年龄:"+t4.getTage()+",性别:"+t4.tsex); }10.成员变量 VS 局部变量:在同一个范围内不允许有同名的变量。 10.1:声明的位置不同:成员变量是指在类直接声明的变量; 局部变量是指在方法中声明的变量。 10.2:默认值不同:成员变量不赋值时有默认值, String类型成员变量默认值是null int类型成员变量默认值是0 double类型成员变量默认值是0.0 char类型成员变量默认值是在windows是空格 boolean类型成员变量默认值是false 局部变量不赋值时没有默认值。 10.3:生命周期不同:成员变量是随着对象的创建而产生,随着对象的销毁而失效,所以成员 变量的作用域取决于访问修改符; 局部变量方法的声明地访产生,超过声明的大括号就失效,所以局部变量 的作用域在声明的大括号中。 10.4:存放位置不同:成员变量存放在内存的堆中;局部变量存放在内存的栈中。 10.5:访问修饰符不同:成员变量一定用了访问修饰符,局部变量不能用访问修饰符。 10.6:优先级不同:当成员变量和局部变量同名,局部变量的优先级更高。
eg:package com.qf.day7.demo4; /** * 学生类 * @author sx * @version 1.0 2019年6月25日 */ class Student{ /** * 姓名属性 */ public String sname="aa"; /** * 年龄属性 */ public int sage; /** * 性别属性 */ public char ssex; /** * 探讨局部变量和成员的方法 */ public void show() { //声明局部变量 int num1; String sname="bb"; //局部变量不赋值,没有默认值 //System.out.println(num1); System.out.println("姓名:"+sname+",年龄:"+sage+",性别:"+ssex); } } /** * 测试类 * @author sx * @version 1.0 2019年6月25日 */ public class Test{ /** * 入口 方法 * @param args */ public static void main(String[] args) { //调用构造方法创建类的对象 Student stu2=new Student(); stu2.show(); } }