(面向对象)类与对象
什么是类(月饼模具,学生类,老师类,人类)
就是对具有相同属性和行为的物体的统称
用来描述同一类事物的属性和行为
(类是所有对象的通常)
什么是对象(每一个月饼就是一个对象,张三同学,李四老师,王五同学)
客观存在的事物皆为对象
具体一点说:就是某一类事物的体现
类与对象的关系
一个月饼是月饼模具的具体实例(一个月饼是真实存在的实物)
对象是类的实体体现
一.如何创建类
1.创建一个类
//(类名首字母大写,如果由多个单词组成,建议每个单词首字母大写)
访问修饰词 class 类名{
}
2.编写类的属性(成员变量)
属性:姓名 性别 身份证 科目 年龄......
String name;
String sex;
int age;
访问修饰词 数据类型 变量名;
3.编写类的行为(成员方法)
行为:吃饭 睡觉 打游戏 考试......
方法五要素:
访问修饰词 返回值 方法名 (方法参数){
方法体
}
案例: (怎么创建类)
/*
在同一个java文件中只能有一个public修饰的class (不包含内部类的说法)
而且public修饰class的类名必须与java文件名相同
*/
public class Demo01 {
public static void main(String[] args) {
}
1.创建类的方法
class a{
2.编写类的属性(成员变量)
String name;
int age;
3.编写类的行为(成员方法)
public void eat(String str){
System.out.println(name+"的年龄"+age);
}
}
二.访问修饰词
java访问修饰词(可以修饰类,可以修饰方法,可以修饰成员变量)
private : 私有的,只能在本类中访问
public : 公共的,公开的,表示任何地方都可以访问
default : (什么都不写)只能被本类或者同一个包中的类访问
protected : 受保护的,可以被本类,同一个包中的类,以及子类访问
同一个类 同一个包 子类 任何地方
private 1
default 1 1
protected 1 1 1
public 1 1 1 1
在同一个java文件中只能有一个piblic修饰的class (不包含内部类的说法)
而且public修饰的class的类名必须与java文件名相同
三.通过类创建对象
1.创建对象的格式
类名 对象名=new 类名();
2.调用成员变量(属性) / 方法的格式(行为)
对象名.成员变量
对象名.成员方法()
例如:
public class Demo01 {
public static void main(String[] args) {
//创建对象的格式
//类名 对象名=new 类名();
Student gu=new Student();
//通过gu调用name属性 (成员变量的引用)
gu.name="姑苏";
gu.age=18;
//通过gu调用方法 (方法的引用)
gu.eat("KFC");
System.out.println("姑苏的性别:"+gu.sex);
}}
class Student{
String name;
int age;
public void eat (String str){
System.out.println(name+"正在"+str);
}
}
四:构造方法
构造方法/构造函数/构造器
是一种特殊的方法
普通方法(五要素)
修饰词 返回值 方法名(方法参数){
方法体
}
(1):构造方法(特殊的方法)(四要素)
写法:
1.修饰词 方法名(方法参数){
方法体
}
(2):方法名与类同名
class Student{
//学生类的属性.
String name;
String sex;
public void eat(String str){
System.out.println(name+"正在吃"+str);
}
//无参构造 (用来初始化成员变量)
public Student(){
name=null;
sex=null;
}
//有参构造 (方法的重载 )
public Student(String n,String s){
name=n;
sex=s;
}
}
构造方法 :(使用)
public class Demo{
public static void main(String[] args) {
//创建对象的格式
//类名 对象名=new 类名();
Student gu=new Student(); (无参)
Student gu=new Student(n:”姑苏”,s:18); (有参)
//通过gu调用name属性 (成员变量的引用)
gu.name="姑苏";
gu.age=18;
//通过gu调用方法 普通(方法的引用)
gu.eat("KFC");
}
}
//创建的类
class Student{
//定义成员变量
String name;
int age;
//创建的方法
public void eat (String str){
System.out.println(name+"正在"+str);
}
//无参构造 (用来初始化成员变量)
public Student(){
name=null;
age=0;
}
//有参构造 (方法的重载 )
public Student(String n, int s){
name=n;
age=s;
}
}
构造方法 :(调用)
普通方法的调用
对象名.方法名()
构造方法的调用
new 类名(); 创建对象的同时调用构造方法,用来初始化成员变量
如果创建类的时候,没有给类手动添加构造方法,系统会默认补充一个无参构造
如果创建类的时候,有手动添加构造方法,系统不会提供默认的无参构造
构造方法的作用:用来初始化成员变量
/*
如果没有对成员变量赋值
那么:
如果成员变量是基本类型数,则默认值为0
如果成员变量是引用类型(除了基本类型以外的所有类型),则默认值为null
如果成员变量是boolean,则默认值是false
*/
构造方法的注意事项 [ 理解 ]
构造方法的创建
如果没有定义构造方法,系统将给出一个默认的无参构造
如果定义了构造方法,系统将不会提供默认的无参构造
构造方法的重载(方法名相同,参数列表不同)
如果自定义了带参数的构造方法,new对象的时候还是调用的无参构造,
就必须再写一个无参构造方法
推荐的构造方法的创建方式
无论是否使用,都需要手动添加一个无参构造
重要功能
可以使用带参数的构造,为成员变量进行初始化
五.成员变量和局部变量
成员变量和局部变量的区别
类中定义的位置 : 成员变量(类中方法外定义)
局部变量(方法内或方法的声明上)
初始化值不同: 成员变量(有默认的初始化值)
局部变量(没有默认初始化值,必须先定义,赋值才可以使用)
生命周期: 成员变量(随着对象的存在而存在,随着对象的消亡而消亡)
局部变量(随着方法的调用而存在,随着方法的调用完毕而消失)
public class Demo03 {
int b;//成员变量
public static void main(String[] args) {
int a=10;//局部变量
}
//d也是局部变量
public static void test(int d){
int b=20;//局部变量
System.out.println(b);
}
}