惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Engineering at Meta
Engineering at Meta
博客园_首页
H
Help Net Security
WordPress大学
WordPress大学
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
B
Blog
I
InfoQ
SecWiki News
SecWiki News
T
Tailwind CSS Blog
Spread Privacy
Spread Privacy
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
Vulnerabilities – Threatpost
N
Netflix TechBlog - Medium
P
Palo Alto Networks Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Vercel News
Vercel News
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
K
Kaspersky official blog
M
MIT News - Artificial intelligence
S
Schneier on Security
T
Threat Research - Cisco Blogs
F
Fortinet All Blogs
Cyberwarzone
Cyberwarzone
Scott Helme
Scott Helme
aimingoo的专栏
aimingoo的专栏
Martin Fowler
Martin Fowler
MyScale Blog
MyScale Blog
The Cloudflare Blog
Recent Announcements
Recent Announcements
Security Latest
Security Latest
G
GRAHAM CLULEY
IT之家
IT之家
Y
Y Combinator Blog
The Last Watchdog
The Last Watchdog
腾讯CDC
Google DeepMind News
Google DeepMind News
V
V2EX
S
Securelist
TaoSecurity Blog
TaoSecurity Blog
B
Blog RSS Feed
S
SegmentFault 最新的问题
博客园 - 叶小钗
P
Proofpoint News Feed
云风的 BLOG
云风的 BLOG
Project Zero
Project Zero
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
F
Full Disclosure

博客园 - 空气

没有不可能的事情 迅景如梭,旧游似梦,烟水程何限 [转]一些web开发中常用的、做成cs文件的js代码 数类 MBTI职业性格测试 Which Programming Lanuguage Are You? 如何解释内存中的内容 好久没来了。。。 C/C++中的内存管理 经典正则表达式 二叉树的显示 软件工厂的考试题目程序 第六章: 字符串 测试-通过Word 2007发布Blog 第五章: 数组 第四章: 从 autoboxing 和 unboxing 认识对象 第三章: 语法入门 1. 让自己习惯C++ 0. 序
第七章: 封装 - 空气 - 博客园
空气 · 2007-01-28 · via 博客园 - 空气

这一章是要读者了解如何使用 Java 来描述对象的特性,对对象信息进行封装(Encapsulation), 也就是定义类(Class).

书上并没有"封装"的概念,在另一个地方找来:
封装:
      将成员变量声明为私有的(private),再提供一个或多个公有(public)方法实现对该成员变量的访问和修改。
封装的目的:
      1. 隐藏类的实现细节;
      2.让使用者只能通过指定的方法访问数据,可以方便加入控制逻辑,限制不合理的操作;
      3.便于修改,增强代码可维护性;
      4.可进行数据检查。
类(Class):
      类是对一组具有相同属性、操作、关系和语义的对象的描述。
对象(Object):
      对象封装了状态和行为的具有良好定义界面和身份的离散实体;即对象实例。
对象是类的实例,类描述了存在的可能对象集。

习惯在构造函数中利用 this 来避免代码重复

public class Ball
{
    
private String name;
    
    
public Ball()
    
{
        
this("No name");
    }

    
    
public Ball(String n)
    
{
        
this.name = n;
    }

}


关于static

和C#相同,.静态成员可以使用类名加上"."操作符来存取.
而和C#不同的是,在Java中,也可以在声明对象之后,通过对象名称加上"."操作符来存取静态域成员.

在 Java 的静态方法中不允许使用非静态成员

public class StaticDemo
{
    
// 若将此处的 static 去掉,则不能在 main方法中被调用
    public static void sayHello()
    
{
        System.out.println(
"Hello!");
    }

    
    
public static void main(String[] args)
    
{
        sayHello();
    }

}

编译器在处理重载方法,装箱问题和不定长参数时,会依下面的顺序来寻找合适的方法:
      寻找在还没有装箱动作前就可以符合参数个数与类型的方法
      尝试装箱动作后可以符合参数个数与类型的方法
      尝试没有不定长度参数并可以符合的方法
      编译器找不到合适的方法,报告错误.

不定长参数
在声明参数行时在类型关键词后加上 ...
需要注意的是:
      1. 不定长参数只能在 J2SE5.0 中使用
      2. 无法使用两个或以上的不定长参数
      3. 不定长参数只能设定在众多参数的最后一个

public class MathTool
{
    
// 这里 nums 实际上是一个数组 
    public static int sum(int  nums)
    
{
        
int sum = 0;
        
// 注意这里for的用法, 类似于C#中的foreach
        for (int num : nums)
        
{
            sum 
+= num;            
        }

        
return sum;
    }

}

垃圾收集
Java 中并没有析构函数,但有 finalize() 方法
如果确定不再使用某个对象,可以指定为null
可以使用 System.gc() 建议程序进行垃圾收集.

public class GcTest
{
    
private String name;
    
    
public GcTest(String n)
    
{
        name 
= n;
        System.out.println(name 
+ "建立");
    }

    
    
// 对象回收前执行
    
// 该方法重载了 Object.finzlize()
    protected void finalize()
    
{
        System.out.println(name 
+ "被回收");
    }

}


public class UseGC 
{
    
public static void main(String[] args) 
    
{
        System.out.println(
"请按 Ctrl+C 终止程序");
        
        GcTest obj1 
= new GcTest("object1");
        GcTest obj2 
= new GcTest("object2");
        GcTest obj3 
= new GcTest("object3");
        
        
// 命令名称不参考至对象
        obj1 = null;
        obj2 
= null;
        obj3 
= null;
        
        
// 建议回收对象
        System.gc();
        
        
// 让垃圾收集在程序结束前有机会执行
        while(true);

    }


}