JavaSE基础知识(重点是面向对象的编程思想)


前言

学习Java一段时间了,一直没有复习。接下来的几天时间就借着写博客复习一下JavaSE的知识。


一、Java初识

1.Java是什么

Java是一种基于C++诞生的面向对象的编程语言。

2.Java发展历史

1995年,Sun公司发布Java语言,并公开其
源码。
1998年,Sun发布JDK1.2,并将Java分为J2ME, J2SE, J2EE三部分。
2002年,Sun发布JDK1.4,此后Java语言在企业应用开发领域发展迅速。
2004年,Sun发布JDK1.5,同时更名为Java EE 和Java SE。
2009年,Sun被Oracle收购。

3.Java运行机制

Java程序要经过先编译、后解释的过程。
编译型语言:简单来说,就是将写好的程序一次性编译成机器码(机器可识别的语言),然后由机器执行程序。因其一次性编译成的机器码只适应于特定平台,所以跨平台时至少需要对程序进行重新编译。
解释型语言:由专门的解释器将程序逐行解释为机器码并立即执行。因其每次执行都需要将源码进行解释一遍,所以执行效率较低。

Java程序先经过javac工具编译成JVM(Java虚拟机)可识别的字节码,然后由JVM解释执行。从而具有跨平台的特性,并提高了执行效率。
Java程序跨平台只需要移交编译形成的字节码,由不同平台的JVM对其解释执行。从而省去了重新编译的麻烦。

4.Java开发准备

下载JDK(JDK是Java标准开发包,包含了一系列开发Java程序用到的工具)。
设置PATH环境变量(在PATH环境变量中添加JDK中java和javac两个工具的地址,为Windows系统查找命令提供路径。

5.Java命名规则和规约

  规则

  1.命名只允许使用英文、数字和符号(_, $)。
  2.数字不能开头。
  3.不能包含空格。

  规约

  驼峰式命名。

二、面向对象的编程思想

1.理解面向对象和面向过程

  面向过程:将程序按照执行顺序拆分为一步步的操作(即函数),通过依次调用函数来实现程序。
  面向对象:将程序中涉及到的事物分类(即类),每个类下面都有相应的个体(即对象),每个对象都能实现一定的操作(方法)并具有一些性质(成员变量),通过不同类的对象相互合作来实现程序。

在这里插入图片描述

在这里插入图片描述

2.修饰符

权限修饰符

  用来描述类成员的访问权限,包含public, [默认],protected,private四个修饰符,修饰一个类成员时最多只能出现一个。
  public:公有,在任何位置均可访问(调用)。
  [默认]:同包中的类或者子类可以访问(调用),代码形式为不写。
  protected:只在子类中访问(调用)。
  private:只在当前类中可访问(调用)。

特征修饰符

  分别作用于不同的场景,可以出现多个或0个。
  abstract:可修饰类和方法(除构造方法),表示其是抽象的,抽象类不能拥有实例(对象),抽象方法不能拥有方法体。
  static:可修饰成员变量、方法、块和内部类,表示其是静态的(即属于类的),可通过类名.的方式来调用。
  final:可修饰类、变量(包括成员变量和局部变量)和方法,表示其是最终的。final修饰的类不可被继承,final修饰的变量只能赋值一次且之后不可被更改,final修饰的方法不可被重写。
其余特征修饰符在本阶段较少见,此处不加以展开。

外部类的修饰符只有public, [默认], abstract, final!

3.类

  类是一个模板,描述一类对象的行为和状态。

  代码如下:[修饰符] class Person{}

  抽象类:不能实例化对象,class关键字由abstract修饰。

  代码如下:[权限修饰符] static class Person{}

  枚举:被命名的常量的集合,语法上必须将其所有对象在类体第一行列出并对其成员变量赋值,其余如方法等和普通类相同。
public enum TestEnum{
	Mon, Tus, Wed, Thu, Fri, Sat, Sun;
	private int value;
	
	private int getValue(){
		return value;
	}
}

4.接口

  接口可以理解为是一种特殊的抽象类,其所有方法均为抽象方法,不允许出现有方法体的方法,也不允许有块(带{}的都不允许)。
  通常用来定义规范,接口可以被抽象类和普通类实现(关键字implement),接口之间可以多继承。关键字interface.
  接口中成员变量默认修饰符public static final,可以不写(程序会自动添上public static final),不可以改成其他的。方法修饰符默认public abstract,规则同上。

public interface Student{
	public static final int value;
	String name;
	study();
	eat();
	public abstract sleep();
}

5.对象

方法

  [修饰符] 返回值类型 方法名(参数){方法体}

  实例方法

  用来描述对像的行为,可通过对象调用,不可以通过类名调用。
  代码如下:[修饰符] 返回值类型 方法名(){方法体}
  方法名首单词首字母小写,后面的单词首字母大写。(驼峰式命名)

public class Person{
	public int eat(){
		return 0;
	}
}
  静态方法

  用static修饰的方法,除可通过对象调用,还可以通过类名调用。(不推荐使用对象调用静态方法)
  代码如下:[权限修饰符] static 返回值类型 方法名(){方法体}

public class Person{
	public static int eat(){
		return 0;
	}
}
  构造方法

  又名构造器,通过new关键字调用,用来创建对象。

  块

  在构造方法之前执行,作用相当于构造方法的补充,没有名字,不可被调用,代码形式为{方法体}。

代码如下:[修饰符] 返回值类型 方法名(){方法体}
方法名必须与类名一致!
方法体可以为空。
不可被static, abstract, final修饰。(static表示该方法与对象无关,但是构造器总是关联着对象;abstract修饰使方法无法被调用,但是构造方法必须被调用才能产生对象;final修饰使子类无法重写该方法,但是构造方法无法被继承。)

public class Person{
	private int age;
	{
		this.age = 18;
	}
	public int Person(){
		
	}
}
  主方法(main方法)

  程序执行的入口,系统识别到了main方法后会逐行执行main方法的方法体,各个对象的配合也是在main方法中实现的。

public class Person{
	public static void main(){}//修饰符和返回值类型不能变
}
成员变量

(不可被abstract修饰)

  实例变量

  描述对象所具有的性质,对于不同的对象其值往往不同(可以理解为对象的个人财产)。

  类变量

  被static修饰的成员变量,对于不同的对象其值往往相同(可以理解为对象的公有财产)。

局部变量

  在方法内部定义的变量,不属于类成员,可被final修饰,表示其不可更改。

public class Person{
	public int age;//实例变量
	private static String name;//静态变量
}

6.方法重载

作用:同一个方法根据不同类型的参数执行不同操作。
规范:出现在同一个类中,方法名相同,参数不同,其余部分随意。

public class Person{
	public void eat(){}
	public int eat(int number){return 0;}
	public String eat(String name){return "";}
}

7.内部类

  关于内部类的知识在下面这篇文章深入分析。

https://blog.csdn.net/weixin_45843360/article/details/113878214

8.类和类的关系

  继承

  Java的继承通过extends关键字实现,被继承的类称为父类,实现继承的类称为子类,子类和父类之间是一般和特殊的关系。

  子类会获得父类全部的成员变量、方法和内部类,不能获得构造器和块。实现形式:子类名 extends 父类名{类体}。子类可以通过super.的方式调用父类的成员变量和方法。

  子类可以有自己的成员变量和方法。

  多态

  由于继承产生的现象,Java引用变量有两种不同的类型,一个是编译时类型,一个是运行时类型。如:(类A继承类B) B test = new A();,变量test的编译时类型是类B,运行时类型是类A。

方法的多态性:引用变量在编译阶段(写代码阶段)只能调用其编译时类型(类B)具有的方法,而在执行时系统会调用运行时类型的方法(类A的方法)。
成员变量并不具备多态性,执行时系统会调用编译时类型(类B)的成员变量。

  聚合

  类A的成员变量中有类B的对象。(无论类B是否被调用,类A的对象始终存在于类B中)

  依赖

  类A的方法用到了类B的对象。(只有在包含类A对象的方法被调用时,才会用到类A的对象)

9.方法重写

遵循“两同两小一大”,方法名相同、形参列表相同,返回值类型、抛出的异常类型小于父类的,访问权限大于父类的。
静态方法重写之后必须还是静态方法,实例方法重写后必须是实例方法!

10.this和super

this和super都是用来在特殊的场景代替对象出现来调用成员变量或方法,this代替的是当前类的对象,super代替的是当前类父类的对象。

public class Person{
	//this和super出现在构造方法中时必须放在第一行,且不能同时出现
	public Person(){
		this();//调用了当前类的构造方法
		……
	}
	public Person(int num){
		super();//调用了父类的构造方法
		……
	}

	public void eat(){
		int a = 1;
	}
	public void eat(int num){
		int a = this.eat;
		return a;
	}
}

总结

例如:以上就是今天要讲的内容,本文仅仅简单介绍了Java历史、运行机制,以及面向对象的编程思想。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值