1.面向对象三大特征:
封装,继承,多态
2.类和对象。
类是对一类事物的描述,是抽象的。
对象是类的具体的实例。
3.类的组成:
1.属性 2.行为
属性决定了类里面有什么,行为描述了这个类能做什么。
例子:定义一个学生类,用来模拟学生。
/*
学生(属性,行为)
1.属性:
姓名,年龄
2.行为:
吃饭,学习,睡觉
*/
对应Java类:
成员变量(属性)
String name; //姓名
int age; //年龄
成员方法(行为)
public void eat(); //吃饭
public void sleep(); //睡觉
public void study(); //学习
TIP:
1.成员变量是直接定义在类中的,在方法外边。
2.成员方法不要写static关键字。
代码示例:
public class DemoStudent {
Stringname;
int age;
public void eat(){
System.out.println("现在我在吃饭");
}
public void sleep(){
System.out.println("现在我在睡觉");
}
public void study(){
System.out.println("现在我在学习");
}
public void eat(String food){
System.out.println("我在吃"+food);
}
}
4.引用类:
一般来说,类不能直接使用,需要根据类创建一个对象才能使用。
1.导包:import 包名称.类名称(如果处于同个包下的文件,那么可以省略这个步骤)
2.创建:
类名称 对象名 = new 类名称();
Student stu = new Student();
3.使用:分两种情况:
1.使用成员变量: 对象名.成员变量名
1.使用成员方法: 对象名.成员方法名(参数)
代码示例
public class Student {
public static void main(String[] args) {
DemoStudent student =new DemoStudent();
student.name="胡歌";
student.age =18;
System.out.println("学生姓名:"+student.name+"\n学生年龄:"+student.age);
student.eat();
student.eat("青菜");
student.sleep();
student.study();
}
}
TIP:
1.程序执行时调用方法进栈,方法执行完立刻从栈中退出。
2.一旦main方法结束,main方法也会退出内存,整个程序都没有了
3.两个对象指向同一个对象空间,对象名只是一个引用,
4.把方法作为一个参数传递进去,实际上传递进去的就是地址值。
5.方法作为返回值:
1.要返回类型接收,方法必须是静态的。(加static修饰符)
代码示例:
public class DemoReturnMethod {
public static void main(String[] args) {
DemoStudent studenttest =returnStudent();
System.out.println("学生姓名:"+studenttest.name+"\n学生年龄:"+studenttest.age);
studenttest.eat();
studenttest.eat("鸡腿");
studenttest.sleep();
studenttest.study();
}
public static DemoStudentreturnStudent(){
DemoStudent returnstudent =new DemoStudent();
returnstudent.name="李逍遥";
returnstudent.age =20;
return returnstudent;
}
}
6.局部变量和成员变量的差别
1.定义的位置不一样
局部变量:方法的内部
成员变量:在方法的外部,直接写在类当中
2.作用范围不一样
局部变量:只有方法当中可以调用,出了方法就不行
成员变量:整个类都可以通用
3.默认值不一样
局部变量:没有默认值,如果要使用,必须手动赋值
成员变量:如果没有赋值,会有默认值,跟数组默认值一样。
(tip:参数在方法调用的时候必然会赋值)
4.内存位置不一样
局部变量:位于栈内存
成员变量:位于堆内存
5.生命周期不一样
局部变量:随着方法进栈而诞生,方法出栈而结束
成员变量:随着对象创建而诞生,随着对象被垃圾回收而消失
7.封装:
含义:将一些细节信息隐藏起来,对外界不可见。
类型:1.方法 2.private
private 代码示例:
Person类
package demoprivate;
public class Person {
Stringname;
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
if(age>0&&age<150) {
this.age = age;
}
else
{
System.out.println("数据不合理!");
}
}
测试主函数:
package demoprivate;
public class DemoPrivate {
public static void main(String[] args) {
Person person =new Person();
person.name ="坂田银时";
person.setAge(28);
person.print();
}
}
TIP:
1.间接访问就是定义一个 Getter 和 Setter 方法
对于Getter来说,不能有参数,返回值类型和成员变量对应,
对于Setter来说,不能有返回值,参数类型和成员变量对应。
2.布尔类型的返回函数,不是Getter,而是isGetter()。
8.this关键字
当方法的局部变量和成员变量重名的时候,会优先“就近原则”,优先使用局部变量
使用 this 来区分。
通过谁调用的方法,谁就是this
9.构造方法
1.含义:专门用来创建对象的方法。跟new一样
2.格式:
public 类名称(参数类型 参数名称){
方法体;
}
3.注意事项:
1.构造方法的名称必须和所在类的类名称完全一样,大小写也一样。
2.构造方法不要写返回值类型,连void都不写。
3.构造方法不能return一个具体的返回值。
4.如果没有编写构造方法,那么编译器会自动默认创建
5.一旦编写了构造方法,那么将自动重载原本默认的构造方法
6.重载:方法名称相同,方法参数列表不同。
10.标准类:
标准类也叫Java Bean
格式:
1.所有的成员变量都要使用pravite关键字进行私有化修饰
2.为每一个成员变量编写Setter/Getter方法
3.编写一个无参数的构造方法
4.编写一个全参数的构造方法
代码示例:
标准Student类:
package demobiaozhunlei;
public class Student {
private Stringname;
private int age;
private Stringsex;
public Student(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public Student() {
}
public StringgetName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public StringgetSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
测试主函数方法:
package demobiaozhunlei;
public class DemoBiaoZhunLei {
public static void main(String[] args) {
Student stu1 =new Student();
stu1.setName("坂田银时");
stu1.setAge(25);
stu1.setSex("男");
System.out.println("我的名字是:"+stu1.getName()+"\n我的年龄是:"+stu1.getAge()+"\n我的性别是:"+stu1.getSex());
System.out.println("=========================");
Student stu2 =new Student("炮姐",18,"女");
System.out.println("我的名字是:"+stu2.getName()+"\n我的年龄是:"+stu2.getAge()+"\n我的性别是:"+stu2.getSex());
System.out.println("=========================");
stu2.setAge(25);
System.out.println("我的名字是:"+stu2.getName()+"\n我的年龄改变为:"+stu2.getAge()+"\n我的性别是:"+stu2.getSex());
}
}