1:类与对象的区别是什么?
一、类的概念:
类是具有相同属性和服务的一组对象的集合。它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分。
二、对象的概念:
对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。从更抽象的角 度来说,对象是问题域或实现域中某些事物的一个抽象,它反映该事物在系统中需要保存的信息和发挥的作用;它是一组属性和有权对这些属性进行操作的一组服务的封装体。客观世界是由对象和对象之间的联系组成的。
三、类与对象的关系:
类与对象的关系就如模具和铸件的关系,类的实例化结果就是对象,而对一类对象的抽象就是类.类描述了一组有相同特性(属性)和相同行为(方法)的对象。
四、类与对象的区别:
1,类是一个抽象的概念,它不存在于现实中的时间/空间里,类只是为所有的对象定义了抽象的属性与行为。就好像“Person(人)”这个类,它虽然可以包含很多个体,但它本身不存在于现实世界上。
2,对象是类的一个具体。它是一个实实在在存在的东西。
3,类是一个静态的概念,类本身不携带任何数据。当没有为类创建任何对象时,类本身不存在于内存空间中。
4,对象是一个动态的概念。每一个对象都存在着有别于其它对象的属于自己的独特的属性和行为。对象的属性可以随着它自己的行为而发生改变。
2:如何定义一个类?类的结构是怎样的?
类的定义
类是一种引用数据类型。类为对象的模板,简单的说就是分类。类是一个模板,它描述一类对象的行为和状态。类的定义包括“成员变量”的定义和“方法”的定义,其中“成员变量”用于描述一类对象共同的数据结构。在Java语言中,类的成员变量的定义可以使用如下语法:
class 类名 {成员变量类型变量名称;………}
类是用class关键字来定义的一种抽象数据类型,类不但定义了抽象数据类型的组成(成员变量),同时还定义了对该类型可以实施的操作(方法),类名的首字母必须大写。
注释:1.java 会给成员变量一个初始值,但是不会给局部变量初始值,所以局部变量应赋初始值。2.局部变量与成员变量名称相同时,有限选取局部变量的值。
定义的思路
每个人的学习方法不同对于定义一个类的思路也可能会有所不同。一般来说我会将定义一个类分为两部分,即属性和方法(也可以说是成员变量和成员方法)。
详细的说就是:
1.先定义一个类;
2.定义类的属性(成员变量);
3.定义类的方法;
4.定义类的局部变量。
一个类中通常都包含数据与函数两种类型的元素,我们一般把它叫作属性和成员函数,在很多时候我们也把成员函数称为方法(method)。将数据与代码通过类紧密结合在一起,就形成了现在非常流行的封装的概念。自然,类的定义也要包括以上两个部分。
3:定义一个类时所使用的修饰符有哪几个?每个修饰符的作用是什么?是否可以混用?
1 private 只有对包.NET中的应用程序或库才能访问。
2 public 不限制对类的访问。
3 protected 只可以被本类和其继承子类访问;
4 internal 只可以被本集合(Assembly)内所有的类存取。集合是C#语言中类被组合后的逻辑单位和物理单位,其编译后的文件扩展名往往是“.DLL”或“.EXE”。 仅为同项目(这里的项目是只单独的项目,而不是整个解决方案)调用。
5 protected internal 唯一的一种组合限制修饰符,它只可以被本组合体内所有的类和这些类的继承子类所存取。(注意:提供的不是internal且protected访问方式)
6 abstract 抽象类,表示该类只能作为父类被用于继承,而不能进行对象实例化。抽象类可以包含抽象的成员,但这并非必须。abstract不能和new同时用。
7 sealed 密封类,阻止该类被继承。同时对一个类作abstract和sealed的修饰是没有意义的,也是被禁止的。
8 new 修饰符只能用于嵌套的类,表示隐藏了由基类继承来的、与基类中同名的成员和方法。
可以混用
4:成员变量的修饰符有哪些?各修饰符的功能是什么?是否可以混用?
1、权限修饰符:private、默认(什么都不写)、protected、public。
2、static:被static修饰的成员变量被该类所有对象共享。
3、final:final修饰的基本数据类型的变量可以看作是常量,赋值后不可改变;final修饰的引用数据类型变量的引用内存地址不能改变。
5:成员方法的修饰符有哪些?各修饰符的功能是什么?是否可以混用?
public
被 public 修饰的成员变量和方法可以在任何类中都能被访问到。
被 public 修饰的类,在一个 java 源文件中只能有一个类被声明为 public ,而且一旦有一个类为 public ,那这个 java 源文件的文件名就必须要和这个被 public 所修饰的类的类名相同,否则编译不能通过。
protected
被 protected 修饰的成员会被位于同一 package 中的所有类访问到,也能被该类的所有子类继承下来。
friendly
默认,缺省的。在成员的前面不写访问修饰符的时候,默认就是友好的。
同一package中的所有类都能访问。
被 friendly 所修饰的成员只能被该类所在同一个 package 中的子类所继承下来。
private
私有的。只能在当前类中被访问到。
6:成员变量与局部变量的区别?
1、在类中的位置不同
成员变量:在类中方法外面
局部变量:在方法或者代码块中,或者方法的声明上(即在参数列表中)
2、在内存中的位置不同,可以看看Java程序内存的简单分析
成员变量:在堆中(方法区中的静态区)
局部变量:在栈中
3、生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用或者代码块的执行而存在,随着方法的调用完毕或者代码块的执行完毕而消失
4、初始值
成员变量:有默认初始值
局部变量:没有默认初始值,使用之前需要赋值,否则编译器会报错(The local variable xxx may not have been initialized)
7:创建一个对象使用什么运算符?对象实体与对象的引用有何不同?
new 运算符,new 创建对象实例(对象实例在堆内存中),对象引用指向对象实例(对象引用存放在栈内存中)。一个对象引用可以指向 0 个或 1 个对象(一根绳子可以不系气球,也可以系一个气球);一个对象可以有 n 个引用指向它(可以用 n 条绳子系住一个气球)。
8:对象的成员如何表示?
面向对象的可重复利用,有一种很好的方法,往往被大家忽略。就是成员对象。在thinking in java中进行了很好的阐述。
最简单地复用某个类的方式就是直接使用该类的一个对象,此外也可以将那个类的一个对象置于某个新类中。我们称其为“创建一个成员对象”。新的类可以由任意数量、任意类型的其他对象以任意可以实现新的类中想要的功能的方式所组成。——Thinking in Java
所谓成员对象就是A类的成员变量的类型是B类,那么A类的穿越变量的属性就是B类的属性,那么该成员可以调用与之对应类型的B类的方法。
我们想要通过程序来描述书,那么我们可以将之定义为书类,而书中我们大致也分为电子书和纸质书两种,显然,将他们都放在书类来写,程序必定冗余繁杂,并且后期维护困难,这时就是“成员对象”大显身手的时候了。我们不妨将电子书和纸质书分别单独归位一类,最后用书类来个大一统。具体代码如图
9:在成员变量或成员方法前加上关键字this表示什么含义?
一、this关键字主要有三个应用:
(1)this调用本类中的属性,也就是类中的成员变量;
(2)this调用本类中的其他方法;
(3)this调用本类中的其他构造方法,调用时要放在构造方法的首行。
Public Class Student {
String name; //定义一个成员变量name
private void SetName(String name) { //定义一个参数(局部变量)name
this.name=name; //将局部变量的值传递给成员变量
}
}
10:什么时方法的返回值?返回值在类的方法里作用是什么?
方法的返回值是某个方法体中的代码执行后产生的结果。
返回值的作用是接受结果,使得它可以用于其它操作。
11:在方法调用中,使用对象作为参数进行参数进行传递时,是”传值“还是”传址“?对象作为参数起到什么作用?
pdd:所谓java只有按值传递:基本类型 值传递;引用类型,地址值传递,所以叫值传递。
当主函数的变量,对象(主本)传递到副函数时,传递的变量、对象(方法中的形参)其实都是副本,而副本的改变不会影响主 本。
基本类型:传递的是值的拷贝,也就是说传递后就互不相关了,也就是说,不过副函数的副本如何变化,主本永远不会被影响。
引用类型:传递的是引用地址值,有可能会被影响。
string:具有不可变。是特殊的引用类型,其作用跟基本类型一样,传递后不相关
12:什么叫匿名对象?一般什么情况下使用匿名对象?
匿名对象就是没有名字的对象:
Student stu = new Student();//这个stu就是对象,名字就是stu
new Student();//这个也是一个对象,但是没有名字
gc回收回收堆内存中对象的机制是,栈中没有变量指向该对象,那么该对象就是垃圾,可以被回收。匿名对象如下方式被创建:
new Student().show(); 这个匿名对象用完了之后就变成垃圾了,因为这个对象没有被栈内存中的变量指向,所有会被
gc回收。