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

推荐订阅源

W
WeLiveSecurity
Jina AI
Jina AI
博客园 - 司徒正美
雷峰网
雷峰网
宝玉的分享
宝玉的分享
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园_首页
WordPress大学
WordPress大学
Google DeepMind News
Google DeepMind News
GbyAI
GbyAI
MyScale Blog
MyScale Blog
Apple Machine Learning Research
Apple Machine Learning Research
美团技术团队
I
InfoQ
博客园 - Franky
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园 - 叶小钗
阮一峰的网络日志
阮一峰的网络日志
Cyberwarzone
Cyberwarzone
C
CXSECURITY Database RSS Feed - CXSecurity.com
S
Schneier on Security
P
Privacy & Cybersecurity Law Blog
T
Threatpost
Cloudbric
Cloudbric
D
Docker
M
MIT News - Artificial intelligence
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Vercel News
Vercel News
Martin Fowler
Martin Fowler
J
Java Code Geeks
AWS News Blog
AWS News Blog
The Cloudflare Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
L
Lohrmann on Cybersecurity
Hacker News: Ask HN
Hacker News: Ask HN
Last Week in AI
Last Week in AI
S
Security @ Cisco Blogs
Help Net Security
Help Net Security
C
Cisco Blogs
V
V2EX
博客园 - 【当耐特】
I
Intezer
爱范儿
爱范儿
F
Fortinet All Blogs
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
P
Privacy International News Feed
IT之家
IT之家
L
LINUX DO - 最新话题
B
Blog RSS Feed
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO

博客园 - 空气

没有不可能的事情 迅景如梭,旧游似梦,烟水程何限 [转]一些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);

    }


}