首页 > 其他分享 >1.安装、配置、编写、理解

1.安装、配置、编写、理解

时间:2024-04-14 22:44:05浏览次数:26  
标签:bin src java jar 理解 编写 安装 Hello 加载

第一章【安装、配置、编写、理解】

一、JDK

1、相关名词

SDK:软件开发包

JDK:java程序开发工具包

JRE:java程序运行环境

API:应用程序编程接口

API Documentation:API说明文档

2、jdk安装

3、oracle官方文档中提供的JDK结构图:

image-20210111140532340

4、JDK目录

image-20210111140646901

sun公司程序员--编写基础的代码-->*.java --压缩-- >src.zip --编译--> *.class --归档-->rt.jar

二、面向对象

1、OOP理念

面向对象编程(Object-Oriented Programming,OOP)

面向对象的特征:抽象、封装、继承、多态。

  • 封装是一种对象功能内聚的表现形式,使模块之间耦合度变低,更具有维护性;
  • 继承使子类能够继承父类,获得父类的部分属性和行为,使模块更有复用性;
  • 多态使模块在复用性基础上更加有扩展性,使运行期更有想象空间
  • 抽象是面向对象思想最基础的能力之一,正确而严谨的业务抽象和建模分析能力是后续的封装、继承、多态的基础,是软件大厦的基石。

Java 之父 Gosling 设计的 Object 类,是任何类的默认父类,是对万事万物的抽象。

三、JVM

image-20210111141309832

四、垃圾回收器

java代码中,开辟要使用的内存空间,使用new关键字即可完成,使用完之后,对内存的释放,在JVM中,由垃圾回收器(Garbage Collection,GC)来完成。

五、字节码验证

一个class文件被加载到JVM内存之后,首先要经过字节码验证,主要包含:

  • 检查当前class文件的版本和JVM的版本是否兼容

  • 检查当前代码是会破坏系统的完整性

  • 检查当前代码是否有栈溢出的情况

  • 检查当前代码中的参数类型是否正确

  • 检查当前代码中的类型转换操作是否正确

六、编写Java程序

1、书写Java文件的过程

vim Hello.java

2、程序中出现主方法

3、将Java文件编译成class文件

javac Hello.java

4、执行程序

java Hello

参数:

​ -cp:在【本次命令】中【临时指定】类加载器去哪个位置加载我们需要执行的程序

java -cp src Hello

​ -verbose:将JVM启动运行的时候加载的信息输出出来

java -verbose Hello java -verbose Hello > a.txt

​ -d:指定放置生成的类文件的位置

javac -d bin Hello.java

【注意】在书写Java文件的时候的注意事项

1、源文件后缀名必须为.java

2、一个java源文件中可以包含很多个Java类,但是有且只有一个使用public修饰的类,并且使用public修饰的类的类名和源文件名保持一致。

3、一个类要想执行,需要在这个类中出现主函数,否则只能通过调用的方式执行main方法,与类是否使用public没有任何关系,只要想运行就添加public。

七、package

​ 1、定义包结构,将编译过后的class文件需要放在指定的包结构下面

​ 2、Java中定义的包结构实际上在计算机上是以文件夹的形式存在

​ 3、package定义是可添也可不添。包名.类名

​ 4、如果要添加包结构必须放在所有程序的第一行

​ 5、包结构允许出现多层,使用.分割

package com.briup.day2; public class Hello{}

​ 类的全限定名:

com.briup.day2.Hello

​ 6、自动生成包结构

javac -d . Dog.java

​ 7、其他路径下执行程序

java -cp src com.sxu.day2.Dog

​ 8、在src下创建bin目录,将编辑运行的class文件放在bin里面

八、jar

​ 1、使用jar命令将字节码文件压缩成.jar

jar -cvf 打包名.jar *.class

jar -cvf Hello.jar Hello.class

jar -cvf Dog.jar com/sxu/day2/Dog.class

jar -cvf hello.jar -C bin .

​ 2、 修改打包的jar包里面的文件META-INF的MANINFEST.MF,添加以下main方法所在的类

Main-Class: Hello 【注意:冒号后面有空格】

`Main-Class: com.sxu.day2.Dog`

​ 或者vim Hello.jar 点进去MANINFEST.MF,添加 Main-Class: Hello

​ 保存重新压缩,此时jar可用

3、执行压缩文件

java -jar Hello.jar

java -jar Dog.jar

完整版

  1. 在java文件下创建src、bin目录

    mkdir src bin

  2. 进入src文件夹,编写Hello.java文件

    vim Hello.java

    编写代码,包含package

      1 package com.sxu.day2;
      2 
      3 public class Hello{
      4     public static void main(String[] args){
      5         System.out.println("hello world!");
      6     }
      7 }
    
  3. 然后将Hello.java文件编译成Hello.class文件并保存在bin目录下

    javac -d ../bin Hello.java

  4. 返回上级目录,运行程序

    cd ..

    java -cp bin com.sxu.day2.Hello

  5. 把当前目录下的bin文件夹里面的所有文件打到jar包中,但是【不包含】bin目录本身

    jar -cvf hello.jar -C bin .

  6. 此时jar是一个普通的jar,不能直接java -jar的方式进行运行

    【直接运行报错:hello.jar中没有主清单属性】

    原因是因为没有在jar中指定哪一个类中有程序的入口,需要修改jar中的配置

    方式一

    image-20210111162213275 image-20210111162338827 image-20210111162544672

    保存,然后更新压缩包

    image-20210111162634643

    方式二:

    vim hello.jar

    image-20210111170636408

    光标移动到MANINFEST.MF位置,回车,然后i输入,ESC-->:wq!,再次:q退出

    image-20210111170907117

  7. 执行hello.jar包

    java -jar hello.jar

九、import

1、一个类去引入其他类

若要引用的类在同包或java.lang包下面,那么类是可以直接使用;

若要使用的类不在同包也不再java.lang包下面,那么需要import导包。

例子1:同包

vim src/Stu.java 【含主方法,调用Tea】

vim src/Tea.java

javac -d bin src/Tea.java

javac -cp bin -d bin src/Stu.java

java -cp bin com.sxu.day3.Stu

例子2:不同包

vim src/Doc.java

package com.sxu.day3.test;

import com.sxu.day3.test.Doc;

直接将src下所有的java文件编译

javac -d bin src/*.java

十、类加载

  • 启动类加载器 bootstrapClassLoader,非java语言实现 jre/lib/rt.jar
  • 扩展类加载器 ExtClassLoader,java语言实现,是ClassLoader类型的对象 jre/lib/ext/xxx.jar
  • 应用类加载器 AppClassLoader,java语言实现,是ClassLoader类型的对象 CLASSPATH指定

十一、双亲委托机制

例子:现在要加载Hello.class文件中的类

  • 首先加载任务就交给了AppClassLoader

  • 然后AppClassLoader把这个任务委托给自己的父加载器,也就是ExtClassLoader

  • 然后ExtClassLoader把这个任务委托给自己的父加载器,也就是bootstrapClassLoader

  • 然后bootstrapClassLoader就尝试去加载Hello这个类,但是在指定路径下并没有找到

  • 然后任务又交回给了ExtClassLoader,ExtClassLoader尝试加载Hello这个类,但是在指定路径中没找到

  • 然后任务又交回给了AppClassLoader

  • 最后AppClassLoader从CLASSPATH中指定的路径里面找到并加载了这个Hello类,完成类加载的过程

把hello.jar移到/opt/jdk1.8.0_171/jre/lib/ext/

sudo mv hello.jar /opt/jdk1.8.0_171/jre/lib/ext/

在任意路径都可以执行Hello这个类

java com.sxu.day2.Hello

标签:bin,src,java,jar,理解,编写,安装,Hello,加载
From: https://www.cnblogs.com/pengdali/p/18134843

相关文章

  • 深入理解DES算法:原理、实现与应用
    title:深入理解DES算法:原理、实现与应用date:2024/4/1421:30:21updated:2024/4/1421:30:21tags:DES加密对称加密分组密码密钥管理S盒P盒安全性分析替代算法DES算法简介历史DES(DataEncryptionStandard)算法是由IBM研发,并于1977年被美国国家标准局(NBS,现NIST......
  • MySQL概述以及MySQL的安装以及启动
    一、数据库的相关概念数据库Database,简称DB。按照一定的数据结构来组织、存储和管理数据的仓库。数据库管理系统DatabaseManagementSystem,一种操纵和管理数据库的大型软件,用于创建、使用和维护数据库,简称DBMS。  关系型数据库(RDBMS)概念:关系型数据库,是建立在关系模型......
  • 安装及管理程序
    目录1.Linux应用程序基础(1)应用程序与系统命令关系(2)典型应用程序的目录结构(3)常见的软件包封装类型2.RPM软件包管理工具(1)RPM软件管理器Red-HatPackageManager(2)RPM软件包(3)查询RPM软件报信息(1)rpm命令的格式(2)查询已安装的RPM软件信息(3)查询RPM软件包文件中的信息(4)安装、升级、卸载RPM......
  • ubuntu安装包命令
    1.介绍#查看安装的所有软件【带简介】#dpkg-l|grepifupdowniHifupdown0.8.10ubuntu1.2amd64highleveltoolstoconfigurenetworkinterfaces#使用apt查看已安装版本#aptlist--installed|grep......
  • Ubuntu下离线安装PostgreSQL
      首先,我的环境是Ubuntu20.04  如果是在线安装,根据官网的介绍很简单#安装包sudoaptupdatesudoaptinstallwgetgnupg#导入仓库sudosh-c'echo"debhttps://apt.postgresql.org/pub/repos/apt$(lsb_release-cs)-pgdgmain">/etc/apt/......
  • ABP -Vnext框架一步一步入门落地教程——ABP Vnext框架代码安装和启动(一)
    兄弟们,人生需要指引,而复制最快的方式,让我们行动吧——codesoft教程介绍ABP-Vnext框架我们之前摸了无数次,好象初恋的女孩,一直在靠近,一直在努力,一直不敢盯着她的眼睛说:美女,我很喜欢你,能不能一起吃个饭!我们都喜欢自己变得足够的优秀之后,才敢说这句话。结果三年就过去了。我想搞技......
  • oh-my-zsh安装自动建议插件
    1.插件列表zsh-autosuggestions:这个是自动建议插件,能够自动提示你需要的命令。zsh-syntax-highlighting:这个是代码高亮插件,能够使你的命令行各个命令清晰明了。2.安装插件2.1自动安装2.1.1添加插件OhMyZsh提供了一种简便的方式来安装官方仓库中的插件。打开~/......
  • 自己编写测试用例的思路
    题目将数组(1<=n<=100)中的每个整数循环右移m(m>=0)个位置输入:占二行,其中第1行:n和m两个数,n和m之间用空格分隔。第2行:数组A中的n个数,各数之间用空格分隔(第一个数之前和最后一个数之后无空格)。输出:占一行,数据间用一个空格分隔(第一个数之前和最后一个数之后无空格)。样例:1051......
  • 如何编写易于访问的技术文档 - 最佳实践与示例
    当你为项目或工具编写技术文档时,你会希望它易于访问。这意味着它将为全球网络上的多样化受众提供服务并可用。网络无障碍旨在使任何人都能访问网络内容。设计师、开发人员和撰写人员有共同的无障碍最佳实践。本文将涵盖一些创建技术内容的最佳实践。(本文视频讲解:java567.com)什......
  • 04_NET中使用Redis(ServiceStack.Redis)和Linux中安装Redis
    官网:Redis-TheReal-timeDataPlatformLinux安装Redis: 1.安装gcc安装gccyum-yinstallgcctcl如果出现Complete表示成功查看gcc版本gcc-v 2.升级gcc升级到gcc9.3:yum-yinstallcentos-release-sclyum-yinstalldevtoolset-9-gccdevtoolset-9-gcc-c++......