java基本介绍

有需要的可以收藏 麻烦点颗小心心 谢谢

 

文章目录

 

一 特性

(2)面对对象 (4)健壮性 (5)安全性(7)可移植性(跨平台)(10)多线程 (11)动态性(6)体系结构中立(8)解释型 (3)分布式 9)高性能(1)简单性 前面五个重点
简单性
.java是C++一个纯净的版本 绝不是简化 没有头文件 指针运算的 结果 联合 操作符重载 虚基类等 for switch while while do  他的库相对于前面的编程语言已算强大了
 可以在小型机器上独立运行   40KB
 线程的话就加175KB

分布式
 java有一个丰富的例程库 用来处理http ftp 之类的TCP/IP协议
java程序可以通过url 打开和访问网络上的对象 

URL
URL(Uniform/Universal Resource Locator的缩写,统一资源定位符)是对可以从互联网上得到的资源的位
置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它
包含的信息指出文件的位置以及浏览器应该怎么处理它。它最初是由蒂姆·伯纳斯·李发明用来作为万维网的地
址的。现在它已经被万维网联盟编制为因特网标准RFC1738了。
基本信息
中文名:统一资源定位符
英文名:Uniform Resource Locator
简称:URL
属性:互联网上标准资源的地址
格式
一个完整的URL包括访问协议类型、主机地址、路径和文件名。
其中“访问协议类型”表示采用什么协议访问哪类资源,以便浏览器决定用什么方法获得资源,例如: 
http://表示采用超文本传输协议HTTP访问WWW服务器。 
ftp://表示通过文件传输协议FTP访问FTP服务器。 
telnet://表示通过远程登录协议Telnet进行远程登录。 
gopher://表示通过gopher协议访问Gopher服务器。 
“主机地址”表示要访问的主机的IP地址或域名地址;“路径和文件名”表示信息在主机中的路径和文件名,如
果缺省文件路径,则表示定位于Web服务器的主页,其文件名通常是index.htm。
分类
绝对URL
绝对URL(absolute URL)显示文件的完整路径,这意味着绝对URL本身所在的位置与被引用的实际文件的位置无关,
相对URL
相对URL(relative URL)以包含URL本身的文件夹的位置为参考点,描述目标文件夹的位置。如果目标文件与当
前页面(也就是包含URL的页面)在同一个目录,那么这个文件的相对URL仅仅是文件名和扩展名,如果目标文件
在当前目录的子目录中,那么它的相对URL是子目录名,后面是斜杠,然后是目标文件的文件名和扩展名。
如果要引用文件层次结构中更高层目录中的文件,那么使用两个句点和一条斜杠。可以组合和重复使用两个句点
和一条斜杠,从而引用当前文件所在的硬盘上的任何文件,
一般来说,对于同一服务器上的文件,应该总是使用相对URL,它们更容易输入,而且在将页面从本地系统转移
到服务器上时更方便,只要每个文件的相对位置保持不变,链接就仍然是有效地。

位符体制
每个统一资源定位符的开始都是该统一资源定位符的体制,其后是按体制不同的部分。
以下是一些统一资源定位符体制的例子:
http——超文本传输协议资源
https——用加密传送的超文本传输协议
ftp——文件传输协议
mailto——电子邮件地址
file——当地电脑或网上分享的文件


日常使用
超文本传输协议统一资源定位符将从因特网获取信息的四个基本元素包括在一个简单的地址中: 
1、传送协议;
2、服务器;
3、端口号;
4、路径。
大多数网页浏览器不要求用户输入网页中“http://”的部分,因为绝大多数网页内容是超文本传输协议文件。同样
,“80”是超文本传输协议文件的常用端口号,因此一般也不必写明。一般来说用户只要键入统一资源定位符的一
部分就可以了。
由于超文本传输协议允许服务器将浏览器重定向到另一个网页地址,因此许多服务器允许用户省略网页地址中的部
分,比如www。从技术上来说这样省略后的网页地址实际上是一个不同的网页地址,浏览器本身无法决定这个新地
址是否通,服务器必须完成重定向的任务。
转发功能
所谓URL转发,是通过服务器的特殊设置,将访问当前域名的用户引导到您指定的另一个网络地址。
例如,URL转发可以让用户在访问http://www.abc.com时,自动转向访问到一个自己指定的网址http://www.123.com,
URL转发功能是万网提供的域名注册后的增值服务。
语法方案
统一资源定位符 (Uniform Resource Locator, URL)
URL的一般格式为:scheme://host:port/path?query#fragment
file  资源是本地计算机上的文件。
ftp   通过FTP访问资源。
http  通过HTTP访问该资源。
https  通过安全的HTTP访问该资源。

news  通过NNTP访问该资源。
host   主机,指定的服务器的域名系统 (DNS) 主机名或 IP 地址。
port   端口号,整数,可选,省略时使用方案的默认端口,如http的默认端口为80。
path  路径,由零或多个“/”符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。
query  查询,可选,用于给动态网页(如使用CGI、ISAPI、PHP/JSP/ASP/ASP.NET等技术制作的网页)传递参数,可有多个参数,
用“&”符号隔开,每个参数的名和值用“=”符号隔开。
fragment  信息片断,字符串,用于指定网络资源中的片断。例如一个网页中有多个名词解释,可使用fragment直接定位到某一名词解释。
注意:Windows 主机不区分 URL 大小写,但是,Unix/Linux 主机区分大小写。

鲁棒性
 消除重写内存和损坏数据 
如果不清除 引起指针的BUG 内存冲突

安全性 
 因为分布式 
3个方面的安全性
运行时 他的堆与栈 是溢出的 但是我们不要他溢出  蠕虫和病毒的攻击手段
 破坏自己的进程空间 之外的内存
未经授权读写文件 安全锁  密匙
jdk 搞了一个信任机制  除非有数字签名 而且用户同意 才可以读写修改

体系结构中立机制

可移植性 
java 可以跨平台 jvm Windows Mac uliux 虚拟机 跨平台性
 api也可以移植  就是跨平台 jvm里面的虚拟机实现的 定义了一些可移植的接口

解释型 
直接执行java字节码 这是jdk 9以后的事情了

高性能
 内联  高内聚低耦合 

多线程  
多线程,是指从软件或者硬件上实现多个线程并发执行的技术。
具有多线程能力的计算机因有硬件支持而能够在同一时间执行

二  、五个基本原则


单一职责原则(Single-Resposibility Principle SRP)
对一个而言,应该仅有一个引起它变化的原因
本原则是我们非常熟悉的"高内聚原则"的引申。同时,本原则还揭示了内聚性和耦合性:如果一个类承担的职责过多,那么这些职责就会相互依赖,一个职责的变化可能会影响另一个职责的履行。其实OOP的实质,就是合理进行类的职责分配

开—闭原则(Open-Closed principle OCP)
软件应该是可以扩展的,但是不可以修改
也就是对扩展开放,对修改封闭。当变化来临时,不需要(或者不允许)修改原来的代码,只需要在原有的基础上扩展(同时原有的代码也要求支持扩展),那么这个软件设计就是满足开闭原则的。
此原则在Java中最典型的体现就是:抽象类 抽象基类 和 接口。通过抽象类,把一些不可变的操作封装起来,而提供抽象接口供子类实现,来实现各自变化的需求。
这个原则应用在类的设计中,要满足该原则就要充分的考虑到接口封装,抽象机制和多态。

里氏替换原则(Liskov-Substituion Principle LSP)
子类型必须能够替换掉它们的基类型
本原则和开闭原则关系密切,正是基于子类的可替换性,才使得基类可以无需修改,只要子类继承就可以实现扩展特性。这是保证继承复用的基础

在Java中的典型体现就是 基于接口的框架设计,例如JDBC,集合类。
JDBC只提供了基本的接口,返回的对象类型也是接口,这样就在选择返回对象的时候,有了更大的灵活性:只要是继承了返回接口类型的子类实例,都可以作为结果返回。而服务提供者无需暴露子类的实现,调用者也无需关心子类的实现。而提供者在对实现进行优化升级时,对调用者也是不可见,同时也没有影响的。

集合类提供了一些基本集合的接口,例如 List Map Set。我们可以在声明时用这些接口类型作为声明对象,无需关心具体的实现类型是如何操作的,集合框架可以很好的把实现类型和代码隐藏起来,对调用者透明。例如List可以用来接收ArrayList,也可以用来接收LinkedList。可以用来接收任何实现了List接口的类的实例。
以上两点,充分的利用了里氏替换原则的特性,实现了封装的基本特征。

接口隔离原则(Interface-Segregation Principle ISP)
多个专用接口优于一个单一的通用接口
本原则是单一职责原则用于接口设计的自然结果。基本思想就是,不要让客户端依赖他们不需要的接口。
一个接口应该保证,实现该接口的实例对象可以只呈现一个单一的角色。这样当接口发生改变时,对其他客户端造成的影响会更小。
把多个不同职责的功能分到不同的接口中去,提高代码的灵活性和稳定性,降低耦合性。

依赖倒置原则(Dependecy-Inversion Principle DIP)
抽象不应该依赖于细节,细节应该依赖于抽象
具体来说就是,软件设计中,高层不依赖于低层,两者都依赖于抽象。抽象应该依赖于抽象,而不依赖于具体实现细节。即:对接口编程

在Java中的体现还是,接口 和 抽象类
拿最简单的Spring IOC来说,当我们注入的时候,接收参数类型应该是接口,而注入的对象,可以是实现了接口的各种子类,当我们想改变接口表现的特性的时候,无需修改代码,只要修改注入的实现类对象就可以。

RPC框架(例如Dubbo)开放的接口也同样基于这个原则。
上面说的JDBC,集合类框架 都基于这个原则来提供实现。提供接口对象,而把实现类隐藏在内部。
三、三大特性

封装
主要概念是指:隐藏对象的属性和实现细节,仅对外暴露公共的访问方式。封装是面向对象最基本的特征之一,是类和对象概念的主要特性。

良好的封装所具有的优点:
1,隐藏信息和细节,提高安全性
2,良好的封装可以减少耦合性,提高复用性
3,对类内部结构可以随意修改,只要保证公有接口始终返回正确的结果即可。

在Java中的体现:
public default protected private 等设置访问权限的关键字
例如,类的属性私有化 private修饰,提供公有的 setter getter 方法对值进行获取和修改。
同时,还可以在setter getter函数里进行数据校验和对返回值做限制。这就是提高安全性的体现。

继承
继承是一种联结类的层次模型,Java允许并且鼓励代码的重用,继承提供了一种明确表示共性的方法,来使代码可以进行复用。

继承的出现,让类与类之间产生了关联,提供了多态的前提条件。

讲到继承,就要提到三个东西:构造器,protected关键字,向上转型:

1,构造器:我们已经知道,父类中private修饰的属性和方法子类是无法继承的,而还有一个无法继承的就是 构造器。构造器只能调用而不能被继承。
类在实例化的时候会调用自身构造器,而java编译器会默认在子类构造器的第一行用super()先调用父类的无参构造器。如果父类没有无参构造器,则子类在实例化的时候会报错。这个时候就需要显示的在子类构造器第一行(必须在第一行)指定构造器super(args)来指定调用父类哪个构造器。

2,protected关键字:proctected关键字修饰的属性和方法,可以隔绝外部其他类的访问,却可以让子类有权限访问。
但是最好还是把属性都以private修饰,父类中希望子类可以访问到,又不希望公有的方法,可以用protected修饰

3,向上转型:最典型的还是List list = new ArrayList() 将子类的实例声明为父类的类型,提高了通用性,也隐藏了子类的具体实现。因为这是一个由专用向通用的转换,所以总是安全的。唯一缺陷就是专有属性和方法的丢失。

但是继承同时又存在缺陷:
1),继承是一种强耦合关系,子类会由于父类的改变而改变
2),继承破坏了封装的特性,对于父类而言,它的实现和细节对于子类来说都是透明的
所以到底要不要继承:《Thinking in java》提供了一个解决方案:问一问自己是否需要从子类向父类进行向上转型。如果必须向上转型,则继承是必要的,但是如果不需要,则应当好好考虑自己是否需要继承

使用继承的时候,一定要注意,两个类之间是从属关系,父子关系 的。子类应该是基于父类原有的特性,派生出来,并在无需编父类代码的情况下,提供扩展的功能和方法。
不要为了使用某个类的其中一个特性,而去继承该类。


多态
多态,指的就是:
程序中定义的引用变量所指向的具体类型,和通过该引用变量发出的方法调用,在编程期间并不确定,而是在程序运行期间才确定。

如何理解多态:
因为在程序运行时才确定到具体的类,所以不用修改源码,就能让引用变量绑定到不同的类型实现上,从而导致引用调用的方法发生改变,即不修改具体代码,就可以让程序在运行时改变绑定的具体代码,表现不同的运行状态。这就是多态性。

多态的好处:
多态允许不同类对象,对同一个消息作出响应。即同一个消息可以根据发送对象的不同而采用不同的行为方式(发送消息就是函数调用)。
主要好处如下:

1)可替换性。多态对已存在的代码具有可替换性。
2)可扩充性。新增加的子类不影响已经存在的类结构。
3)接口性。多态是父类通过方法签名,向子类提供一个公共接口,由子类来完善或者重写它来实现的。
4)灵活性。
5)简化性。

Java中多态的体现:

重写(覆盖)
动态链接(动态调用)
重载
多态的三个必要条件:

继承
重写
向上转型。
多态的作用:
我们知道,封装可以隐藏细节,使得代码模块化,继承可以扩展已存在的模块化代码(父类),实现代码的复用。

而多态,则是实现了接口的复用,多态的作用,就是在类的实现和派生的时候,保证使用基类下面,任意一个子类实例的属性和方法,都可以正确调用。

虚拟机如何实现多态:
在JVM中,是使用了动态绑定技术(dynamic binding),执行期间判断所引用对象的实际类型,根据实际类型调用对应的方法.

重载严格意义上并不属于多态,重载的具体实现是:编译器根据不同的参数表,对同名函数的名称做修饰,然后这些同名函数就变成了不同的函数。对重载函数的调用,在编译期间就已经确定了,是静态的(注意!是静态的),因此,重载和多态无关。

四、jvm

jdk 包含了jer java开发者整的一个运行环境  jvm  api 编译器和调试器
jer  java的运行环境和一些API  不包含其他的开发组件   
java有一个高质量的执行环境 比c 和Python 要强 

 Java 虚拟机——JVM
JVM (Java Virtual Machine ):Java虚拟机,简称JVM,是运行所有Java程序的假想计算机,是Java程序的
运行环境,是Java 最具吸引力的特性之一。我们编写的Java代码,都运行在 JVM 之上。
跨平台 :任何软件的运行,都必须要运行在操作系统之上,而我们用Java编写的软件可以运行在任何的操作系
统上,这个特性称为Java语言的跨平台特性。该特性是由JVM实现的,我们编写的程序运行在JVM上,而JVM
运行在操作系统上。
如图所示,Java的虚拟机本身不具备跨平台功能的,每个操作系统下都有不同版本的虚拟机。


2.2 JRE 和 JDK
JRE (Java Runtime Environment) :是Java程序的运行时环境,包含 JVM 和运行时所需要的 核心类库 。
JDK (Java Development Kit):是Java程序开发工具包,包含 JRE 和开发人员使用的工具。
我们想要运行一个已有的Java程序,那么只需安装 JRE 即可。
我们想要开发一个全新的Java程序,那么必须安装 JDK 。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值