Java学习day02
Java
面向对象
一、Java面向对象学习的三条主线
- Java类及类的成员:属性,方法,构造器,代码块,内部类
- 面向对象的三大特征:封装性,继承性,多态性
- 其他关键字:
this,super,static,final,abstract等
面向过程:强调过程和行为
面向对象:将功能封装进对象,强调了具备功能的对象,以类/对象为最小单位,考虑谁来做
类:是对一类事物的描述,是\(\textcolor{red}{抽象的}\),概念上的定义
对象:是实际存在的该类事物的每个个体,因而也称为实例
类中最主要的两个成员:属性和方法
属性 = 成员变量 = field = 域、字段
方法 = 成员方法 = 函数 = method 函数和方法一样都是定义了一个功能
我们造好类后要进行实例化
// 类和对象的使用(面向对象思想落地的实现)
import javax.xml.transform.SourceLocator;
public class PersonTest {
public static void main(String[] args){
//创建person类的对象 = 实例化
Person p1 = new Person();
//调用对象的结构:属性、方法
//调用属性:对象.属性
p1.name = "Tom";
p1.isMale = true;
System.out.println(p1.name);
//调用方法:对象.方法
p1.eat();
p1.sleep();
p1.talk("Chinese");
//****************************************************
Person p2 = new Person();
System.out.println(p2.name);//null 这些都是默认初始化值
System.out.println(p2.isMale);//false 这些都是默认初始化值
//****************************************************
//将p1变量保存的对象地址赋值给p3,导致p1和p3指向了对空间中的同一个对象实体
Person p3 = p1;
System.out.println(p3.name) //Tom
}
}
class Person{
//属性
String name;
int age = 1;
boolean isMale;
//方法
public void eat(){
System.out.println("吃饭");
}
public void sleep(){
System.out.println("睡觉");
}
public void talk(String language){
System.out.println("使用的是:" + language);
}
}
步骤:
- 创建类,设计类的成员
- 创建类的对象
- 通过”对象.属性“或”对象.方法“调用对象的结构
注:如果创建了一个类的多个对象,则每个对象都独立的拥有一套类的属性。(非static的)
意味着:如果我们修改一个对象的属性a,则不影响另外一个对象属性a的值
对象的内存解析
类中属性的使用
属性(成员变量)vs 局部变量
-
相同点
- 定义变量的格式:数据类型 变量名 = 变量值
- 先声明后使用
- 变量都有其对应的作用域
-
不同点
-
在类中声明的位置的不同
属性:直接定义在类的一对{}内
class User{ //属性(成员变量) String name; int age; boolean isMale; }局部变量:声明在方法内,方法形参,代码内,构造器形参,构造器内部的变量
class User{ //属性(成员变量) String name; int age; boolean isMale; public void talk(String language){//这里的language就是形参 System.out.println("使用的是:" + language); } public void eat(){ String food = "披萨";//定义在方法中也叫形参 System.out.println("我吃:" + food); } }
-
2.属性:可以在声明属性时,指明其权限,使用权限修饰符
局部变量:不可以使用权限修饰符
-
默认初始化值得情况:
属性:类的属性,根据其类型,都有默认初始化值
整形(byte,short,int,long):0
浮点型(float,double):0.0
字符型(char):0
引用数据类型(类,数组,接口):null
局部变量:没有默认初始值,所以调用前一定要赋值
-
在内存中加载的位置:
属性:加载到堆空间中(非static)
局部变量:加载到栈空间
方法的声明
方法的分类:按照是否有形参及返回值
public void eat(){}
public void sleep(int hour){}//包含形参
public String getName(){}
public String getNation(String nation){}//包含形参
方法的声明:修饰权限符 返回值类型 方法名(形参列表){方法体}
static,final,abstract来修饰的方法
关于权限修饰符
private,public,protected缺省
在方法内是可以调用当前类的属性或方法
特殊的方法A中又调用了方法A:递归方法
方法中不可以定义方法
练习
//定义类
public class Person1 {
String name;
int age;
/**
* sex:1表示男性
* sex:0表示女性
*
*/
int sex;
public void study(){
System.out.println("studying");
}
public void showAge(){
System.out.println("age" + age);
}
public int addAge(int i){//形参是调用时候再赋值
age += i;
return age;
}
}
//测试类
import javax.swing.text.PlainDocument;
public class PerTest {
public static void main(String[] args){
Person1 p1 = new Person1();
p1.name = "Tom";
p1.age = 18;
p1.sex = 1;
p1.study();
p1.showAge();
p1.addAge(2);
p1.showAge();
}
}
>>>studying
>>>age18
>>>age20
做两个练习
理解方法的重载
方法的重载:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可
“两同一不同”:同一个类,相同方法名
参数列表不同:参数个数不同,参数类型不同
import java.util.SimpleTimeZone;
public class OverLoadTest {
//以下四个方法构成了重载
//与修饰权限符,返回值类型,形参变量名,方法体都没有关系
public void getSum(int i,int j){
}
public void getSum(double d1,double d2){
}
public void getSum(String s,int i){
}
public void getSum(int i,String s){
}
}
在通过对象调用方法时,如何确定某一个指定的方法:
方法名->参数列表

浙公网安备 33010602011771号