类的定义:修饰符,class,类名,extends,逗号分隔的implements,类体{}
规范的类名:首字母要大写,以后每个单词首字母都大写

字段的定义:修饰符,类型,字段名
按照封装的思想,字段通常定义为private,然后提供public方法来访问和修改他们

方法的定义:修饰符,返回类型,方法名,(参数列表,逗号分隔,或为空),异常声明throws,方法体{}
方法的signature(签名)包括方法名称,参数数量,类型,顺序
所以只是返回类型不同的两个方法是通不过编译的
规范的方法名:首单词为动词,首字母小写,以后每个单词为动词或形容词或名词,首字母大写

构造方法用于生成对象时做一些默认的处理,但名字是类名,而且没有返回类型
构造可以有多个,注意方法的签名是区分方法的唯一途径
可以不写,编译器自动提供默认构造,没有参数,并会调用父类的无参构造
也可以手动编写,调用自己的其他构造或父类其他构造
不调用构造是不可能生成对象的,如果最上面的父类也没有构造,编译会报错,当然Object是有的

Parameters通常指方法声明的形参,Arguments通常指实际传入方法的实参
Java不允许把方法名作为参数传入另一个方法,但可以使用lambda表达式

可以指定一个未知数量的参数列表,但要是同一类型,会接受0到n个,而且只能是参数列表的最后几个参数

public PrintStream printf(String format, Object... args)

会用数组方式传入,实际也可以直接传入一个数组

方法声明的参数名可以跟类的字段重名,会覆盖掉
在块中的局部变量也是这样,比如循环体中
要访问那个字段要用全名,this.XX

方法的参数如果传递的是原始类型,则始终是按值传递的

形参的修改不会影响实参,方法返回时所有形参值不被保留
如果传递的是对象类型,其实也是按值传递的,但传递的是一个引用,一个地址

对这个地址上的对象进行操作会引起实际对象的更改

public void moveCircle(Circle circle, int deltaX, int deltaY) {
// 会更改传入对象,因为基于这个地址操作
circle.setX(circle.getX() + deltaX);
circle.setY(circle.getY() + deltaY); // 不会更改,只是改变了一个地址
circle = new Circle(0, 0);
}

生成对象:一般说对象的生成就是指对象的实例化
new的作用:为这个对象分配内存空间,返回这个对象的地址,当然也要调用类的构造从而初始化这个对象
new后面需要跟一个参数,指明哪个类,以及调用哪个构造

Rectangle rectTwo = new Rectangle(50, 100);

并不一定要赋给一个变量,可以new完直接使用的

int height = new Rectangle().height;

在类中直接访问实例变量是报错的,因为他们只存在于某个对象中

JRE检测到某个对象不会再被调用时,会删除这个对象,释放所占的内存资源,这个过程就叫garbage collection
变量在作用域外面时会丢失,将成为垃圾搜集的目标
也可以手动置这个变量为null
garbage collector(垃圾搜集器)来自动完成这个工作

方法返回的方式:

执行完了所有语句,自动返回

遇到return

抛出了异常

 

方法的返回类型可以是某个类或者接口,这时候返回的那个必须是他的对象或者子类对象或者接口的实现类

这称为covariant return type

 

在方法或构造方法中,可以使用this,代表当前对象,也就是这个方法到底是哪个对象调用的

不能在静态方法中使用,因为静态方法不需要任何对象就可调用

可以在某个构造中用this(..)调用其他构造,但要在首行

 

类只有两种修饰符,public和默认,类成员的修饰符则可以有四种

protected表明除了本包可访问,别的包的子类也可访问

通常来说不要让所有的都是public的,除了某些常量

除了某个确定的目的,尽量缩小变量的访问权限(封装思想)

 

访问类变量推荐用类名+变量名,用对象名也行,但可读性较差

 

方法也可以是static的,无需实例化就可调用

方法也可以使final的,表示不能被子类覆盖

在对象实例化,初始化时只能调用final方法,否则编译报错

 

 常量在运行时是无法更改的,更改会编译报错

static final double PI = 3.141592653589793;

 

如果是原始类型或String,编译器会在编译时把每个出现的地方都用这个值替代,compile-time constant.(编译时常量)

如果更改,只能重新编译一次

如果这个常量是个对象,那只是这个地址不可修改,对象是可以任意修改的,这样通常没有意义

 

static初始化块,会在类的实例化时只运行一次,通常用来初始化字段

可以位于类体中任何位置,也可以有多个,会按顺序执行

 

如果多个构造都要进行同样的实例变量初始化,可以放到 非static初始化块 里

编译器会在每个构造里都拷贝一份

 也可以写一个final方法用来初始化,然后在各个构造里调用,这个方法不会被覆盖,是可信赖的

 

可以用assert(true);来做一个检测,运行要用java -ea Test

 

Classes and Objects :类和对象(1)的更多相关文章

  1. Classes and Objects :类和对象(2)

    类内部可以有另一个类,也就是内部类,如果带static则为静态内部类静态内部类当然不能直接访问实例变量内部类修饰符可以有四种,而外部类只有两种 内部类的意义:这个内部类只适用于这个外部类因为外部类的某 ...

  2. DELPHI学习---类和对象(五篇)

    Classes and objects(类和对象) 类(或者类类型)定义了一个结构,它包括字段(也称为域).方法和属性:类的实例叫做对象:类的字段.方法和属性被称为它的部件(components)或成 ...

  3. 知乎上看到的关于类.class,对象.getClass

    public class TestDemo { //测试 @Test public void fun01() { TestDemo q=new TestDemo(); A a = new A(); q ...

  4. 危险代码:如何使用Unsafe操作内存中的Java类和对象

    危险代码:如何使用Unsafe操作内存中的Java类和对象—Part1 危险代码:如何使用Unsafe操作内存中的Java类和对象—Part2 危险代码:如何使用Unsafe操作内存中的Java类和对 ...

  5. Reloading Java Classes 101: Objects, Classes and ClassLoaders Translation

    The original link: http://zeroturnaround.com/rebellabs/reloading-objects-classes-classloaders/ A Bir ...

  6. Classes as objects

    Before understanding metaclasses, you need to master classes in Python. And Python has a very peculi ...

  7. 13_Python的面向对象编程-类class,对象object,实例instance

    1.面向对象概述 1.类是用来描述对象的工具,把拥有相同属性和行为的对象分为一组     2.对象是由类实例化出来的一个具体的对象         属性: 对象拥有的名词,用变量表示         ...

  8. Objective-C Runtime 运行时之一:类与对象

    Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一 ...

  9. day24:面向对象设计与面向对象编程、类和对象

    一.三大编程范式: 面向过程: 面向函数: 面向对象: 二.程序的进化论: 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 2.从上述的指令中提取重复的代码块或逻辑,组织到一起(比方说,你定 ...

随机推荐

  1. photoshop:多边形选项

    你会制作圆滑的五角星吗? 以五边形为例:

  2. C++:类的组合

    在类中定义的数据成员一般都是基本数据类型或服复合数据类型.但是还可以根据需要使用 其他类的对象作为正在声明的数据成员.复杂的对象还可以有比较简单的对象一某种方式组合 而成,复杂对象和组成它的简单对象之 ...

  3. MySQL 5.7 SYS scheme解析

    sys 库是MySQL 5.7其中的一个系统库,里面有很多很好用的跟性能相关的视图.函数和存储过程, 增强MySQL的易用性 例如:哪些语句使用了临时表,哪个用户请求了最多的io,哪个线程占用了最多的 ...

  4. Android真机调试的时候logcat中无法输出调试信息的解决办法

    真机调试不输出日志到logcat的原因是手机厂商默认关闭了调试打印的功能,通过以下方法开启此方法. 下面以华为P6手机为例进行操作: 1.在拨号界面输入:*#*#2846579#*#* 进入测试菜单界 ...

  5. C#路径/文件/目录/I/O常见操作汇总<转载>

    文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供 ...

  6. bzoj2437

    会做jsoi那道game,这题就非常简单了吧 我们考虑空格的移动,显然,初始与空格位置距离为奇数的黑棋和距离为偶数的白棋并没有什么用, 空格不会移到那,我们直接把他们当作障碍,其他点我们当作可移动区域 ...

  7. Qt之运行一个实例进程

    简述 发布程序的时候,我们往往会遇到这种情况: 只需要用户运行一个实例进程 用户可以同时运行多个实例进程 一个实例进程的软件有很多,例如:360.酷狗- 多个实例进程的软件也很多,例如:Visual ...

  8. UVa 11889 (GCD) Benefit

    好吧,被大白书上的入门题给卡了.=_=|| 已知LCM(A, B) = C,已知A和C,求最小的B 一开始我想当然地以为B = C / A,后来发现这时候的B不一定满足gcd(A, B) = 1 A要 ...

  9. codevs 1106 篝火晚会

    不要问我为什么WA这么多次... #include<iostream> #include<cstdio> #include<cstring> #include< ...

  10. python - 回溯继承树 - 自己实现

    # -*- coding: utf-8 -*- class test(object): pass class test1(test): pass class test2(test1): pass pr ...