张掖公司网站制作,房天下怎样快速做网站,网店运营是做什么的,江苏省建设工程信息服务平台一、面向对象基本概念
/*
面向对象编程的步骤#xff1a;
1.先设计对象的模板#xff0c;也就是一个类class
生成一个新类的语句是#xff1a;public class 类名,就跟python中class 类名一样
2.通过new关键字生成具体的对象#xff0c;每new一次代表创建了的一个新的对象*…一、面向对象基本概念
/*
面向对象编程的步骤
1.先设计对象的模板也就是一个类class
生成一个新类的语句是public class 类名,就跟python中class 类名一样
2.通过new关键字生成具体的对象每new一次代表创建了的一个新的对象*//*
跟python相似java里的类也可以定义类方法
属性定义完后定义方法*/
public class Student{String name;int age;double height;double weight;double math_grade;double english_grade;public void showAllGrade(){System.out.println(name 的总成绩是 (math_grade english_grade));}
}
/*
这里有点像python中的init方法指明类的属性有哪些。
但是不用xiangpython那样self.name namejava中指明有name就行了
即 String name*/
类定义好了之后再新建一个文件创建具体的对象
/*
这个demo用于创建Student类下的一个具体对象
创建对象的语法
类名 对象名 new 类名();*/
public class Demo {public static void main(String[] args) {// 这里跟python有点像通过 对象名.属性 的方式给对象初始化Student XiaoMing new Student();XiaoMing.name 小明;XiaoMing.age 18;XiaoMing.height 175.0;XiaoMing.weight 74.3;XiaoMing.english_grade 144;XiaoMing.math_grade 125.5;System.out.println(小明的总成绩是 (XiaoMing.math_grade XiaoMing.english_grade));System.out.println(----------------);XiaoMing.showAllGrade(); //直接调用类方法跟在对象里调用一样的}}
二、对象到底是什么
对象实质上是一个数据结构jvm里有栈内存堆内存和方法区
对象名XiaoMing)存在栈里是一个地址这个地址指向一个具体的对象对象的属性存在堆里对象的方法存在方法区里。
执行一个从栈中弹出一个直至结束栈清空。
三、类的基本语法
类的语法是为了更好的设计出类
3.1构造器
构造器是一种特殊方法没有返回值名称必须跟类名一致。
构造器可以有参数也可以没有参数构造器可以重载。
它的语法如下
public class Student {public Student() {}
}
// 构造器就是类里的一个特殊方法
//构造器的常见应用场景在创建对象时同时完成对象属性的初始化赋值有点像init方法
//如此一来创建对象时传入相应参数即可跟python的类创建一样了
public class Student {int age;String name;String gender;public Student() {//这是一个无参构造器System.out.println(Student Constructor);}public Student(int age , String name , String gender) { // 有参数构造器age age;name name;gender gender;System.out.println(年龄 age);}}
demo:
public class Demo {public static void main(String[] args) {test();}public static void test() {Student s1 new Student(); //创建对象时会立即调用构造器Student s2 new Student(18,小明,男);}
}
tips:
定义一个类时就默认有了一个无参数构造器定义了有参构造器后无参构造器就没有了。
此时若还想再用无参构造器就必须自己显式的定义一个出来。
有参构造器可以使java像python那样新建一个对象即类名(参数列表)直接就把对象创建好了参数列表中为对象的各个属性。
而如果使用无参构造器就必须通过 “ 类名 对象名 new 类名()来创建一个对象创建后再
对象名.属性 多少的方式去初始化对象的各个属性。
因此实际中无参构造器和有参构造器一般都同时创建或都不创建。
3.2 this关键字
This就是一个变量用在方法中用来拿到当前对象。
创建一个新的类
public class Teacher {String name;public void print(){//this 是一个变量用于拿到当前对象的地址哪个对象调用这个方法this就拿到哪个对象System.out.println(this);//把this 打印出来发现其是一个地址System.out.println(this.name);}public void printFavoriteSong(String name){ //设计一个方法打印老师最喜欢的歌曲名字/* System.out.println(name 最喜欢的歌名是 name);
这就导致冲突了输出的是“歌名 最喜欢的歌名是 歌名” */System.out.println(this.name 最喜欢的歌名是 name);}
}生成一个对象
public class Teacher {String name;public void print(){//this 是一个变量用于拿到当前对象的地址哪个对象调用这个方法this就拿到哪个对象System.out.println(this);//把this 打印出来发现其是一个地址System.out.println(this.name);}
}
This的作用解决变量名称冲突的问题用this来指代对象this.属性就是拿到对象的各种属性
回过头再审视一下3.2中有参构造器的写法发现上面那么写其实是导致了变量名冲突的因此改进如下
public class Student {int age;String name;String gender;public Student() {//这是一个无参构造器System.out.println(Student Constructor);}public Student(int age , String name , String gender) { // 有参数构造器this.age age;this.name name;this.gender gender;System.out.println(年龄 this.age);}}
这就越来越像python了有参数构造器就是init方法this就是selfpython里初始化都是self.name name , java 里就是 this.name name。当然这并不严谨
对象的变量叫做成员变量(比如Teacher类的名字)方法中的变量叫做局部变量。 3.3封装
面向对象的三大特征封装多态继承
封装要求我们合理隐藏合理暴露。如下所示
/*
1.如何隐藏
使用private关键字来修饰成员变量令其只能在本类中被直接访问
其他任何地方无法访问也就是在外部不能用 对象名. 的方式去修改*/
public class Student {private String name;private int age;
/*
2.如何暴露
龟腚
使用public修饰的set和get方法来对成员变量赋值和取值这是公开的方法
所谓公开就是任何地方可以访问*/public void setName(String name){this.name name;}public void setAge(int age){if (age 0 age 200){this.age age;}else{System.out.println(请输入正确的年龄!);}}public String getName(){return name;}public int getAge(){return age;}
}
public class Test {public static void main(String[] args) {Student s1 new Student();s1.setAge(150);s1.setName(Ronnie);System.out.println(s1.getName());System.out.println(s1.getAge());}
}
从今往后都要按这种习惯写代码
成员变量私有化不让直接赋值而是通过设计公开的赋值取值方法来赋值和取值
3.4JavaBean实体类
什么是实体类满足以下两个要求的就是实体类
第一类中的成员变量全部私有并且提供公开的set和get方法
第二类中必须提供一个无参构造器有参构造器可选
生成一个实体类
//实体类可以提供有参数构造器
public class Student {//1.私有化成员变量private String name;private int age;private double math;//提供一个无参构造器必须public Student() {}//提供一个有参构造器可选public Student(double math, int age, String name) {this.math math;this.age age;this.name name;}/*2.提供公开的set 和 get 方法事实上右键-generate 可以自动生成*/public double getMath() {return math;}public void setMath(double math) {this.math math;}public int getAge() {return age;}public void setAge(int age) {this.age age;}public String getName() {return name;}public void setName(String name) {this.name name;}
}
实体类的作用
实体类只负责数据的存取而业务的其他需求由其他的类的对象来实现从而实现数据存取和业务处理的分离。
public class StudentOperator {//必须要拿到待操作的学生对象private Student s; // 定义了一个变量s类型是Student用来记住等会要操作的成员变量public StudentOperator(Student s) { //StudentOperator的有参构造器 this.s s;}public void printTotalGrade() {System.out.println(总成绩是 (s.getMath() s.getEnglish()));}}
public class StudentOperator {//必须要拿到待操作的学生对象private Student s; // 定义了一个变量s类型是Student用来记住等会要操作的成员变量public StudentOperator(Student s) { //StudentOperator的有参构造器 this.s s;}public void printTotalGrade() {System.out.println(总成绩是 (s.getMath() s.getEnglish()));}}
public class Test {public static void main(String[] args) {Student s1 new Student(89.0,18,张三,144);System.out.println(s1.getName());System.out.println(s1.getAge());System.out.println();//创建一个学生的操作对象专门用来完成需求StudentOperator s1_op new StudentOperator(s1);s1_op.printTotalGrade();}
}