先说废话
最近自学Java的时候,在B站看到动力节点老杜老师的Java教程(原视频戳这里),个人感觉讲得非常细,对于小白来说非常友好,同时也会讲一些计算机基础和程序执行的基本原理,对于有一定编程基础的来说可以加深对语言的理解。目前,这套教程在B站获得将近400万的播放量,是Java教程的Top 1,看来群众的眼睛是雪亮的。
废话到此为止,这么好的教程当然要记笔记,但是我会稍微总结、合并和简化一下原教程。最后再感谢一下阿婆主和老杜,嗯,Java真香!
Java简介
Java作为一门使用度很高的语言,是由James goslin领导的团队在1995年之前为了占领智能电子市场而发明的语言,最初起名Oak语言(据说在办公室外有一颗橡树,因此有了Oak,大神就是这么free style),悲催的是,当他们去注册专利的时候,发现Oak已经被别的公司注册了。因此Oak只好另觅高名了,高斯林喜欢喝咖啡,据说咖啡豆产自印尼爪哇岛,因此Oak又有新的名字–Java。
Java有着不同的版本:
- Java SE:标准版
- Java EE:企业版
- Java ME:微型版
Java语言特性
- 简单:java源于C++,但是比其简单
- 面向对象(object):纯面向对象,更符合人的思维
- 跨平台、可移植:一次编译,到处使用
java将程序运行到一台虚拟计算机(java virtual machine,JVM),通过虚拟机再和底层操作系统打交道,从而实现不同操作系统以及平台的通用。 - 自动垃圾回收机制(GC)
- 多线程
Java的加载与执行
Java的运行机制包括编译和运行两个阶段,java源码放在.java的文件中,编译的主要作用是检查源文件的是否符合java的语法,如果符合规范则生成字节码文件,以.class结尾 (字节码文件不是二进制文件,无法被计算机直接执行);运行过程java(.exe)负责运行class文件,使用java + 类名 运行。
- 编译过程
1.程序员在硬盘写入java源文件,保存为.java
2.通过jdk java编译工具javac编译源文件,javac java源文件路径。一个java源文件可以生成多个.class。编译结束以后可以将class文件拷贝到其他操作系统使用。 - 运行过程
1.java程序启动JVM的类加载器(ClassLoader)
2.类加载器搜索class文件,并将字节码文件载入JVM
3.JVM将class解释成二进制的数据
4.操作系统执行二进制和底层交互
Hello World
Java安装过程不表,这里演示在Mac上编写和执行第一个java源程序:Hello World。
通过vim写入Hello world的示例源码,保存为HelloWorld.java
//公开的类,类名叫HelloWorld
public class HelloWorld{
/**
* 创建一个公开的静态的主体 使用main方法,是程序执行的入口
*String[] args是main方法的形式参数列表
*/
//类体中不允许书写java语句,除了声明变量
//args可以自己起名
public static void main(String[] args){
//java语句,打印hello world
//字符串用双引号包裹,语句以分号结尾
System.out.println("hello world");
}//注意缩进和括号成对
}
使用javac编译:javac HelloWorld.java
使用java运行:java HelloWorld
,注意没有后缀
classpath
ClassLoader每次都是如何加载.class类的?
- 默认是搜索当前目录,也可以通过classpath在其他目录搜索。
* 推荐设置classpath的方式是在运行java程序的时候,用-classpath
,简写-cp
,指定用:
分割的路径,例如java -cp ./:"/usr/java class" HelloWorld
,表示在当前目录和/usr/java class
下搜索HelloWorld
。
注释
- 单行注释
// 单行注释 - 多行注释
/* 多行注释
多行注释
*/ - Java doc注释
/** 多行注释
*多行注释
*/
doc注释会被javadoc解析
简单理解class和public class的区别
/**
* class(私有类)和public class(公有类)的区别
* (1)一个程序中可以有多个class
* (2)一个程序中只能有一个public class并且类名要和源文件名一致,public class且不是必须的
* (3)有几个类则会生成几个.class文件
* (4)每个类中可以调用main方法,作为程序入口
*/
class A{
public static void main(String[] args){
System.out.println("A");
}
}
class B{
public static void main(String[] args){
System.out.println("B");
}
}
public class ClassPublicClass{
public static void main(String[] args){
System.out.println("public class");
}
}