Java从0开始(上)

简介: Java从0开始

让我们来一起学习Java吧!

前置

环境配置

工欲善其事必先利其器,先老老实实地把环境配置好吧。环境配置参见:https://www.runoob.com/java/java-environment-setup.html,至于ide安装的是:https://www.jetbrains.com/idea/download/download-thanks.html?platform=windows&code=IIC


之后就是具有仪式性的一件事了——helloworld!


新建一个project,取名helloworld,添加一个java类,代码如下:

public class helloworld {
  public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

结果如下:

利用Ide新建Java项目:https://www.evget.com/article/2020/9/8/38100.html

Java的工作方式:

源代码–编译器–输出字节码–Java虚拟机;

基础知识

基础语法

直接浏览网站:

https://www.liaoxuefeng.com/wiki/1252599548343744/1255883772263712

什么是强/弱类型语言?

强类型语言是一种强制类型定义的语言,即某一变量被定义类型之后,如果不经强制转换,那么就就一直是该类型;弱类型是可以根据环境变化自动进行转换;

什么是动态/静态语言?

动态语言在运行期间采取做数据类型检查,即编程时不会给任何变量指定数据类型,例如Python和Ruby;

静态语言需要声明数据类型,在编译时检查;

Java的包机制

将功能相近的类或接口放着同一个包里;

采用树形结构的存储方式;

面向对象

类,跟C++类似;

虚拟类,abstract修饰的类,无法创建实例;

接口,interface修饰,仅声明方法,由其继承类进行方法的定义,同样无法创建实例,实现接口使用implement关键词;

注:什么时候用继承?什么时候用接口?

is a 的时候用:继承,比如三角形是多边形,苹果是水果;

has a的时候用:接口,比如狗有一张嘴,屋子有门;

不想要某些类被初始化(即建立对象)?

——比如基类,”动物“无法被初始化,也不应该被初始化,因为动物的所有属性没有明确!几条腿?几张嘴?在这种情况下可以使用abstract来修饰,让编译器知道这个类无法创建实例

核心类

Object

注意!⚠️!

在Java中的所有类都是从Object类继承出来的,这也是实现万用类(如ArrayList)的基础。

诶?话说,Object类(我们不妨称之为 终极类,其对象称为终极对象)除了实现万用类,还有什么实质性的东西么?比如——终极对象内部存储了什么东西?

——根据使用频度等方面原因,终极对象中主要有:

  • equals():判断两个对象是否相等;
  • getClass():获取当前对象的类;
  • hashCode():该对象的的哈希码,全局唯一标识码;
  • toString():获取类的名称及标识(暂略);

除了这些通用方法之外,还为线程同步所服务(见后)。

Object类是抽象的么?

——应该不是,如果是抽象类,那么所有类都必须实现覆盖其中的方法,但是实际情况来看,并没有。


StringBuilder

如果直接使用“+”进行字符串的拼接,每一次拼接字符串都会扔掉旧的对象,新建一个新的对象,效率太低。

针对这个问题,java设计类Stringbuilder类,用于高效拼接字符串;

StringJoiner

这个是为了用于指定分隔符来凭借字符串数组;

垃圾回收

在java体系中,内存分为堆栈。堆,主要是对象的生存空间;栈,主要是方法调用和变量的生存空间。所谓的垃圾回收,都是基于堆而言的。

对于一个引用对象的局部变量而言,局部变量本身在栈上,其引用对象在堆上。

一般对象的创建过程有三个步骤:

声明、创建、赋值,如下:

Duck duck = new Duck();

Duck duck 即是声明;

new ** 即是创建;

= 即是赋值;

对象什么时候死?

只要有活着的引用,对象就不会死!

垃圾回收器(GC)会检测活着的引用及相应的对象,如果某个对象的引用都死了,那么这个对象····也就该死了!

注解

什么是注解?放在java源码的类、方法、字段、参数前的特殊“注释”(注释是给人看的,会被编译器直接忽略掉;注解是给程序看的,会被编译器打包进入class文件

它的主要作用是用作参数的配置,下面是一些常见的注解(省略@):

  • configuration:表明当前类是i一个配置类,是方法bean的源;
  • Resource:一般用在树形或set方法上用于为对象参数赋值;
  • Bean:用于告诉方法,产生一个Bean对象,而后交给Spring管理;
  • Component:将这个类交给Spring管理;
  • Override:表示子类重写了父类的方法,可读性提高,编译器检查;

PS:一些java注解是为了代替xml配置;

还有lombok(是一个java的工具类)提供的注解:

  • NonNull:用于检查对象非空;
  • Data;
  • Log

其他详见:https://blog.csdn.net/sunsfan/article/details/53542374

https://my.oschina.net/u/2935389/blog/1036598

多线程

java中建立线程是通过:Thread库。主要有以下三种方式,一是通过继承Thread,覆盖润()方法;实现Runable接口;三是利用lambda语法;

值得注意的是,新版java不存在强制中断线程的方法,但可以通过对目标线程调用interrupt()方法即发送中断请求,在目标线程内部执行相应的逻辑来进行线程中断。

MVC

MVC可不是数据库的多版本控制啊,而是Model-View-Controller,即模型-视图-控制器。Model用来实现复杂的业务逻辑,View通过渲染来实现视图的展示。

序列化(serialize)

java提供一种对象序列化的机制:可以将对象表示为一个字节序列(包括该对象的数据、有关对象的类型信息等)。

将上述字节序列可以进行反序列化,在内存中新建对象。

如何让类支持这样的机制?

——该类实现java.io.serializable接口(对应字段上加上transizent可以让该类不序列化),并且该类的所有属性必须是可以序列化的。

工具框架

JFrame&Swing

Java的GUI控件,Swing支持的组件和功能更强大。

三大布局管理器(Layout Managers):

BorderLayout:即分区

1d5333b5e74ecc8e5d39744b25febfd2.png

FlowLayout:即从左到右,从上到下

f207b4c4a175e3a7d47a5bad8b07f041.png

BoxLayout:从上到下

f1ed46bf236a16f62199133874c67c11.png

Maven

Maven是一个java项目管理和构建工具,它主要是提供来一套标准化的构建项目的流程,并且自动处理依赖管理(比如A依赖于B,B依赖于C,那么A会自动依赖于C)。一个默认的Maven项目结构如下:

92b892538fe077fedde1824a68051d16.png

依赖关系一共有四种,在scope中定义:compile表示编译时需要;test表示测试时使用;runtime表示编译时不需要,但运行时需要;provided表示编译时需要,但运行时由JDK或者服务器提供;

PS:那么Maven如何知道在哪去下载依赖?——又一个中央仓库,三方库都去该中央仓库查询下载;

Lifecycle生命周期,Maven的生命周期由一系列阶段(Phase)构成,以内置的生命周期default为例:


86bb3445f3bb191ef2b3788ab7aad75d.png


运行mvn + XXX,即默认到对应的phase,例如mvn packge,会一直执行到package这个阶段

常用的命令为claen compile test package(打包)。

执行phase会触发goal,goal是啥?没什么特别的,就是具体的操作,见下:


2c042f36ee4b9df440b699c90c1f1f16.png

其实:

lifecycle相当于javaSE的package,是一个大整体,包含很多的phase;

phase相当于JavaSE的class,是整体中的一个部分,包含很多的goal;

goal相当于JavaSE的method,是每一个部分的真正操作;

PS:构建项目就是执行lifecycle,执行到制定的phase为止;

对于大型项目,需要进行模块化管理,每一个小项目都是一个小的Maven项目,例如三个模块的项目:


5b082a380d701ab7daa80b094d2f1bd5.png

如果ABC的pom.xml中存在相同的配置文件,可以单独将这部分配置文件新建为一个xml,而后在ABC中引入即可;

Java从0开始(下):https://developer.aliyun.com/article/1508414

相关文章
|
Java
103.【Java Microbenchmark Harness】(三)
103.【Java Microbenchmark Harness】
49 0
103.【Java Microbenchmark Harness】(三)
|
Java
Java之“珠穆朗玛峰”
Java之“珠穆朗玛峰”
102 0
|
Oracle Java 大数据
初识Java
初识Java
123 0
初识Java
|
存储 SQL 缓存
JAVA问答17
JAVA问答17
84 0
|
Java 程序员 编译器
java初识
java初识
172 0
java初识
|
Java
Java一些常见的坑
总是觉得自己Java基础还是不行,需要恶补。今天偶然mark了一本《Java解惑》,其中以端程序的方式罗列了95个即常见又不常见的xian(坑)jing(儿),拿来瞻仰一下。
92 0
|
Java 数据安全/隐私保护
java23-if..else
java23-if..else
108 0
java23-if..else
|
Java
Java常见的坑(二)
你猜上述程序输出的是什么? 是 ABC easy as 123 吗? 你执行了输出操作,你才发现输出的是 ABC easy as [C@6e8cf4c6 ,这么一串丑陋的数字是什么鬼? 实际上我们知道字符串与任何数值的相加都会变为字符串,上述事例也不例外, numbers输出其实实际上是调用了Object.toString()方法,让numbers转变为'[c' + '@' + 无符号的十六进制数。
108 0
下一篇
无影云桌面