// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= NetBeans IDE 中静态代码分析功能的视频
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: NetBeans IDE 中静态代码分析功能的视频 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, NetBeans IDE 中静态代码分析功能的视频

|===
|此截屏视频演示了在 NetBeans IDE 7.2 Beta Java 编辑器中引入的新静态代码分析功能。此截屏视频演示了如何使用 FindBugs 和 NetBeans Java 提示执行 Java 代码的静态分析，而不实际运行应用程序。

作者：Jan Lahoda、Alyona Stashkova 
播放时长：3:47

link:http://bits.netbeans.org/media/code-inspect.swf[+观看全图/下载+] (.swf)（按住 Ctrl 键单击即可下载，大小为 2,7 MB）


link:/about/contact_form.html?to=3&subject=Feedback:%20Video%20of%20the%20Static%20Analysis%20Feature%20in%20the%20NetBeans%20IDE[+发送有关此教程的反馈意见+]
 
|===


== 相关链接

* link:http://wiki.netbeans.org/Java_Hints[+NetBeans Java 提示+]
* link:https://netbeans.apache.org/tutorials/nbm-java-hint.html[+NetBeans Java 提示模块教程+]
* _使用 NetBeans IDE 开发应用程序_中的link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG613[+在源代码分析和重构中使用提示+]
