1.面向过程
- 将一件分成若干步骤,自己一步一步亲力亲为去完成.解决简单问题.
- 面向对象:将做一件事所有参与者找出事业,自己调用这些参与协同将这件事完成.解决复杂问题.
- 面向过程和面向对象是一种相辅相成,互为补充的关系.
我要吃小龙虾
面向过程:自己去超市买龙虾,自己清洗龙虾,自己做龙虾,自己剥壳,自己吃,自己收拾好.
面向对象:自己点龙虾外卖,收到外卖吃,吃完后发动室友去收拾好.
2.三大特性
Java是一种纯面向对象的语言.面向对象语言都有三大特性:封装,继承,多态.
3.对象
用来描述客观事实的一个实体.(能用具体数据描述)
类:由一组相同属性和方法组成的对象的集合.
属性:对象的静态特征.
方法:对象的动态特征.
类是对象抽象,类是对象模板,类是对象的数据类型;对象是类的典型代表,对象是类的具体实例.
4.类
java是以类来组织代码,类是java的最小单位.类也是一种数据类型.
4.1:声明类的语法:
访问修饰符 [扩展修饰符] class 类名{
访问修饰符 数据类型 属性名1;//成员变量
访问修饰符 数据类型 属性名2;
...
访问修饰符 [扩展修饰符] 返回值类型 方法名(形参列表){
方法体;
[return 结果;]
}
...
}
4.2:声明类的关键字:class
- 一个类可以有0个到多个属性.我们在声明类时,只写与研究问题相关的属性.
- 一个类可以有0个到多个方法.我们在声明类时,只写与研究问题相关的方法.
- 类名采用帕斯卡命名法,属性名和方法名采用驼峰式命名法.
- 类的访问修饰符一般用public或default(不写修饰符),用public修饰的类名要与java的源文件名相同.
- 一个类可以创建无数个对象,每个对象都独有一份属性.
4.3:类中属性
也叫成员变量,不赋初值,系统会给它赋默认值
String类型属性,默认值是null
int类型属性,默认值是0
double类型属性,默认值是0.0
char类型属性,默认值是/u0000
boolean类型属性,默认值是false
eg:/**
* 学生类
*/
public class Student {
/**
* 姓名属性
*/
public String studentName;
/**
* 年龄属性
*/
public int studentAge;
/**
* 敲代码的方法
*/
public void printCode() {
System.out.println("正在敲代码...");
}
}
5.创建对象:
5.1:创建对象的语法:
- 类名 对象名=new 类名();
理解:站在面向对象角度来理解:由类生成对象
站在变量角度来理解:类名就是一种数据类型,对象名就是变量名.
注意: 对象名采用驼峰式命名法.
5.2:调用属性:
在同一个类中调用:属性名
在不同的类中调用:对象名.属性名
5.3:调用方法:
- 在同一个类中调用:方法名(实参列表);
数据类型 变量名=方法名(实参列表); - 在不同的类中调用:对象名.方法名(实参列表);
数据类型 变量名=对象名.方法名(实参列表);
eg:public static void main(String[] args) {
//由类生成对象
Student stu1=new Student();
//用对象调用属性,并赋值
// stu1.studentName="张三";
// stu1.studentAge=18;
//用对象调用属性并输出
System.out.println("姓名:"+stu1.studentName+",年龄为:"+stu1.studentAge);
//由类生成对象
Student stu2=new Student();
//用对象调用属性,并赋值
stu2.studentName="李四";
stu2.studentAge=22;
//用对象调用属性并输出
System.out.println("姓名:"+stu2.studentName+",年龄为:"+stu2.studentAge);
//用对象调用方法
stu2.printCode();
}
6.成员变量 VS 局部变量
在同一个作用范围内不能取相同变量名.
- 1:声明位置不同:成员变量在类中直接声明;局部变量在方法中声明;
- 2:初值不同:成员变量如果不赋初值,系统会默认赋初值;局部变量如果不赋初值,系统不会给它赋初值.
- 3:作用域不同:成员变量作用域由访问修饰符决定;局部变量的作用域在声明大括号内.
- 4:生命周期不同:成员变量的生命由对象创建而生,由对象的销毁而结束;局部变量的生成周期在声明大括号执行时而生,大括号执行就结束.
- 5:在内存中位置不同:成员变量存放在内存的堆中;局部变量存放在内存的栈中.
- 6:访问修饰符不同:成员变量一定有访问修饰符(不写就是default修饰符);局部变量不可以用访问修饰符.
- 7:优先级不同:如果在同一个类中,成员变量和局部变量同名时,局部变量的优先级更高.
7.构造方法
是一种特殊的方法.
7.1:构造方法的语法
访问修饰符 方法名(形参列表){
方法体
}
7.2:构造方法的方法名与类名相同.
7.3:无参构造
- 对于一个类来说,如果不显式声明构造方法,系统会给这个类分配一个默认无参构造方法.
- 如果显式声明构造方法,系统不会再给这个类分配构造方法.
7.4:构造方法的作用
创建对象或在创建对象的同时给属性赋值.
7.5:构造方法是在创建对象必须调用.
7.6:一个对象一生只能调用一次构造方法.
//eg:/**
* 猫类
*/
public class Cat {
/**
* 昵称
*/
public String cname;
/**
* 性别
*/
public char sex;
/**
* 无参构造
*/
public Cat() {
System.out.println("这是猫类的一个无参构造方法");
}
/**
* 全参构造
* @param cname
* @param sex
*/
public Cat(String cname, char sex) {
System.out.println("这是猫类的一个全参构造方法");
this.cname = cname;
this.sex = sex;
}
}
/**
* 构造方法测试
*/
public class CatTest {
public static void main(String[] args) {
int num=11;
//调用无参构造方法创建对象
Cat c1=new Cat();
//调用全参构造方法创建对象
Cat c2=new Cat("小花", '母');
System.out.println(c2.cname);
}
}
8.this
指代当前对象的引用(谁调用就指代谁).
- 1:this可以调用当前类中对象的属性:this.属性名;//可以省略this
- 2:this可以调用当前类中对象的方法:this.方法名();//可以省略this
- 3:this在构造方法中,当方法形参名与属性名相同时,this不可以省略,
用this调用的是属性. - 4:this调用当前类构造方法的语法:this([实参列表]);
注意: 用this调用构造方法时,只能写在构造方法的第一句.
//eg:/**
* 猫类
*/
public class Cat {
/**
* 昵称
*/
public String cname;
/**
* 性别
*/
public char sex;
/**
* 无参构造
*/
public Cat() {
System.out.println("这是猫类的一个无参构造方法");
}
/**
* 全参构造
*/
public Cat(String cname, char sex) {
this();//调用当前这个类中无参构造
System.out.println("这是猫类的一个全参构造方法");
//在构造方法中,当方法形参名与属性名相同时,this不可以省略,用this调用的是属性
this.cname = cname;
this.sex = sex;
}
public void show() {
//用this调用当前对象属性,this可以省略
System.out.println("猫的昵称为:"+this.cname);
}
public void show2() {
//用this调用当前对象方法,this可以省略
show();
}
}
9.名词解释:
测试类:包含main()类可以称为测试类.
初始化:给变量开辟空间或赋值.
个人笔记,思路,仅供参考