初识Java3
目录
一.面向对象与面向过程编程区别
二.类
1.类的定义
2.类一般格式
3.类的实例化=具体对象
4.this的使用(习惯经常用)
5.this引用
三.对象
1.初始化对象方法
2.构造方法
四.封装
1.封装:
2.拓展“包”
(1).包概念
(2).导入包使用的方法(三个)
(3).自定义包
3.static成员
静态成员变量特性:
静态方法:
4.代码块
(1).普通代码块
(2).构造代码块
(3).静态代码块
五.对象的打印
一.面向对象与面向过程编程区别
面对对象针对偏向与对对象的着重强调,面向过程编程过多强调的是动作(详细动作)。
例子:对于洗衣服的例子;
面向对象:用户把衣服和洗衣粉放到盆中进行清洗,
面向过程编程:
区别:面向对象着重强调对象交互,而非洗衣服的动作。
面向对象语言的三大特征:封装,继承,多态。
二.类
1.类的定义
既对事务功能的提取(抽象化)。
举例:对于洗衣机(具体事物),其标签就相当于一种类的抽象化如图红框内
2.类一般格式
//在java中定义类时需要用到class关键字
// 创建类
class ClassName{
field; // 字段(属性) 或者 成员变量
method; // 行为 或者 成员方法
}
//注意:
//类名注意采用大驼峰定义首单词大写后面小写
//成员前写法统一为public,后面会详细解释
//此处写的方法不带 static 关键字. 后面会详细解释(static为静态变量的标志,一般该变量不改变)
3.类的实例化=具体对象
ClassName classname=new ClassName //(可以把类当作一个引用类型来用)
注意:
4.this的使用(习惯经常用)
this关键字的使用定义:this引用只指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问。
区别:
//未使用this。
public class Date {
public int year;
public int month;
public int day;
public void setDay(int year, int month, int day){
year = year;
month = month;
day = day;
}
public void printDate(){
System.out.println(year + "/" + month + "/" + day);
}
public static void main(String[] args){
Date date=new Date;
date.setDay(1999.9,9);
date.printDate;
}}
//打印结果:0/0/0.
//使用this
public class Date {
public int year;
public int month;
public int day;
public void setDay(int year, int month, int day){
this.year = year;
this.month = month;
this.day = day;
}
public void printDate(){
System.out.println(this.year + "/" + this.month + "/" + this.day);
}
public static void main(String[] args){
Date date=new Date;
date.setDay(1999.9,9);
date.printDate;
}}
//打印结果:1999/9/9
5.this引用
三.对象
1.初始化对象方法
方法3:利用构造方法(如下)。(当不进行对象初始化的时候java默认会生成一个构造方法其内容为空)
2.构造方法
(1).概念:构造方法(也称为构造器)是一个特殊的成员方法,名字必须与类名相同,没有返回值类型,设置为void也不行。一般情况下使用public修饰在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。(一般用于初始化对象)
(2).构造方法可以重载(用户根据自己的需求提供不同参数的构造方法)例如:
public class Date {
public int year;
public int month;
public int day;
// 无参构造方法
public Date(){
this.year = 1900;
this.month = 1;
this.day = 1;
}
// 带有三个参数的构造方法
public Date(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
public void printDate(){
System.out.println(year + "-" + month + "-" + day);
}
public static void main(String[] args) {
Date d = new Date();
d.printDate();
}
}
注意:一旦用户定义,编译器则不再生成。如下图:
这里自己进行构造方法,但是其中没有初始化所以报错。
public class Date {
public int year;
public int month;
public int day;
public Date(){
this(1900, 1, 1);
//this.year = 1900;
//this.month = 1;
//this.day = 1;
}
public Date(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}}
注意: this(...)必须是构造方法中第一条语句 不能形成环(下图,会递归)。
四.封装
1.封装:
2.拓展“包”
(1).包概念
(2).导入包使用的方法(三个)
//使用import
import java.util.Date;
public class Test {
public static void main(String[] args) {
Date date = new Date();
// 得到一个毫秒级别的时间戳
System.out.println(date.getTime());
}
}
//当不适用import进行导入包时
public class Test {
public static void main(String[] args) {
java.util.Date date = new java.util.Date();
// 得到一个毫秒级别的时间戳
System.out.println(date.getTime());
}
}
可以理解为使用import时提前告诉程序包的位置下面使用时直接用,而不写意味着每次要在使用的时候告诉导入的包的位置。
导入包不具体明确类的方法:import java.util.*;
这样程序会直接在util包内去找要使用的方法。
但是不推荐这么做,会出现冲突,当两个不明确导入包有相同名称方法使用的时候会报错,不知道使用哪个方法,同样,即使不用*而是具体明确的两个包的导入有相同名称下面使用的时候只能写出要使用的方法的位置,不然系统无法分辨。
(3).自定义包
3.static成员
静态成员变量特性:
静态方法:
4.代码块
(1).普通代码块
//普通代码块:定义在方法中的代码块
public class Main{
public static void main(String[] args) {
{ //直接使用{}定义,普通方法块
int x = 10 ;
System.out.println("x1 = " +x);
}
int x = 100 ;
System.out.println("x2 = " +x);
}
}
// 执行结果
x1 = 10
x2 = 100
(2).构造代码块
public class Student{
//实例成员变量
private String name;
private String gender;
private int age;
private double score;
public Student() {
System.out.println("I am Student init()!");
}
//实例代码块
{
this.name = "bit";
this.age = 12;
this.sex = "man";
System.out.println("I am instance init()!");
}
public void show(){
System.out.println("name: "+name+" age: "+age+" sex: "+sex);
}
}
public class Main {
public static void main(String[] args) {
Student stu = new Student();
stu.show();
}
}
// 运行结果
I am instance init()!
I am Student init()!
name: bit age: 12 sex: man
(3).静态代码块
public class Student{
private String name;
private String gender;
private int age;
private double score;
private static String classRoom;
//实例代码块
{
this.name = "bit";
this.age = 12;
this.gender = "man";
System.out.println("I am instance init()!");
}
// 静态代码块
static {
classRoom = "bit306";
System.out.println("I am static init()!");
}
public Student(){
System.out.println("I am Student init()!");
}
public static void main(String[] args) {
Student s1 = new Student();
Student s2 = new Student();
}
}
五.对象的打印
通过system.out.println(对象);进行打印对象信息(但是tostring打印的都是地址信息),所以需要重写其中的tostring()方法进行打印内容,如下图。
public class Person {
String name;
String gender;
int age;
public Person(String name, String gender, int age) {
this.name = name;
this.gender = gender;
this.age = age;
}
public static void main(String[] args) {
Person person = new Person("Jim","男", 18);
System.out.println(person);
}
}
// 打印结果:day20210829.Person@1b6d3586
public class Person {
String name;
String gender;
int age;
public Person(String name, String gender, int age) {
this.name = name;
this.gender = gender;
this.age = age;
}
@Override
public String toString() {
return "[" + name + "," + gender + "," + age + "]";
}
public static void main(String[] args) {
Person person = new Person("Jim","男", 18);
System.out.println(person);
}
}
// 输出结果:[Jim,男,18]