从今天开始,会发布一系列的博客,用于回顾一段时间以来的Java学习,这是我对自己的整合,也希望对你们能有所帮助。
对于每一个编程学习者来讲,hello world一定会是我们入门的程序,我们的第一个小程序。今天,我同样通过hello world来开始,来看看一个小小的程序里,究竟有着哪些奥妙。
我们先来写一个hello_world小程序:
//hello world程序
public static void main(String[] args){
System.out.println("Hello world!");
}
在我们开始学习Java的时候,老师会说“刚开始你不需要理解前面这些修饰符都是什么作用,背下来就行了”。
这些修饰符有什么用呢?我们一个一个来说:
public:
public,是一种访问权限修饰符,代表Java中最大的访问权限,百度一下public的含义,它会告诉你说“公开的,公共的,人人知道的”,没错,被public修饰的函数人人都可以访问到。
那么访问权限修饰符有几种呢?它们的访问权限又是多大呢?
访问权限修饰符有四种,我们来看一下这张表:
修饰符/访问权限 | 同类 | 同一包中的类 | 子类 | 不同包中的类 |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
friendly | √ | √ | × | × |
private | √ | × | × | × |
(√表示可以被访问,×表示不能被访问)
(默认权限为friendly)
public的权限最大,是公有的,任何人都可以访问;
friendly,即默认权限,在本类和本包中可以访问;
protected的权限是受保护的,比和默认权限相比,它给它的子孙类,即继承它的类也提供了访问权限;
private的权限最小,是私有的,只有本类有访问权限。
关于类和包呢,举一个例子来理解一下:
如果说你代表了一个类,你有一些属性是公有的,比如说外表,任何人都看得到,不管他们认不认识你,那你的外表是被public修饰的;但是你的工作——Java开发工程师,只有和你同一个公司的人知道,这是被friendly即默认权限修饰的;但是,又有另外一个人知道了你的工作,他和你不在同一家公司,为什么他知道呢?因为他是你的徒弟,他的Java技术是继承于你的,他也是一个Java开发工程师,这时你工作的修饰权限变成了protected;最后,有一些东西是只有你自己知道的,其他人都不知道,我也不知道,这些东西则是被private修饰的。
总结一下:
public修饰公有的,比如你的外表,任何人都看得到;
protected修饰被保护的,比如你的工作,你同一个公司或者继承了你这个工作的你的徒弟才能看得到;
friendly是默认权限,只有你公司的人知道你的工作;
private是私有的,只有你知道,其他人都不知道。
在这之中呢,你代表一个类,你的徒弟也代表一个类,徒弟代表的类继承了你代表的类;而你的公司和你徒弟的公司代表两个不同的包。你的工作你们公司的同事及和你代表的类在同一个包中的人是知道的,其它公司的人不知道,这是默认权限修饰;但是你的徒弟也知道,因为他所代表的类继承了你所代表的类,虽然他和你不是一个公司即不在一个包中,但他也知道你的工作,而他们公司其他人依然是不知道你的工作的,因为和你没有继承关系,这是protected权限修饰。
然后重点来了:
定义类的关键字是class;定义包的关键字是package。
解释了这么多,也不知道看过的能不能理解,继承这个东西之后会写,我们继续说hello world。
static
static,也是权限修饰符,百度一下它的含义是“静止的,不变的”,所以会叫它静态修饰符。
为什么main方法需要被static修饰呢?
因为执行main方法的时候没有创建任何对象。
静态方法可以直接被类名调用,但非静态方法要通过对象来调用,我们在执行main方法的时候是没有对象的,因为main方法是程序的入口。
static说起来很多,我们就留到之后讲。
void main(String[] args){方法体}
这些东西放在一起呢,是因为这是定义方法的。
//修饰符 方法返回值 方法名(传入参数类型 传入参数名称)
public static void main(String[] args){
方法体;
}
//修饰符--public static,定义方法时可以不写修饰符
//方法返回值--void,就是没有返回值,定义普通方法时必须要写(构造方法无返回值)
//方法名--main,定义方法时必须写
//传入参数类型--String[],此处字符串数组,定义方法时可以写也可以不写
//传入参数名称--args,定义主函数时唯一可以改的东西
//如果有传入参数,传入参数类型和传入参数名称必须都有
以上是如何在Java中定义一个普通方法。
关于方法的定义,有一种特殊的情况叫做重载:方法名相同,传入参数类型或个数不同。
看个例子:
String method(int a){};//目标方法
void method(){};//重载,传入参数个数不同
int method(String a){};//重载,传入参数类型不同
void method(int a){};//没有重载
注意:重载和返回值类型以及前面的修饰符是无关的
System.out.println()
System是Java中的一个类,放在java.lang包下,out呢,是System类中的一个成员变量,是这样定义的:
public final static PrintStream out = null;
可以看到这是一个PrintStream类的对象引用,Java的数据类型呢明天来说。
PrintStream同样是Java中的一个类,是字节输出流,println是这个类中的一个方法,我们来看一下代码:
public void println(String x) {
synchronized (this) {
print(x);
newLine();
}
}
这个方法调用了print方法,将传入的字符串传给print方法,然后又调用了newLine方法,换行。从这里我们就可以看出print方法和println方法的不同点,println输出结束后会换行。
print方法又是怎么输出的呢?
public void print(String s) {
if (s == null) {
s = "null";
}
write(s);
}
如果传入为空,则输出空,如果不为空,则调用write方法将其写到控制台上。
那么到这里,对于hello world的分析及延伸就差不多结束了,好像有点乱…
如果你坚持着耐心看完了,谢谢您的观看,若有不对之处欢迎指正。