《java从入门到放弃》javase入门篇:面向对象语法二(入门版)

     2022-03-22     177

关键词:

想了半天,发现单独的封装和多态没什么好讲的,我们就简单说说Java里面对应的语法吧。

相关内容如下:

一、访问修饰符

二、getter/setter方法

三、构造方法

四、super和this

五、static关键字

六、final关键字

七、方法重写

八、抽象类和接口



一、访问修饰符

    Java当中有四种情况,按其访问范围的顺序由小到大分别是:

    priate(私有)---->default(默认)---->protected(受保护)---->public(公共)

    访问范围可以看下图:

技术分享


二、getter/setter方法

    这个属于封装,前面例子中的女神的年龄,一般年龄肯定不能小于0吧,如果小于0了就给个默认值18,所以我们通过使用get/set方法来封装这个属性,就可以对属性的取值进行限定了。

	private int age;		//年龄,定义为私有
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		if(age<=0){
			this.age = 18;
		}
		else{
			this.age = age;
		}
	}

三、构造方法

    构造方法一般用于在初始化对象时就给对象的属性赋值,前面我们创建一个女神对象是这样写的代码:

//创建三个女神类型的对象
Goddess lin = new Goddess();	//女神对象
lin.name = "林志玲";
lin.age = 43;
lin.stature = 1.73;
lin.faceValue = 99;		//颜值

如果使用构造方法,需在要对应的内中写一个没有返回值类型的方法并且方法名与类名相同,同时,为了保证还能创建空白对象,我们还要编写一个无参的构造方法,代码如下:

public class Goddess extends Woman {
	public int faceValue;		//颜值
	
	public int getFaceValue() {
		return faceValue;
	}
	public void setFaceValue(int faceValue) {
		this.faceValue = faceValue;
	}
	
	public Goddess() {}    //为了保证以后还能初始化空白的对象,保留无参的构造方法
	public Goddess(String name,int age, double stature, int faceValue){
		this.setName(name);
		this.setAge(age);
		this.setStature(stature);
		this.setFaceValue(faceValue);
	}
}

创建对象的代码就简单很多了:

Goddess lin = new Goddess("林志玲", 43, 1.73, 99);	//女神对象

四、super和this

    观察仔细的人应该发现,上面的代码中出现了“this”关键字,这个表示“当前对象”,另外一个“super”表示父类对象。

    上面的代码可以做如下修改,如果父类也有构造方法,子类可以使用“super”来调用:

//父类中的构造方法代码
public class Woman(){
	public Woman(String name,int age, double stature){
		this.setName(name);
		this.setAge(age);
		this.setStature(stature);
	}
}
//子类中的构造方法代码
public class Goddess extends Woman {
	public Goddess(String name,int age, double stature, int faceValue){
		super(name, age, stature);
		this.setFaceValue(faceValue);
	}
}

注意:调用父类的构造方法super(),必须写在第一行。

技术分享


五、static关键字

    被static修饰的东西,我们称之为静态的。比较常用的有静态变量,静态方法,静态代码块。

    5.1 静态变量

//在女神类中添加一个静态变量
	public static int count = 0;		//女神总数
	
//测试代码
public static void main(String[] args) {
	//创建三个女神类型的对象
	Goddess lin = new Goddess("林志玲", 43, 1.73, 99);	//女神对象
	lin.count++;
	Goddess wang = new Goddess();	//女神对象
	wang.count++;
	wang.setName("王祖贤");
	Goddess li = new Goddess();	//女神对象
	li.setName("李冰冰");
	li.count++;
	
	System.out.println(lin.count);	//结果为3
}

最终的打印结果为3,也就是说count是整个女神群体所共用的一个属性。改变了A的count属性的值为250,那么B和C的count属性值也变成了250。

    5.2静态方法

    静态方法和静态变量的用法类似,也是整个群体共用的方法,就定义成静态的,静态方法还有个好处,可以直接通过类名来访问,而不用创建对象。

//女神类中添加静态方法
public static void haha(){
	System.out.println("我是女神!");
}
//测试代码
public static void main(String[] args) {
	Goddess.haha();    //通过类名调用方法
}

    5.3静态代码块

    这个东西就比较好玩的,它只会在JVM加载类时执行一次

static{
	System.out.println("我是静态代码块!");
}

Java代码的执行顺序:

静态变量初始化→静态代码块→初始化静态方法→初始化实例变量→代码块→构造方法


六、final关键字

    可以用来修饰属性、方法和类。

    放在属性前,表示这个属性是个常量,必须在定义的时候赋值,并且以后不能修改其值。

    放在方法前,表示这个方法不能被子类重写(下一点会讲到方法重写)。

    放在类前,表示这个类不允许被继承。

    代码我就不演示了,这个比较简单,小伙们自行试试就OK了。


七、方法重写

    方法重写的目标,子类要改写父类某个方法的实现。说直白点就是老子是矿工,有挖矿的方法,用铁锹来挖矿,儿子是挖矿师,继承了矿工的方法,只不过他是用挖掘机来挖矿。

//矿工类(父类)
public class Miner {
	public void mining(){
		System.out.println("用铁锹一锹一锹的挖矿!");
	}
}
//挖矿员(子类)
public class DigMember extends Miner {
        //重写了父类的挖矿方法
	public void mining(){
		System.out.println("用挖掘机挖矿!");
	}
}
//测试代码
public static void main(String[] args) {
	Miner miner = new DigMember();		//创建矿工的子类对象挖矿员
	miner.mining();			//调用挖矿方法
}

结果:

技术分享

通过结果可以发现,虽然定义的是父类变量,但new的是子类对象,所以调用的是子类的方法。如果是new的父类对象,那么调用结果就是父类的方法。


八、抽象类和接口

    抽象类(abstract):就是个抽象的类......,它最大的特征就是不能直接实例化,必须先有个子类(非抽象类),然后可以new子类对象。把刚才的矿工改成抽象类:

public abstract class Miner {
	public void mining(){
		System.out.println("用铁锹一锹一锹的挖矿!");
	}
}

    如果现在创建一个矿工对象,会报语法错误:

技术分享

    但创建子类(子类不能是抽象类)对象是可以的:

技术分享

为什么要使用抽象类呢?因为有些类就是抽象的啊!!!技术分享

比如动物,请问,动物是什么颜色?有几条腿?怎么移动的?有几只翅膀?

是不是都不知道!!!

不知道就对了,因为动物就是个抽象的概念,像什么猫、狗、人、日本人等等都是动物的一个子类。你能在现实生活中找出一个原生态的动物,它既不是猫也不是狗更不是任何其他动物的子类吗?

如果能的话··········,请收下我的膝盖!!!技术分享

    接口(interface):接口是什么呢?拿出你的U盘看看,再插到电脑的USB接口试试,如果你的鼠标是USB接口的,请看看鼠标的接口和U盘的接口有没有什么不一样?

    聪明的各位应该已经发现了吧,这两个的接口是一模一样的!!!技术分享

    接口一般只是定义一个标准,它没有具体的功能(看看你的电脑上的USB接口,请告诉我它是干什么的?可以加热食物么?可以冷藏饮料么?可以看电影么?都不行!)。

    但我们可以实现这个标准接口的工具,比如实现了该接口的U盘,就可以通过这个接口来保存数据,实现了该接口的键盘,就可以通过这个接口往电脑里输入数据。

    如果上面例子中的挖矿员会开车,而矿工不会,并且以后还会有另外一个单独的司机类也可以开车,那么,我们就可以把开车定义成一个接口。需要会开车的类,去实现这个接口就行了。

//定义开车的接口
//开车接口
public interface IDrive {
	//开车方法
	void drive();
}
//挖矿员类实现开车接口
public class DigMember extends Miner implements IDrive {
	public void mining(){
		System.out.println("用挖掘机挖矿!");
	}

	public void drive() {
		// TODO Auto-generated method stub
		System.out.println("我会开挖掘机!!!");
	}

}

最后:抽象类和接口有什么区别呢?

抽象类侧重于一个群体,而接口侧重于功能。

大家实现下面这个案例就知道区别了:

创建一个集合(或数组)保存所有参加动物赛跑比赛的选手(有兔子、乌龟、小鸡、狮子),再创建一个集合(或数组)保存所有参加飞行比赛的选手(飞机,老鹰,超人,擎天柱)。注意这些选手都会飞,但不一定有同一个父类。


今天的内容就到这儿吧,都只讲了些基础语法,有很多使用上的细节,大家可以拿些项目中的例子,我们一起来分析哈!


“软件思维”博客地址:51CTO博客园,感兴趣的小伙伴可以去看相关的其它博文。  



本文出自 “软件思维” 博客,请务必保留此出处http://softi.blog.51cto.com/13093971/1963751

《java从入门到放弃》javase入门篇:练习——单身狗租赁系统

今天,我们要玩个大的!!!我们把之前使用数组做的这个单身狗系统改版成数据库版本,并且使用面向对象里面的一些简单思想。如果有不知道这个系统的看官,请跳转到目录页,然后再选择单身狗系统(数组版)先围观五分钟... 查看详情

《java从入门到放弃》javase入门篇:集合

今天来讲讲Java中的集合和常见集合类型的使用。什么是集合呢?刚好最近学校里面军训,只听到教官一声喊:“集合!!!”各位小萌新们就屁颠屁颠的跑过来排列整齐了,这就是集合···650)this.width=650;"src="https://img.baidu.com/hi/... 查看详情

《java从入门到放弃》javase入门篇:单元测试

单元测试其实没什么好说的,直接看操作步骤!我们来测试前一篇的小明买食物的方法。第一步:在小明类上点右键,然后再new一个JUnitTestCase650)this.width=650;"src="https://s3.51cto.com/wyfs02/M02/A5/8D/wKioL1m_iAygNbgSAABZDwejGG4076.png"title="11.png"w... 查看详情

《java从入门到放弃》javase篇:数组

数组,就是一组数!!!之前我们学习的变量只能保存一个数据,如果一个部门有50个员工的姓名要保存,怎么办?如果定义50个变量··················Stringname1;Stringname2;............Stringname49;Stringname50;,这画面太美,我不... 查看详情

《java从入门到放弃》javase入门篇:网络编程(入门版)

要进行网络编程,首先要搞清楚目的是什么。网络编程说简单点就是在网络上的计算机进行数据的交互。650)this.width=650;"src="https://s4.51cto.com/wyfs02/M00/07/18/wKiom1nDU8jBR29DAADRe0E88II285.png"title="11.png"width="600"height="328"border="0"hspace="0 查看详情

《java从入门到放弃》javase篇:程序结构

程序的结构一般分为三种:顺序结构。选择结构。循环结构。一、顺序结构:这个不用多说吧,跟我们平时写文章的顺序一样,从上往下。650)this.width=650;"src="https://s3.51cto.com/wyfs02/M01/A2/70/wKioL1mf0MqwRCa0AAA_SnPBxrY664.png"title="11.png"style... 查看详情

《java从入门到放弃》javase篇:程序结构

程序的结构一般分为三种:顺序结构。选择结构。循环结构。一、顺序结构:这个不用多说吧,跟我们平时写文章的顺序一样,从上往下。650)this.width=650;"src="https://s3.51cto.com/wyfs02/M01/A2/70/wKioL1mf0MqwRCa0AAA_SnPBxrY664.png"title="11.png"style... 查看详情

《java从入门到放弃》javase篇:程序结构

程序的结构一般分为三种:顺序结构。选择结构。循环结构。 一、顺序结构:这个不用多说吧,跟我们平时写文章的顺序一样,从上往下。 二、选择结构:从名字就能看出,要选择嘛,到底是要漂亮滴妹子,还是要有钱... 查看详情

《java从入门到放弃》javase篇:综合练习——单身狗租赁系统(数组版)

因为现在只学习了基本语法,所以在综合练习之前,先补充关于方法概念。方法的作用:把一系列的代码放在一起,然后再取个别名。之后通过这个别名的调用,就相当于执行了这一系列的代码。方法的语法:([]中的内容表示... 查看详情

《java从入门到放弃》文章目录

...,等相关内容都写完后,再按学习顺序来整理。《Java从入门到放弃》入门篇:XMLHttpRequest的基本用法《Java从入门到放弃》入门篇:Struts2的基本访问方《Java从入门到放弃》入门篇:Struts2的基本访 查看详情

《java从入门到放弃》入门篇:变量

变量是什么玩意呢?变量,顾名思义就是能变化的量--  好吧,举个栗子。图片上的各种餐具,就是变量,因为同一个盘子可以在不同的时间装不同的菜,在这一桌可以装土豆肉丝,在下一桌可以装清炒黄瓜(当然,这个盘... 查看详情

《java从入门到放弃》入门篇:hibernate查询——hql

不知不觉又到了hibernate的最后一篇了,只感觉时光飞逝~,岁月如梭~!转眼之间,我们就···························,好吧,想装个X,结果装不下去了,还是直接开始吧·650)this.width=650;"src="https://img.baidu.com/hi/jx2/j_00... 查看详情

《java从入门到放弃》入门篇:xmlhttprequest的基本用法

不闲扯,直接开讲。使用XMLHttpRequest对象,主要分为以下七个步骤:创建对象设置过期时间设置数据格式初始化HTTP请求设置HTTP头请求回传数据的处理发送HTTP请求对应代码如下所示<script type="text/javascript">   &nbs... 查看详情

java从入门到放弃——01.java环境搭建

本文目标:下载与安装JDK配置Java环境 1、JDK9下载:       下载地址:https://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase9-3934878.html 2、安装JDK:      打开安装包,除了下图可以取消公共JRE¹... 查看详情

《java从入门到放弃》入门篇:运算符

运算符分为运算和符。运算:是一种行为,通过已知量的可能的组合,获得新的量。 符:上古时期,符是沟通人和神的秘密图案,所以符是不可以随便乱画的,故有所谓“画符不知窍,反惹鬼神笑;画符若知窍,惊得鬼神叫”... 查看详情

《java从入门到放弃》入门篇:运算符

运算符分为运算和符。运算:是一种行为,通过已知量的可能的组合,获得新的量。 符:上古时期,符是沟通人和神的秘密图案,所以符是不可以随便乱画的,故有所谓“画符不知窍,反惹鬼神笑;画符若知窍,惊得鬼神叫”... 查看详情

《java从入门到放弃》入门篇:hibernate基本配置

hibernate是个什么玩意呢?简单点说,就是别人写好的一套访问数据库的东东,底层其实就是JDBC。使用JDBC就像以前没有电饭煲,我们要自己根据经验,多少人煮多少米,放多少水,用多大的火,煮多长时间,整个过程都需要自己... 查看详情

《java从入门到放弃》入门篇:struts2的基本数据传递方式

把这个和JSP的数据传递方式对比一下,你就会发现·······真的可以少写两句代码!!!struts2中常用的两种数据传递方式如下:属性匹配方式ModelDriven接口匹配方式(常用于自定义类型)个人比较喜欢使用第一种,为什么呢?因... 查看详情