// 
//     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.1 中的新“检查并转换”重构功能的支持。该截屏视频演示如何使用包含重构的检查和一组预定义检查来执行代码检查、管理配置以及创建定制检查。该截屏视频还说明了如何借助 NetBeans IDE 7.1 Java 编辑器对选定范围的文件进行重构代码操作。

作者：Alyona Stashkova 
播放时长：9:12

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


link:/about/contact_form.html?to=3&subject=Feedback:%20Video%20of%20the%20Inspect%20and%20Refactoring%20Feature%20in%20NetBeans%20IDE%207%20.%201[+请将您的反馈意见发送给我们+]
 
|===


== 相关链接

* link:editor-inspect-transform.html[+在 NetBeans IDE Java 编辑器中通过“检查并转换”重构+]
* link:http://wiki.netbeans.org/Refactoring[+简化重构+]
