怎么样快速获得图片的大小

ningweidong 2010-06-11 09:42:35
我想用image显示图片的缩略图。
如果我把strech属性设为true。可以显示缩略图,但是完全是拉伸的。
我想先获得图片的大小,再动态修改image的大小。
Dim objpic, iWidth, iHeight
Set objpic = LoadPicture("F:\photo\S1055561.JPG")
iWidth = Round(objpic.Width / 26.4583)
iHeight = Round(objpic.Height / 26.4583)

Picture1.Picture = LoadPicture("F:\photo\S1055561.JPG")
MsgBox "高" & Picture1.Picture.Height & "宽" & Picture1.Picture.Width
这两种方法可以获得图片的大小,但是很慢啊。有没有快一点的方法?
...全文
865 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
lcw0622 2012-01-12
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 zhao4zhong1 的回复:]

引用 8 楼 zhao4zhong1 的回复:
Shell("alchemy.exe -x F:\photo\S1055561.JPG >c:\imginfo.txt",vbHide)
'然后读文件c:\imginfo.txt的内容
Image Alchemy (v1.11) - Copyright (c) 1990-98, Handmade Software, Inc.
Reading……
[/Quote]
试问谁能写得比你这个方法运行速度慢?
rkdrc 2010-06-12
  • 打赏
  • 举报
回复
picture.scalex什么的忘记了,前段时间用过
laviewpbt 2010-06-12
  • 打赏
  • 举报
回复
这些你只要找一下这些格式的文件头的说明文件,不都是很容易的一件事情吗

EMF的

'typedef struct tagENHMETAHEADER
'{
' DWORD iType; // Record type EMR_HEADER.
' DWORD Size; // Record size in bytes. This may be greater
' // than the sizeof(ENHMETAHEADER).
' RECTL rclBounds; // Inclusive-inclusive bounds in device units.
' RECTL rclFrame; // Inclusive-inclusive Picture Frame of
' // metafile in .01 mm units.
' DWORD dSignature; // Signature. Must be ENHMETA_SIGNATURE.
'
' DWORD nVersion; // Version number.
' DWORD nBytes; // Size of the metafile in bytes.
' DWORD nRecords; // Number of records in the metafile.
' WORD nHandles; // Number of handles in the handle table.
' // Handle index zero is reserved.
' WORD sReserved; // Reserved. Must be zero.
' DWORD nDescription; // Number of chars in the unicode description string.
' // This is 0 if there is no description string.
'
' DWORD offDescription; // Offset to the metafile description record.
' // This is 0 if there is no description string.
' DWORD nPalEntries; // Number of entries in the metafile palette.
' SIZEL szlDevice; // Size of the reference device in pixels.
' SIZEL szlMillimeters; // Size of the reference device in millimeters.
'} ENHMETAHEADER;



ICO的
Private Type ICONDIRENTRY
bWidth As Byte ' 图标图片的显示宽度,以像素为单位,最大值为255
bHeight As Byte ' 图标图片的显示高度, 以像素为单位,最大值为255 (times 2)
bColorCount As Byte ' 图标图片的颜色数 (0 if >=8bpp)
bReserved As Byte ' 保留域总是 0
wPlanes As Integer ' 图标图片的位面数,1
wBitCount As Integer ' 标图片的颜色深度
dwBytesInRes As Long ' 图标图片占用的数据量(字节为单位)
dwImageOffset As Long ' 图标图片的开始位置
End Type

Private Type ICONDIR
idReserved As Integer ' 保留域,目前始终为0
idType As Integer ' 定义为资源类型,图标值为 1、光标是2
idCount As Integer ' 表示的是这个文件里包含了几个图标
End Type



PCX的
Private Type PcxPalette
Red As Byte
Green As Byte
Blue As Byte
End Type

Private Type PCXHeader
Manufacturer As Byte '固定为10=ZSoft
version As Byte
'0 = 2.5
'2 = 2.8 with palette
'3 = 2.8 without palette
'4 = Pc paintbrush for windows
'5 = Pc Paintbrush ver 3.0+24位固定为5

Encoding As Byte '1 = .PCX RLE,固定为1
bPP As Byte '1, 2, 4, 8,每像素所需位数
Left As Integer '图像相对于屏幕左上角X坐标(像素为单位)
Top As Integer '图像相对于屏幕左上角Y坐标(像素为单位)
Right As Integer '图像相对于屏幕右下角X坐标(像素为单位)
Bottom As Integer '图像相对于屏幕右下角Y坐标(像素为单位)
HoriResolution As Integer '图像水平分辨率(像素/英寸)
VertResolution As Integer '图像垂直分辨率(像素/英寸)
Palette(0 To 15) As PcxPalette '指明调色板数据,只对16色以下有用
Reserved As Byte '保留,固定为0
Planes As Byte '指定图像色彩平面数,24位真彩色为3个平面
BytesPerLine As Integer '图像宽度(字节),且必须为偶数
PaletteType As Integer '调色板类型,彩色或单色图像为1,灰度图像为2
HScreenSize As Integer '图像的屏幕宽度(像素为单位),0为基准
VScreenSize As Integer '图像的屏幕高度(像素为单位),0为基准
Filter(0 To 53) As Byte '保留域,固定为0
End Type


PSD的

Private Type ResolutionInfo
HoriResolution As Integer 'Horizontal resolution in pixels per inch.
HoriResolutionUnit As Long '1=display horizontal resolution in pixels per inch;2=display horizontal resolution in pixels per cm.
WidthUnit As Integer 'Display width as 1=inches; 2=cm; 3=points; 4=picas; 5=columns.
VertResolution As Integer
VertResolutionUnit As Long
HeightUnit As Integer
End Type

Private Type ThumbNailInfo
Foramt As Long '= 1 (kJpegRGB). Also supports kRawRGB (0).
Width As Long 'Width of thumbnail in pixels.
Height As Long 'Height of thumbnail in pixels.
WidthBytes As Long 'Padded row bytes as (width * bitspixel + 31) / 32 * 4.
Size As Long 'Total size as widthbytes * height * planes
CompressdSize As Long 'compressedsize Size after compression. Used for consistentcy check.
BitPerPixel As Integer '= 24. Bits per pixel.
Planes As Integer '= 1. Number of planes.
Data() As Byte 'JFIF data in RGB format.
End Type

Private Type PsdHeaderInfo '定义Psd的文件头结构
Signature(0 To 3) As Byte '签名
version As Integer '总是等于1
Reserved(0 To 5) As Byte '保留,必须位0
Channels As Integer '图像中的通道数,可以包含ALPHA通道,有效范围1-24
Height As Long '图像的高度,有效范围1-30000
Width As Long '图像的宽度,有效范围1-30000
Depth As Integer '每个通道所用的位数(1.8.16)
ColorType As Integer '颜色模式,Bitmap=0; Grayscale=1; Indexed=2; RGB=3; CMYK=4; Multichannel=7; Duotone=8; Lab=9
End Type


Private Type PsdColorModeInfo
Length As Long
Palette(767) As Byte
End Type

Private Type PsdImageResourceInfo
Length As Long
OSType(3) As Byte
ID As Integer
SizeOfName As Byte
PascalName() As Byte
Size As Long
Resolution As ResolutionInfo
ThumbNail As ThumbNailInfo
End Type

Private Enum PsdColorModeEnum
PSD_BITMAP = 0 ' Bitmap image
PSD_GRAYSCALE = 1 ' Greyscale image
PSD_INDEXED = 2 ' Indexed image
PSD_RGB = 3 ' RGB image
PSD_CMYK = 4 ' CMYK
PSD_MULTICHANNEL = 7 ' Multichannel image
PSD_DUOTONE = 8 ' Duotone image
PSD_LAB = 9 ' Lab image
End Enum


TGA的



' TGA header follows (18 byte structure)
' Offset + 0 : 1 byte ID Length (max of 255 characters that follow the header; can contain anything)
' Offset + 1 : 1 byte Color Map Type (1=palette included, 0=no palette, other values are reserved)
' Offset + 2 : 1 byte m_Image Type (0,1,2,3,9,10,11,32,33). 0=no img, 1&9=paletted, 2&10=true color, 3&11=Grayscale, 32&33 huffman compressed, 9&10&11 are compressed)
' Offset + 3 : 2 bytes Color Map Index (offset into the palette where 1st palette entry is found)
' Offset + 5 : 2 bytes Number of Map Entries (number of palette entries)
' Offset + 7 : 1 byte Entry bit depth (bit depth of each palette entry: 8,15,16,24,32)
' Offset + 8 : 2 bytes X origin where m_Image should be displayed on screen (rarely used)
' Offset + 10: 2 bytes Y origin where m_Image should be displayed on screen (rarely used)
' Offset + 12: 2 bytes m_Image Width (unsigned)
' Offset + 14: 2 bytes m_Image Height (unsigned)
' Offset + 16: 1 byte Pixel bit depth (any value is valid except zero; this class does 8,15,16,24,32)
' Offset + 17: 1 byte m_Image Descriptor (m_Image orientation & alpha usage)
' Total 18 bytes


WMF相关的信息

Open FileName For Binary As #FileNumber
Put #FileNumber, 1, .Key
Put #FileNumber, 5, .hMF
Put #FileNumber, 7, .Bbox.Left
Put #FileNumber, 9, .Bbox.Top
Put #FileNumber, 11, Host.Width
Put #FileNumber, 13, Host.Height
Put #FileNumber, 15, .Inch
Put #FileNumber, 17, .Reserved
Put #FileNumber, 21, .Checksum
Put #FileNumber, , Data()
Close #FileNumber

ningweidong 2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 laviewpbt 的回复:]
每一个中图像文件都有一个地方保存了图像的大小的,你需要找到这个位置并读取相关参数就OK了
至于先用LoadPicture读取在来得到高度那是自杀。

Public Type ImageSize
Width As Long
Height As Long
End Type

Public Function GetImageSize(sFileName As String) As……
[/Quote]
你的函数有时候会读失败
东方之珠 2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 laviewpbt 的回复:]
chenjl1031 的代码说的不好听点就是脱了裤子放屁。


还有那个代码可能存在资源泄漏,LoadPicture(lsPicName)所加载的对象没有被释放,
在一个问题时GetObject 在有些情况下得不到正确的值。
[/Quote]
我试过了,LoadPicture这样用也慢了.还是直接读取二进制文件快。如果你那个代码能多支持几种格式就好了,比如:WMF,TIFF等。
laviewpbt 2010-06-12
  • 打赏
  • 举报
回复
chenjl1031 的代码说的不好听点就是脱了裤子放屁。


还有那个代码可能存在资源泄漏,LoadPicture(lsPicName)所加载的对象没有被释放,
在一个问题时GetObject 在有些情况下得不到正确的值。

打死不掉牙 2010-06-12
  • 打赏
  • 举报
回复
在网上搜的,好像挺快的,直接读信息的

Option Explicit
Private Type ImageSize
Width As Long
Height As Long
End Type


Private Function GetImageSize(sFileName As String) As ImageSize
On Error Resume Next
Dim iFN As Integer
Dim bTemp(3) As Byte
Dim lFlen As Long
Dim lPos As Long
Dim bHmsb As Byte
Dim bHlsb As Byte
Dim bWmsb As Byte
Dim bWlsb As Byte
Dim bBuf(7) As Byte
Dim bDone As Byte
Dim iCount As Integer

lFlen = FileLen(sFileName)
iFN = FreeFile
Open sFileName For Binary As iFN
Get #iFN, 1, bTemp()
'PNG 文件
If bTemp(0) = &H89 And bTemp(1) = &H50 And bTemp(2) = &H4E And bTemp(3) = &H47 Then
Get #iFN, 19, bWmsb
Get #iFN, 20, bWlsb
Get #iFN, 23, bHmsb
Get #iFN, 24, bHlsb
GetImageSize.Width = CombineBytes(bWlsb, bWmsb)
GetImageSize.Height = CombineBytes(bHlsb, bHmsb)
End If
'GIF 文件
If bTemp(0) = &H47 And bTemp(1) = &H49 And bTemp(2) = &H46 And bTemp(3) = &H38 Then
Get #iFN, 7, bWlsb
Get #iFN, 8, bWmsb
Get #iFN, 9, bHlsb
Get #iFN, 10, bHmsb
GetImageSize.Width = CombineBytes(bWlsb, bWmsb)
GetImageSize.Height = CombineBytes(bHlsb, bHmsb)
End If
'JPEG 文件
If bTemp(0) = &HFF And bTemp(1) = &HD8 And bTemp(2) = &HFF Then
Debug.Print "JPEG"
lPos = 3
Do
Do
Get #iFN, lPos, bBuf(1)
Get #iFN, lPos + 1, bBuf(2)
lPos = lPos + 1
Loop Until (bBuf(1) = &HFF And bBuf(2) <> &HFF) Or lPos > lFlen
For iCount = 0 To 7
Get #iFN, lPos + iCount, bBuf(iCount)
Next iCount
If bBuf(0) >= &HC0 And bBuf(0) <= &HC3 Then
bHmsb = bBuf(4)
bHlsb = bBuf(5)
bWmsb = bBuf(6)
bWlsb = bBuf(7)
bDone = 1
Else
lPos = lPos + (CombineBytes(bBuf(2), bBuf(1))) + 1
End If
Loop While lPos < lFlen And bDone = 0
GetImageSize.Width = CombineBytes(bWlsb, bWmsb)
GetImageSize.Height = CombineBytes(bHlsb, bHmsb)
End If
'BMP 文件
If bTemp(0) = &H42 And bTemp(1) = &H4D Then
Get #iFN, 19, bWlsb
Get #iFN, 20, bWmsb
Get #iFN, 23, bHlsb
Get #iFN, 24, bHmsb
GetImageSize.Width = CombineBytes(bWlsb, bWmsb)
GetImageSize.Height = CombineBytes(bHlsb, bHmsb)
End If
Close iFN
End Function

Private Function CombineBytes(lsb As Byte, msb As Byte) As Long
CombineBytes = CLng(lsb + (msb * 256)) '把十六进制数换成十进制
End Function

Private Sub Command1_Click()
Dim size As ImageSize
size = GetImageSize("F:\photo\S1055561.JPG")
MsgBox "width=" & size.Width & " height=" & size.Height
End Sub

东方之珠 2010-06-12
  • 打赏
  • 举报
回复
Option Explicit

Private Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long

'定义位图结构
Private Type BITMAP
bmType As Long
bmWidth As Long
bmHeight As Long
bmWidthBytes As Long
bmPlanes As Integer
bmBitsPixel As Integer
bmBits As Long
End Type

'定义位图大小
Private Type PicInfo
PicWidth As Long
picHeight As Long
End Type

Private Function GetPictureInfo(lsPicName As String) As PicInfo
Dim hBitmap As Long
Dim res As Long
Dim bmp As BITMAP
res = GetObject(LoadPicture(lsPicName).Handle, Len(bmp), bmp) '取得BITMAP的结构
GetPictureInfo.PicWidth = bmp.bmWidth
GetPictureInfo.picHeight = bmp.bmHeight
End Function

Private Sub Command1_Click()
Debug.Print "图片宽度:" & GetPictureInfo("c:\player2.JPG").PicWidth, "图片高度:" & GetPictureInfo("c:\player2.JPG").picHeight
End Sub
赵4老师 2010-06-12
  • 打赏
  • 举报
回复
Shell("alchemy.exe -x F:\photo\S1055561.JPG >c:\imginfo.txt",vbHide)
'然后读文件c:\imginfo.txt的内容
Image Alchemy (v1.11) - Copyright (c) 1990-98, Handmade Software, Inc.
Reading JPEG file F:\photo\S1055561.JPG
File Name: F:\photo\S1055561.JPG
Width x Height: 2008 x 1280
Number of Colours: True Colour (24 bits)
Dots per inch: 600 x 600
Image size (inches): 3.35 x 2.13
Raw size: 7710720 Actual size: 159466 (Compression ratio: 48.4:1)
嗷嗷叫的老马 2010-06-12
  • 打赏
  • 举报
回复
我也支持读文件头

不过文件格式太多啦.........
laviewpbt 2010-06-12
  • 打赏
  • 举报
回复
每一个中图像文件都有一个地方保存了图像的大小的,你需要找到这个位置并读取相关参数就OK了
至于先用LoadPicture读取在来得到高度那是自杀。

Public Type ImageSize
Width As Long
Height As Long
End Type

Public Function GetImageSize(sFileName As String) As ImageSize
On Error Resume Next 'you'll want to change this
Dim iFN As Integer
Dim bTemp(3) As Byte
Dim lFlen As Long
Dim lPos As Long
Dim bHmsb As Byte
Dim bHlsb As Byte
Dim bWmsb As Byte
Dim bWlsb As Byte
Dim bBuf(7) As Byte
Dim bDone As Byte
Dim iCount As Integer

lFlen = FileLen(sFileName)
iFN = FreeFile
Open sFileName For Binary As iFN
Get #iFN, 1, bTemp()

'PNG file
If bTemp(0) = &H89 And bTemp(1) = &H50 And bTemp(2) = &H4E _
And bTemp(3) = &H47 Then
Get #iFN, 19, bWmsb
Get #iFN, 20, bWlsb
Get #iFN, 23, bHmsb
Get #iFN, 24, bHlsb
GetImageSize.Width = CombineBytes(bWlsb, bWmsb)
GetImageSize.Height = CombineBytes(bHlsb, bHmsb)
End If

'GIF file
If bTemp(0) = &H47 And bTemp(1) = &H49 And bTemp(2) = &H46 _
And bTemp(3) = &H38 Then
Get #iFN, 7, bWlsb
Get #iFN, 8, bWmsb
Get #iFN, 9, bHlsb
Get #iFN, 10, bHmsb
GetImageSize.Width = CombineBytes(bWlsb, bWmsb)
GetImageSize.Height = CombineBytes(bHlsb, bHmsb)
End If


'JPEG file
If bTemp(0) = &HFF And bTemp(1) = &HD8 And bTemp(2) = &HFF Then
Debug.Print "JPEG"
lPos = 3
Do
Do
Get #iFN, lPos, bBuf(1)
Get #iFN, lPos + 1, bBuf(2)
lPos = lPos + 1
Loop Until (bBuf(1) = &HFF And bBuf(2) <> &HFF) Or lPos > lFlen

For iCount = 0 To 7
Get #iFN, lPos + iCount, bBuf(iCount)
Next iCount
If bBuf(0) >= &HC0 And bBuf(0) <= &HC3 Then
bHmsb = bBuf(4)
bHlsb = bBuf(5)
bWmsb = bBuf(6)
bWlsb = bBuf(7)
bDone = 1
Else
lPos = lPos + (CombineBytes(bBuf(2), bBuf(1))) + 1
End If
Loop While lPos < lFlen And bDone = 0
GetImageSize.Width = CombineBytes(bWlsb, bWmsb)
GetImageSize.Height = CombineBytes(bHlsb, bHmsb)

End If
Close iFN

End Function
Private Function CombineBytes(lsb As Byte, msb As Byte) As Long
CombineBytes = CLng(lsb + (msb * 256))
End Function

hfCoder 2010-06-12
  • 打赏
  • 举报
回复
不懂,up
东方之珠 2010-06-12
  • 打赏
  • 举报
回复
直接用API读取。比如:位图文件的高和宽在文件开头,定义一个结构可以读取。
赵4老师 2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zhao4zhong1 的回复:]
Shell("alchemy.exe -x F:\photo\S1055561.JPG >c:\imginfo.txt",vbHide)
'然后读文件c:\imginfo.txt的内容
Image Alchemy (v1.11) - Copyright (c) 1990-98, Handmade Software, Inc.
Reading JPEG file F:\photo\S10555……
[/Quote]
试问谁能写得比我这个方法支持的格式多?
东方之珠 2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 laviewpbt 的回复:]
这些你只要找一下这些格式的文件头的说明文件,不都是很容易的一件事情吗

EMF的

'typedef struct tagENHMETAHEADER
'{
' DWORD iType; // Record type EMR_HEADER.
' DWORD Size; // Record size in bytes. This may be greater
' // than the……
[/Quote]
真祥细啊,非常感谢!
我上午在这个地方(http://topic.csdn.net/t/20031229/19/2615541.html)找了一个WMF的资料,感觉还是有点复杂。
hfCoder 2010-06-11
  • 打赏
  • 举报
回复
不懂,up
threenewbee 2010-06-11
  • 打赏
  • 举报
回复
参考:http://download.csdn.net/source/2317047
 学习对象对java感兴趣,但没有任何软件编程基础,想先从零基础入手的软件开发爱好者;希望从另外一些简单的其他语言转型从事java开发的求职人员。适合大学生学习计算机入门,通过java语言计算机二级。想从事编程开发的人员、具有计算机基础、面试不过关的待业者、出校门的大学生、以及编程能力提升的从业者、以及世界500强的java工程师。 课程目标:你将对java内容有个全面的掌握,助编程能力的提升,让你理解500强企业要求的难度,通过计算机二级java语言考试 学习计划如果是待业者,明天用8个小时,会在两个月内完成。如果是上班族,每周至少用12-20小时,4-6个月内完成。课后有附加资料和练习来巩固知识并加强编程能力。此课程注重500强企业的编程能力实战要求。Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点  。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。Java 具备下列特性。1.简单性Java看起来设计得很像C++,但是为了使语言小和容易熟悉,设计者们把C++语言中许多可用的特征去掉了,这些特征是一般程序员很少使用的。例如,Java不支持go to语句,代之以提供break和continue语句以及异常处理。Java还剔除了C++的操作符过载(overload)和多继承特征,并且不使用主文件,免去了预处理程序。因为Java没有结构,数组和串都是对象,所以不需要指针。Java能够自动处理对象的引用和间接引用,实现自动的无用单元收集,使用户不必为存储管理问题烦恼,能更多的时间和精力花在研发上。2.面向对象Java是一个面向对象的语言。对程序员来说,这意味着要注意应中的数据和操纵数据的方法(method),而不是严格地用过程来思考。在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和行为。每一对象是其状态和行为的封装。类是按一定体系和层次安排的,使得子类可以从超类继承行为。在这个类层次体系中有一个根类,它是具有一般行为的类。Java程序是用类来组织的。Java还包括一个类的扩展集合,分别组成各种程序包(Package),用户可以在自己的程序中使用。例如,Java提供产生图形用户接口部件的类(java.awt包),这里awt是抽象窗口工具集(abstract windowing toolkit)的缩写,处理输入输出的类(java.io包)和支持网络功能的类(java.net包)。3.分布性Java设计成支持在网络上应用,它是分布式语言。Java既支持各种层次的网络连接,又以Socket类支持可靠的流(stream)网络连接,所以用户可以产生分布式的客户机和服务器。网络变成软件应用的分布运载工具。Java程序只要编写一次,就可到处运行。4.编译和解释性Java编译程序生成字节码(byte-code),而不是通常的机器码。Java字节码提供对体系结构中性的目标文件格式,代码设计成可有效地传送程序到多个平台。Java程序可以在任何实现了Java解释程序和运行系统(run-time system)的系统上运行。在一个解释性的环境中,程序开发的标准“链接”阶段大大消失了。如果说Java还有一个链接阶段,它只是把新类装进环境的过程,它是增量式的、轻量级的过程。因此,Java支持快速原型和容易试验,它将导致快速程序开发。这是一个与传统的、耗时的“编译、链接和测试”形成鲜明对比的精巧的开发过程。5.稳健性Java原来是用作编写消费类家用电子产品软件的语言,所以它是被设计成写高可靠和稳健软件的。Java消除了某些编程错误,使得用它写可靠软件相当容易。Java是一个强类型语言,它允许扩展编译时检查潜在类型不匹配问题的功能。Java要求显式的方法声明,它不支持C风格的隐式声明。这些严格的要求保证编译程序能捕捉调用错误,这就导致更可靠的程序。可靠性方面最重要的增强之一是Java的存储模型。Java不支持指针,它消除重写存储和讹误数据的可能性。类似地,Java自动的“无用单元收集”预防存储漏泄和其它有关动态存储分配和解除分配的有害错误。Java解释程序也执行许多运行时的检查,诸如验证所有数组和串访问是否在界限之内。异常处理是Java中使得程序更稳健的另一个特征。异常是某种类似于错误的异常条件出现的信号。使用try/catch/finally语句,程序员可以找到出错的处理代码,这就简化了出错处理和恢复的任务。6.安全性Java的存储分配模型是它防御恶意代码的主要方法之一。Java没有指针,所以程序员不能得到隐蔽起来的内幕和伪造指针去指向存储器。更重要的是,Java编译程序不处理存储安排决策,所以程序员不能通过查看声明去猜测类的实际存储安排。编译的Java代码中的存储引用在运行时由Java解释程序决定实际存储地址。Java运行系统使用字节码验证过程来保证装载到网络上的代码不违背任何Java语言限制。这个安全机制部分包括类如何从网上装载。例如,装载的类是放在分开的名字空间而不是局部类,预防恶意的小应用程序用它自己的版本来代替标准Java类。7.可移植性Java使得语言声明不依赖于实现的方面。例如,Java显式说明每个基本数据类型的大小和它的运算行为(这些数据类型由Java语法描述)。Java环境本身对新的硬件平台和操作系统是可移植的。Java编译程序也用Java编写,而Java运行系统用ANSIC语言编写。8.高性能Java是一种先编译后解释的语言,所以它不如全编译性语言快。但是有些情况下性能是很要紧的,为了支持这些情况,Java设计者制作了“及时”编译程序,它能在运行时把Java字节码翻译成特定CPU(中央处理器)的机器代码,也就是实现全编译了。Java字节码格式设计时考虑到这些“及时”编译程序的需要,所以生成机器代码的过程相当简单,它能产生相当好的代码。9.多线程性Java是多线程语言,它提供支持多线程的执行(也称为轻便过程),能处理不同任务,使具有线索的程序设计很容易。Java的lang包提供一个Thread类,它支持开始线索、运行线索、停止线索和检查线索状态的方法。Java的线索支持也包括一组同步原语。这些原语是基于监督程序和条件变量风范,由C.A.R.Haore开发的广泛使用的同步化方案。用关键词synchronized,程序员可以说明某些方法在一个类中不能并发地运行。这些方法在监督程序控制之下,确保变量维持在一个一致的状态。10.动态性Java语言设计成适应于变化的环境,它是一个动态的语言。例如,Java中的类是根据需要载入的,甚至有些是通过网络获取的。 尹成老师带你步入Java语言基础的殿堂,讲课生动风趣、深入浅出,全套视频内容充实,整个教程以Java语言为核心,完整精彩的演练了Java语言操作流程以及各种精彩的小项目等,提高竞赛能力,非常适合同学们学习!课程特色特色一:通俗易懂本视频语言简洁,通俗易懂,将难以理解的编程问题用简单清晰的语言描述,让你更容易理解。特色三:内容丰富本视频讲解的java语言知识更加丰富翔实,较之其他视频,本视频讲解的java语言知识更多更深入。特色三:配图详尽本视频在讲解知识点时都配图了表格或图示,在讲解案例时,都配备了流程图或分析图示,让你对所学知识点或案例理解更清晰。特色四:实战性强本视频讲解的每个知识都配备了一个小案例,这样既增加了学生动手能力,又巩固了学生所学知识。特色五:加入尹成老师微信群本视频尹成老师亲自答疑

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧