java|类和对象(上)——JavaSE


文章目录

  • 1.对面向对象的初步认识
    • 1.1什么是面向对象
    • 1.2面向过程和面向对象
  • 2.类定义和使用
    • 2.1简单认识类
    • 2.2类的定义格式
    • 2.3类的定义的举例(定义一个类)
  • 3.类的实例化
    • 3.1定义
    • 3.2举例说明
    • 3.总结
    • 3.4类和对象的说明
  • 4. this引用
    • 4.1什么是this引用
    • 4.2this引用的特性
    • 4.3this的用法
  • 5.对象的构造以及初始化
    • 5.1构造方法
    • 5.2默认初始化
    • 5.3就地初始化
  • 6.封装
    • 6.1封装的概念
    • 6.2访问限定符
    • 6.3包

1.对面向对象的初步认识 1.1什么是面向对象 面向对象是一种解决问题的思想,主要是依靠对象和对象之间交互完成某一个事情
1.2面向过程和面向对象 面向过程注重的是过程,面向对象注重的是对象,面向对象就是要:找对象;创建对象;使用对象
2.类定义和使用 2.1简单认识类 【java|类和对象(上)——JavaSE】从语法上来讲,就是使用class关键字来定义类的,类将来就是用来描述对象的
2.2类的定义格式 语法格式:
class ClassName{
字段(属性) 或者 成员变量
行为 或者 成员方法
}
2.3类的定义的举例(定义一个类)
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|类和对象(上)——JavaSE
文章图片

java|类和对象(上)——JavaSE
文章图片

3.类的实例化 3.1定义 用类类型创建对象的过程,称为类的实例化,在java中采用new关键字,配合类名来实例化对象。
3.2举例说明
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(); } }

3.总结 1.①通过对象的引用,可以访问和修饰对象中的成员
②当成员变量没有初始化的时候,他们的值都是默认值,引用类型的默认值都是null,基本类型的默认值都是其对应的零值,int对应的是0;double对应的是0L;float对应的是0.0;Boolean对应的是false;char对应的是’\u0000’
2.属性\字段分为:普通的成员属性\成员变量;静态的成员属性\成员变量
3.属性是定义在方法的外部,类的内部
3.4类和对象的说明 1.类只是一个模型一样的东西,用来对一个实体进行描述,限定了类有哪些成员
2. 类是一种自定义的类型,可以用来定义变量,但是在java中用类定义出来的变量我们成为对象
3. 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量
4. this引用 4.1什么是this引用 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(); } }

java|类和对象(上)——JavaSE
文章图片

java|类和对象(上)——JavaSE
文章图片

java|类和对象(上)——JavaSE
文章图片

4.2this引用的特性 1.this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型
2. this只能在"成员方法"中使用
3. 在"成员方法"中,this只能引用当前对象,不能再引用其他对象,具有final属性
4. this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收
5.this指针不可以为空
4.3this的用法 1.this.成员变量(普通的成员变量,不能是静态的成员变量)
2.this.成员方法(普通的成员方法,不能是静态的成员方法)
3.this() 调用其他的构造方法(必须放在第一行)
5.对象的构造以及初始化 5.1构造方法 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调用其他构造方法来简化代码,但是必须是构造方法中第一条语句且不能形成环
5.2默认初始化 1.当成员变量没有初始化的时候,他们的值都是默认值,引用类型的默认值都是null,基本类型的默认值都是其对应的零值,int对应的是0;double对应的是0L;float对应的是0.0;Boolean对应的是false;char对应的是’\u0000
2.默认初始化后,new关键字后面发生的JVM做的事情(简单介绍):
①检测对象对应的类是否加载了,如果没有加载则加载
②为对象分配内存空间
③处理并发安全问题
④初始化所分配的空间
⑤设置对象头信息(后面介绍)
⑥调用构造方法<>,给对象中各个成员赋值
5.3就地初始化 在声明成员变量时,就直接给出了初始值
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); } }

6.封装 6.1封装的概念 1.面向对象程序的三大特性:封装、继承、多态
2.封装:从语法的层次上来说,就是把字段或者方法,使用private修饰符进行修饰,这样在类外,就不能拿到当前字段或者方法了,起到了封装的作用。从概念上来说,就是将数据和操作数据的方法进行有机结合,隐藏内部实现的细节,只对外提供待定的从开的,可访问的接口就可以了
3.快速添加getMyName和setMyName
java|类和对象(上)——JavaSE
文章图片

java|类和对象(上)——JavaSE
文章图片

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(); } }

6.2访问限定符 java|类和对象(上)——JavaSE
文章图片

default权限指:什么都不写时的默认权限
6.3包 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()); } }

3.自定义包
java|类和对象(上)——JavaSE
文章图片

java|类和对象(上)——JavaSE
文章图片

将自定义的包展开:java|类和对象(上)——JavaSE
文章图片

java|类和对象(上)——JavaSE
文章图片

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编程开发包

    推荐阅读