java基础-part1
这一部分我想着重说一下基本的 java 格式搭建与基本运用 如 Scanner的使用与封装与继承的基本概念。学会了这几部分那么java的基本语句就可以自行学习了。
1.框架搭建
1 | public class HelloWorld{ |
这是一个简单的java程序,也是所有语言学习第一个代码”hello world“。接下来我将通过这个例子分析java程序的基本框架
第一行代码:
public class HelloWord{}
在程序中定义了一个名为HelloWorld的公共类(public class),该类是程序的入口点。Java程序中的每个类都必须以一个公共类来定义。文件名必须与公共类的名称相同,并以.java作为文件扩展名。换而言之,HelloWorld 指代文件名,它可以是任意的名字(须符合命名规则)且必须与程序文件名相同
第二行代码:
public static viod main(String[] stgs)
- 其中
public static(公共静态方法)它是Java程序的起点。 - 在程序执行时,从主函数
main方法开始执行(与c语言中相同)。 viod则指代返回一个空值,即不需要返回值。
String[] args
首先它存在好几种形式String... args,String args[]等,但我们为了避免歧义,主要使用第一种形式来写,但我们遇到到其他形式时也应该认识。
从形状来看,他是一个数组,可以理解为一个数组。那么为什么要存在一个数组呢?
在命令行中比如运行 Test.class 文件,你可以这样写:
java Test abc
相当于给数组传入了一个abc 字符串。也可以打印出来,可以作为简单的输入。
例如:
1 | public class Test { |
用控制台编译运行:
$ javac Test.java
$ java Test runoob
abc
我们会发现这个数组会记录我们的输入并储存。在Java中,main 方法的参数必须是一个 String 类型的数组 String[] args。这是由Java语言规范所定义的,这样设计的目的是为了接收命令行参数。因此,main 方法的参数只能是 String[] args,而不能直接传入其他类型。
2.Scanner的使用
在程序的编写中,我们经常遇到输入的情况。
例如example1
1 | import java.util.Scanner; |

我们可以看出需要在开头引入import java.util.Scanner,它的作用是构建Scanner对象。
import加载已定义好的类或包,导入支持类(可以说JDK基础类或者自己编写的的类),可供本类调用方法和属性。import导入声明可分为两种导入声明:
1>单类型导入单类型导入单类型导入单类型导入(single-type-import)
2>按需类型导入按需类型导入按需类型导入按需类型导入(type-import-on-demand)
“importjava.util.*;”表示的是把util这个包下的全部类导入到程序中;而“importjava.util.Scanner;”表示的是只把util包下的Scanner类导入到程序中;
Scanner sc = new Scanner(System.in)
Scanner类的创建对象: Scanner A=new Scanner(System.in);
int A = sc.nextInt();
中 nextXxx中 的Xxx 可为int Double 等,如果需要判断是否包含下一个字符串,则可省略Xxx。hasNextXxx() 判断是否还有下一个输入项,Xxx与next相同。
Scanner类中常用的方法next()和nextLine()的区别:
next():作为字符串输入的方法,自动屏蔽掉输入的分隔符,如空格、Tab键、回车键,直到遇到有效地字符输入后,则将这些分隔符作为结束标志;
nextLine();则是将从开始运行所输入的所有的字符,包括分隔符,均作为控制台输入,只有在遇到enter回车键时,才结束输入,并将所有的内容作为输入内容传给Scanner;也就是说,next()方法并不能返回带空格、Tab键、回车符的字符串,而nextLine可以;
注意
java 的程序编译中,区分大小写,如上图中Scanner的S必须是大写,Syestem的S,String的S……..
值得注意的是,此时可能会出现黄色报错Resource leak: ‘sc’ is never closed。该报错不影响程序的运行但会占用大量内存空间导致系统资源浪费,所以编译器给出了黄色报错。如需关闭只需在在设置输入内容的代码下一行输入 sc.close;
3.封装与继承
3.1.1封装
在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接口控制。
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
3.1.2封装的优点
- 良好的封装能够减少耦合。
- 类内部的结构可以自由修改。
- 可以对成员变量进行更精确的控制。
- 隐藏信息,实现细节。
3.1.3实现Java封装的步骤
- 修改属性的可见性来限制对属性的访问(一般限制为private),例如:
1 | public class Person { |
这段代码中,将 name 和 age 属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。
- 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问,例如:
1 | public class Person{ |
采用 this 关键字是为了解决实例变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突。
3.2应用举例
example1
1 | import java.util.*; |
运行结果如下:
上面这段代码,我们举例一个相对简单的例子,通过注释可以看到,这就实现了封装,对于公共属性name和salary,我们可以直接对其赋值;但是对于私有属性sex和hobby,我们需要通过使用set方法来为其赋值,再通过get方法来获取其值。
俗话说,概念理解的再多再准确,也不如写一段代码熟悉的更快!下面我们再举一个和上面类似的例子吧!!!
example2
1 | import java.util.*; |

3.3 继承
3.3.1继承的概念
继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

兔子和羊属于食草动物类,狮子和豹属于食肉动物类。
食草动物和食肉动物又是属于动物类。
所以继承需要符合的关系是:is-a,父类更通用,子类更具体。
虽然食草动物和食肉动物都是属于动物,但是两者的属性和行为上有差别,所以子类会具有父类的一般特性也会具有自身的特性。
3.3.2类的继承格式
在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般形式如下:
1 | class 父类 { |
3.3.3什么需要继承
接下来我们通过实例来说明这个需求。
开发动物类,其中动物分别为企鹅以及老鼠,要求如下:
- 企鹅:属性(姓名,id),方法(吃,睡,自我介绍)
- 老鼠:属性(姓名,id),方法(吃,睡,自我介绍)
企鹅类
1 | public class Penguin { |
老鼠类
1 | public class Mouse { |
从这两段代码可以看出,代码存在重复,导致代码量大且臃肿,而且维护性不高(主要表现是后期需要修改的时候,需要修改很多的代码,容易出错)。要从根本上解决这两段代码的问题,就需要继承,将两段代码中相同的部分提取出来组成 一个父类:
公共父类
1 | public class Animal { |
这个Animal类就可以作为一个父类,然后企鹅类和老鼠类继承这个类之后,就具有父类当中的属性和方法,子类就不会存在重复的代码,维护性也提高,代码也更加简洁,提高代码的复用性(复用性主要是可以多次使用,不用再多次写同样的代码) 继承之后的代码
企鹅类
1 | public class Penguin extends Animal { |
老鼠类
1 | public class Mouse extends Animal { |
3.3.5继承类型
需要注意的是 Java 不支持多继承,但支持多重继承。
)
3.3.6继承的特性
- 子类拥有父类非 private 的属性、方法。
- 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
- 子类可以用自己的方式实现父类的方法。
- Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 B 类继承 A 类,C 类继承 B 类,所以按照关系就是 B 类是 C 类的父类,A 类是 B 类的父类,这是 Java 继承区别于 C++ 继承的一个特性。
- 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)。
3.4继承关键字
继承可以使用 extends 和 implements 这两个关键字来实现继承,而且所有的类都是继承于 java.lang.Object,当一个类没有继承的两个关键字,则默认继承 Object(这个类在 java.lang 包中,所以不需要 import)祖先类。
extends关键字
1 | public class Animal { |
implements关键字
使用 implements 关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)。
1 | public interface A { |
super 与 this 关键字
super 关键字:我们可以通过 super 关键字来实现对父类成员的访问,用来引用当前对象的父类。
this 关键字:指向自己的引用,引用当前对象,即它所在的方法或构造函数所属的对象实例。。
1 | class Animal { |
输出结果为:
1
2
3 animal : eat
dog : eat
animal : eat
在 Java 中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以 extends 只能继承一个类。
final 关键字
final 可以用来修饰变量(包括类属性、对象属性、局部变量和形参)、方法(包括类方法和对象方法)和类。
final 含义为 “最终的”。
使用 final 关键字声明类,就是把类定义定义为最终类,不能被继承,或者用于修饰方法,该方法不能被子类重写:
声明类:
1
final class 类名 {//类体}
声明方法:
1
修饰符(public/private/default/protected) final 返回值类型 方法名(){//方法体}
注: final 定义的类,其中的属性、方法不是 final 的。
3.5封装与继承实战!
编写描述动物的继承关系程序。动物包括山羊和狼,山羊和狼都具有名称和重量,但它们的行为不同,山羊吃草,狼吃肉,它们的叫声也不同,但走路行为一致。通过继承实现以上需求,并编写测试程序验证。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 >package ShiZhan;
>abstract class Animal{
private String name;
private double weight;
public Animal (String name, double weight){
this.name = name;
this.weight= weight;
}
public String getName(){
return name;
}
public double getWeight(){
return weight;
}
public abstract void eat();
public abstract void makeSound();
public void walk(){
System.out.println(name+"在奔跑");
}
}
class Goat extends Animal{
public Goat (String name,double weight){
super(name, weight);
}
public void eat(){
System.out.println(getName()+"在吃草");
}
public void makeSound(){
System.out.println(getName()+"说:咩~~~~~");
}
public void weight1(){
System.out.println("体重是:"+getWeight());
}
}
class Wolf extends Animal{
public Wolf (String name, double weight){
super(name, weight);
}
public void eat(){
System.out.println(getName()+"在吃肉");
}
public void makeSound(){
System.out.println(getName()+"说:喔~~~~~~~");
}
public void weight1(){
System.out.println("体重是:"+getWeight());
}
}
>public class AinmalTest {
public static void main(String[] arg){
Goat goat = new Goat("灰太狼",45.0);
Wolf wolf = new Wolf("喜羊羊",30.0);
System.out.println("关于羊:");
goat.eat();
goat.makeSound();
goat.walk();
goat.weight1();
System.out.println();
System.out.println("关于狼");
wolf.eat();
wolf.makeSound();
wolf.walk();
wolf.weight1();
}
>}
运行结果

后记
学习就是不断的学习与借鉴的,没有一蹴而就的天才。希望大家可以自动手研究,也许会在一个很小很小的问题上浪费很长时间,但茶余饭后细细品这这段时光的疲惫与不堪,一种别样的快感涌上心头,是一种看视频打游戏所无法比拟的。
