面向对象是一种解决问题的思想,主要是依靠对象和对象之间交互完成某一个事情
面向过程注重的是过程,面向对象注重的是对象,面向对象就是要:找对象;创建对象;使用对象
从语法上来讲,就是使用class关键字来定义类的,类将来就是用来描述对象的
语法格式:
class ClassName{
字段(属性) 或者 成员变量
行为 或者 成员方法
}
class Student {
public String name;
public String gender;
public short age;
public double score;
public void doClass(){
}
public void doHomework(){
}
public void exam(){
}
}
注意:
1.类:类似于"图纸",而通过类产生一个真正的实体就是对象
2.类名采用大驼峰
3.一般一个文件中最好只定义一个类,不要写多个
4.main方法所在的类一般要使用public修饰
5.public修饰的类必须要和文件名相同
6.不要轻易去修改public修饰的类的名称,如果要修改,如下两张图片介绍了如何修改
用类类型创建对象的过程,称为类的实例化,在java中采用new关键字,配合类名来实例化对象。
public class Student {
public String name;
public String gender;
public short age;
//age = 18;//不能另起一行
public double score;
public void doClass(){
System.out.println(name+" "+" "+gender+" "+age+" "+score+" "+"上课");
}
public void doHomework(){
System.out.println(name+" "+gender+" "+age+" "+score+" "+"写作业");
}
public void exam(){
System.out.println(name+" "+" "+gender+" "+age+" "+score+" "+"考试");
}
public static void main(String[] args) {
Student student = new Student();//通过 new 关键字来实例化一个Student对象
student.age = 18;
student.gender = "女";
student.name = "李梅";
student.score = 85;
student.doClass();
student.doHomework();
student.exam();
}
}
1.①通过对象的引用,可以访问和修饰对象中的成员
②当成员变量没有初始化的时候,他们的值都是默认值,引用类型的默认值都是null,基本类型的默认值都是其对应的零值,int对应的是0;double对应的是0L;float对应的是0.0;Boolean对应的是false;char对应的是’\u0000’
2.属性\字段分为:普通的成员属性\成员变量;静态的成员属性\成员变量
3.属性是定义在方法的外部,类的内部
1.类只是一个模型一样的东西,用来对一个实体进行描述,限定了类有哪些成员
2. 类是一种自定义的类型,可以用来定义变量,但是在java中用类定义出来的变量我们成为对象
3. 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量
this代表的是指向当前对象的一个引用
public class MyDate {
public int year;
public int month;
public int day;
//局部变量优先原则
//解决了形参名不小心与成员变量名相同的问题
public void setDate(int year,int month,int day){
this.year = year;
this.month = month;
this.day = day;
}
public void printDay(){
System.out.println(this.year+"-"+this.month+"-"+this.day);
}
public static void main(String[] args) {
MyDate myDate = new MyDate();
myDate.setDate(2022,3,21);
myDate.printDay();
}
}
1.this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型
2. this只能在"成员方法"中使用
3. 在"成员方法"中,this只能引用当前对象,不能再引用其他对象,具有final属性
4. this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收
5.this指针不可以为空
1.this.成员变量(普通的成员变量,不能是静态的成员变量)
2.this.成员方法(普通的成员方法,不能是静态的成员方法)
3.this() 调用其他的构造方法(必须放在第一行)
1.概念:构造方法是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。
2.特性:
public class MyDate {
public int year;
public int month;
public int day;
public MyDate(){
this(2022,3,23);
System.out.println("不带参数的构造方法");
}
public MyDate(int year,int month,int day){
this.year = year;
this.month = month;
this.day = day;
System.out.println("带三个参数的构造方法");
}
public void setDate(int year,int month,int day){
this.year = year;
this.month = month;
this.day = day;
}
public void printDay(){
System.out.println(this.year+"-"+this.month+"-"+this.day);
}
public static void main(String[] args) {
MyDate myDate = new MyDate();
myDate.setDate(2022,3,21);
myDate.printDay();
MyDate myDate1 = new MyDate(2022,3,22);
myDate1.printDay();
}
}
注意:
①当我们没有提出任何的构造方法的时候,编译器会帮我们提供一个不带参数的构造方法,也就是说,一个类至少会有一个构造方法
②当我们写了构造方法,编译器就不会帮我们提供不带参数的构造方法了
③上述代码,不带参数的构造方法和带有三个参数的构造方法构成了重载
④名字必须与类名相同
⑤没有返回值
⑥创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次
⑦构造方法中,可以通过this调用其他构造方法来简化代码,但是必须是构造方法中第一条语句且不能形成环
1.当成员变量没有初始化的时候,他们的值都是默认值,引用类型的默认值都是null,基本类型的默认值都是其对应的零值,int对应的是0;double对应的是0L;float对应的是0.0;Boolean对应的是false;char对应的是’\u0000
2.默认初始化后,new关键字后面发生的JVM做的事情(简单介绍):
①检测对象对应的类是否加载了,如果没有加载则加载
②为对象分配内存空间
③处理并发安全问题
④初始化所分配的空间
⑤设置对象头信息(后面介绍)
⑥调用构造方法<>,给对象中各个成员赋值
在声明成员变量时,就直接给出了初始值
public class MyDate {
public int year = 2022;
public int month = 3;
public int day = 21;
public MyDate(){
}
public static void main(String[] args) {
MyDate myDate = new MyDate(2022,4,2);
}
}
1.面向对象程序的三大特性:封装、继承、多态
2.封装:从语法的层次上来说,就是把字段或者方法,使用private修饰符进行修饰,这样在类外,就不能拿到当前字段或者方法了,起到了封装的作用。从概念上来说,就是将数据和操作数据的方法进行有机结合,隐藏内部实现的细节,只对外提供待定的从开的,可访问的接口就可以了
3.快速添加getMyName和setMyName
public class Animal {
private String myName;
private int age;
private String sex;
public String getMyName() {
return myName;
}
public void setMyName(String myName) {
this.myName = myName;
}
public void eat(){
System.out.println(this.myName+" 吃饭");
}
public void sleep(){
System.out.println(this.myName+" 睡觉");
}
//类的调用者写的
public static void main(String[] args) {
Animal animal = new Animal();
animal.myName = "tutu";
animal.eat();
animal.sleep();
}
}
1.包的概念:为了更好地管理代码
2.导入包中的类
import java.util.Date;//导入包
public class TextDame {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date.getTime());
}
}
public class TextDame {
public static void main(String[] args) {
java.util.Date date = new java.util.Date();
System.out.println(date.getTime());
}
}
package com.baidu.www;//导入包
public class Text1 {
}
4.访问权限
同一包中的同一类可以访问,同一包中的不同类可以访问
package com.baidu.www;//导入包
public class Text1 {
public int data1;
private int data2;
int data3;//默认权限,包访问权限
public void func(){
System.out.println(data1);//同一包中的同一类
}
}
package com.baidu.www;
public class Text2 {
public static void main(String[] args) {
Text1 text1 = new Text1();
System.out.println(text1);//同一个包中的不同类
}
}
5.常见的包
① java.lang:系统常用基础类(String、Object),此包编译器会自动帮我们导入
②java.lang.reflect:java 反射编程包
③ java.net:进行网络编程开发包
④ java.sql:进行数据库开发的支持包
⑤ java.util:是java提供的工具程序包(集合类等) 非常重要
⑥ java.io:I/O编程开发包