类的实例化

代码实现

编写一个Student类,包含name、gender、age、id、score属性,分别为String、String、int、int、double类型。
类中声明一个say方法,返回String类型,方法返回信息中包含所有属性值。
在另一个StudentTest类中的main方法中,创建Student对象,并访问say方法和所有属性,并将调用结果打印输出。

答:

class Student {private String name;private String gender;private int age;private int id;private double score;public Student(String name, String gender, int age, int id, double score) {this.name = name;this.gender = gender;this.age = age;this.id = id;this.score = score;}public String say(){return "名字:" + name + "; 性别:"+ gender + "; 年龄"+ age + "; id:" + id + ";成绩:"+score;}
}
public class StudentTest {public static void main(String[] args) {Student s=new Student("素媛","女",22,520,100);System.out.println(s.say());}
}

编程题1

定义一个丈夫Husband类,有姓名、年龄、妻子属性;

定义一个妻子Wife类,有姓名、年龄、丈夫属性;

丈夫类中有一个getInfo方法,其中,能显示自己的姓名,年龄,和他的妻子的姓名,年龄;

妻子类中有一个getInfo方法,其中,能显示自己的姓名,年龄,和她的丈夫的姓名,年龄;

定义一个测试类,创建妻子和丈夫对象,然后测试。

答:

class Husband{public String name;public int age;public Wife wife;public Husband(String name, int age) {this.name = name;this.age = age;}public void getinfo(){System.out.println("我是丈夫:"+name +" 年龄:"+age+" 妻子:"+wife.name+" 年龄:"+wife.age);}
}class Wife{public String name;public int age;public Husband husband;public Wife(String name, int age) {this.name = name;this.age = age;}public void getinfo(){System.out.println("我是妻子:"+name +" 年龄:"+age+" 丈夫:"+husband.name+" 年龄:"+husband.age);}
}public class TestOfLove {public static void main(String[] args) {Husband hb=new Husband("健哥",18);Wife wf=new Wife("媛姐",19);hb.wife=wf;wf.husband=hb;hb.getinfo();wf.getinfo();}
}

运行结果:

我是丈夫:健哥 年龄:18 妻子:媛姐 年龄:19
我是妻子:媛姐 年龄:19 丈夫:健哥 年龄:18

编程2

定义银行账户类Account,有属性:卡号cid,余额balance,所属用户Customer

银行账户类Account有方法:

(1)getInfo(),返回String类型,返回卡的详细信息

(2)取钱方法withdraw(),参数自行设计,如果取钱成功返回true,失败返回false

(3)存钱方法save(),参数自行设计,如果存钱成功返回true,失败返回false

其中Customer类有姓名、身份证号、联系电话、家庭地址等属性

Customer类有方法say(),返回String类型,返回他的个人信息。

在测试类Bank中创建银行账户类对象和用户类对象,并设置信息,与显示信息

分析:类似前面一题的思路和写法,这里可以跳过。

方法的使用

哪个选项和show()方法重载

class Demo{

void show(int a,int b,float c){}

}

A.void show(int a,float c,int b){}//yes

B,void show(int a,int b,float c){}//一模一样。不可以出现在同一个类中。

C.int show(int a,float c,int b){return a;}//yes。

D.int show(int a,float c){return a;}//yes

答:ACD

方法的声明调用

(1)声明一个圆柱体类型,

(2)声明属性:底边的半径,和高

(3)声明方法:

A:方法的功能:在方法中打印圆柱体的详细信息

圆柱体的底边的半径是xxx,高是xxx,底面积是xxx,体积是xxx。

B:方法的功能:返回底面积

C:方法的功能:返回体积

D:方法的功能:为圆柱体的底边的半径,和高赋值

E:方法的功能:为圆柱体的底边的半径,和高赋值,并返回赋值的结果

如果底边的半径或高为<=0,赋值失败,返回false,否则返回true

(4)并测试

答:

class Cylinder{double radius;//底边半径double height;//高/*A:方法的功能:在方法中打印圆柱体的详细信息圆柱体的底边的半径是xxx,高是xxx,底面积是xxx,体积是xxx。*/void printDetails(){//double area = Math.PI * radius * radius;//底面积//double volume = area * height;//体积//System.out.println("圆柱体的底边的半径是" + radius +" ,高是" + height + ",底面积是"+ area +",体积是"+volume +"。");//调用本类的方法System.out.println("圆柱体的底边的半径是" + radius +" ,高是" + height + ",底面积是"+ getArea() +",体积是"+getVolume() +"。");}//B:方法的功能:返回底面积double getArea(){double area = Math.PI * radius * radius;//底面积return area;}//C:方法的功能:返回体积double getVolume(){//double area = Math.PI * radius * radius;//底面积//double volume = area * height;//体积//return volume;double volume = getArea() * height;//体积return volume;}//D:方法的功能:为圆柱体的底边的半径,和高赋值void setValue(double r, double h){radius = r;height = h;}/*E:方法的功能:为圆柱体的底边的半径,和高赋值,并返回赋值的结果如果底边的半径或高为<=0,赋值失败,返回false,否则返回true*/boolean setRadiusAndHeight(double r, double h){if(r<=0 || h<=0){return false;}//radius = r;//height = h;setValue(r,h);return true;}}class TestMethodExer{public static void main(String[] args){//1、创建对象Cylinder c = new Cylinder();//c.radius = 2.0;//c.height = 2;c.setValue(2.0,2);c.printDetails();System.out.println("底面积: " + c.getArea());System.out.println("体积: " + c.getVolume());boolean flag = c.setRadiusAndHeight(3.0, 5);if(!flag){// 如果flag = false, !flag结果就是true,条件成立System.out.println("赋值失败");}else{c.printDetails();}}
}

运行结果:

圆柱体的底边的半径是2.0 ,高是2.0,底面积是12.566370614359172,体积是25.132741228718345。
底面积: 12.566370614359172
体积: 25.132741228718345
圆柱体的底边的半径是3.0 ,高是5.0,底面积是28.274333882308138,体积是141.3716694115407。

方法的重载

方法重载(overload)必须满足________

A. 在不同class中定义的方法     B.在同一类型中定义的方法

C. 方法名必须相同              D.返回类型必须相同

E. 参数一定不同                F.参数可以相同

答:BCE

写出输出结果

class Demo{
public static void main(String[] args){
show(0);
show(1);
}
public static void show(int i){
switch(i){
default:
i+=2;
case 1:
i+=1;
case 4:
i+=8;
case 2:
i+=4;
}
System.out.println("i="+i);
}
}

答:

i=15
i=14

写出输出结果

class Demo{
public static void main(String[] args){
int x = 1;
for(show('a'); show('b') && x<3; show('c')){
show('d');
x++;
}
}
public static boolean show(char ch){
System.out.print(ch);
return true;
}
}
abdcbdcb

写出输出结果

public class Test1 {public static boolean foo(char c) {System.out.print(c);return true;}public static void main(String[] args) {int i = 0;for (foo('A'); foo('B') && (i < 2); foo('C')) {i++;// 1 2foo('D');}}
}
ABDCBDCB

面向对象性

面向对象三大特征的说明

答:面向对象有三大特点:封装、继承、多态。(如果要回答四个,可加上 抽象性 这一特点)
1.继承性:
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
2.封装性:
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
3. 多态性:
多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
4.抽象性:
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。

作用域public,private,protected,以及默认不写时的区别

找错

public class Something {void doSomething () {private String s = "";int l = s.length();}
}
有错吗?
答案: 错。局部变量前不能放置任何访问修饰符 (private,public,和protected)。

Java的内存管理之垃圾回收(了解)

分配:由JVM自动为其分配相应的内存空间
释放:由JVM提供垃圾回收机制自动的释放内存空间
垃圾回收机制(GC:Garbage Collection):将垃圾对象所占用的堆内存进行回收。Java的垃圾回收机制是JVM提供的能力,由单独的系统级垃圾回收线程在空闲时间以不定时的方式动态回收。
垃圾对象:不再被任何引用指向的对象。

面试题:

问:在程序中是否可以通知垃圾回收机制过来回收垃圾?

能,通过调用System.gc();或Runtime.getRuntime().gc();

再问:调用了System.gc();或Runtime.getRuntime().gc();后是立刻执行垃圾回收吗?

不是,该调用并不会立刻启动垃圾回收机制开始回收,但会加快垃圾回收机制的运行。
public class TestGC{public static void main(String[] args)throws Exception{for(int i=0; i<10; i++){MyClass m = new MyClass();//这里本次循环完,本次创建的对象就成为垃圾了System.out.println("创建第" + (i+1) + "的对象:" + m);}//通知垃圾回收机制来收集垃圾System.gc();//为了延缓程序结束for(int i=0; i<10; i++){Thread.sleep(1);System.out.println("程序在继续....");}}
}
class MyClass{//这个方法是垃圾回收机制在回收它的对象时,自动调用,理解成对象留临终遗言的方法public void finalize(){System.out.println("轻轻的我走了.....");}
}

构造器

构造器Constructor是否可被override?

答:构造器Constructor不能被继承,因此不能重写Override,但可以被重载Overload

编程创建一个Box类,在其中定义三个变量表示一个立方体的长、宽和高,定义一个方法求立方体的体积。创建一个对象,求给定尺寸的立方体的体积。

(提供无参的构造器和一个有参的构造器)

pass

定义一个圆类型

提供显示圆周长功能的方法

提供显示圆面积的方法

提供无参的构造器和一个有参的构造器

pass

设计一个Dog类,有名字、颜色和年龄属性,定义构造器初始化这些属性,定义输出方法show()显示其信息。

提供无参的构造器和一个有参的构造器

pass

定义一个类,用于描述坐标点

(1)具有计算当前点到原点距离的功能

(2)求到任意一点(m,n)的距离

(3)求到任意一点(Point p)的距离

(4)具有坐标点显示功能,显示格式(x,y)

(5)提供无参的构造器和一个有参的构造器

答:

public class Point {public int X;public int Y;public Point() {}public Point(int x, int y) {X = x;Y = y;}public double  OXY(){return Math.sqrt(X*X+Y*Y);}public double AnyXY(int x,int y){return Math.sqrt((X-x)*(X-x)+(Y-y)*(Y-y));}public double PXY(Point P){return Math.sqrt((P.X-X)*(P.X-X)+(P.Y-Y)*(P.Y-Y));}public static void main(String[] args) {Point P=new Point(1,1);Point P1=new Point(3,3);System.out.println("P与原点的距离:"+P.OXY());System.out.println("P到(2,2)的距离"+P.AnyXY(2,2));System.out.println("P到P1的距离"+P.PXY(P1));}
}

运行结果:

P与原点的距离:1.4142135623730951
P到(2,2)的距离1.4142135623730951
P到P1的距离2.8284271247461903

写一个人的类

属性:名字,性别,年龄;提供无参的构造器和一个有参的构造器

方法:(1)自我介绍的方法(2)吃饭的方法

创建一个对象“张三”

pass

写一个汽车类:

属性:品牌;车长;颜色;价格;

创建五个对象:“捷达”,“宝马”,“劳斯莱斯”,“科鲁兹”,“迈锐宝”

提供无参的构造器和一个有参的构造器

pass

写一个课程类:

属性:课程名;学时;任课老师;

创建五个对象:“c语言”,“java编程”,“php网络编程”,“c++”,“数据结构”

提供无参的构造器和一个有参的构造器

pass

以下程序的运行结果是:

public class Test1 {public static void main(String[] args) {new A(new B());}
}class A{public A(){System.out.println("A");}public A(B b){this();System.out.println("AB");}
}
class B{public B(){System.out.println("B");}
}
答案:
B
A
AB

关于参数传递

练习一

写出结果。

public class Test{public static void leftshift(int i, int j){i+=j;}public static void main(String args[]){int i = 4, j = 2;leftshift(i, j);System.out.println(i);}
}
答案:4  形参

练习二

写出结果。

public class Demo{
public static void main(String[] args){
int[] a=new int[1];
modify(a);
System.out.println(a[0]); //
}
public static void modify(int[] a){
a[0]++;
}
} 
答案: 1 实参

练习三

写出结果。

public class TestA {
int i ;
void change(int i){
i++;
System.out.println(i);
}
void change1(TestA t){
t.i++;
System.out.println(t.i);
}
public static void main(String[] args) {
TestA ta = new TestA();
System.out.println(ta.i); //
ta.change(ta.i);//
System.out.println(ta.i); //
ta.change1(ta);  //
System.out.println(ta.i);//
}
}
答案:
0
1
0
1
1

练习四

写出结果

class Value{int i = 15;
}
class Test{
public static void main(String argv[]) {
Test t = new Test();
t.first();
}public void first() {
int i = 5;
Value v = new Value();
v.i = 25;
second(v, i);
System.out.println(v.i);
}public void second(Value v, int i) {
i = 0;
v.i = 20;
Value val = new Value();
v = val;
System.out.print(v.i + " " + i);
}
}A.15 0 20
B.15 0 15
C.20 0 20
D.0 15 20
答案:Av = val;//局部形参v的引用指向原来传入的v,改为指向val,原来传入的v不变

练习五

1. public class Test {
2. int x= 12;
3. public void method(int x) {
4. x+=x;
5. System.out.println(x);
6. }
7. }
Given:
34. Test t = new Test();
35. t.method(5);
What is the output from line 5 of the Test class?
A. 5
B. 10
C. 12
D. 17
E. 24
答案: B优先使用局部变量的X

练习六

import java.util.Arrays;public class PassValueExer2{public static void main(String[] args){int[] array = {3,2,5,1,7};//调用sort方法,实现从大到小排序//在此处补充代码....//显示结果System.out.println("排序后的结果是:" + Arrays.toString(array));}//要求使用冒泡排序完成public void sort(//形参?){}
}

答:

import java.util.Arrays;public class PassValueExer2{public static void main(String[] args){int[] array = {3,2,5,1,7};//调用sort方法,实现从大到小排序//在此处补充代码PassValueExer2.sort(array);//显示结果System.out.println("排序后的结果是:" + Arrays.toString(array));}//要求使用冒泡排序完成public static  void sort(int[] a){int pos=0;int i=a.length-1;while(i>0){for (int j=0;j<i;j++){if (a[j]<a[j+1]){int t=a[j];a[j]=a[j+1];a[j+1]=t;pos=j;}}i=pos;}}
}
排序后的结果是:[7, 5, 3, 2, 1]

以下代码的执行结果是什么

public class PassValueExer2{public static void main(String[] args) {int i = 0;change(i);i = i++;System.out.println("i = " + i);}public static void change(int i){i++;}
}
答案:0典型的i=i++的问题 ,可上网查阅资料,我理解的是右边的i先赋值给左边的i,然后右边的i再自加存到隐身临时变量里,自加后的值并没有作用于左边的i,所以左边的i为右边初始的i。

以下程序的运行结果:

public static void main(String[] args) {String str = new String("world");char[] ch = new char[]{'h','e','l','l','o'};change(str,ch);System.out.println(str);System.out.println(String.valueOf(ch));}public static void change(String str, char[] arr){str = "change";arr[0] = 'a';arr[1] = 'b';arr[2] = 'c';arr[3] = 'd';arr[4] = 'e';}

答:

world
abcde

以下代码的运行结果是?

public class Test {int a;int b;public void f(){a = 0;b = 0;int[] c = {0};g(b,c);System.out.println(a + " " + b + " " + c[0]);}public void g(int b, int[] c){//a1 b0 c1a = 1;b = 1;c[0] = 1;}public static void main(String[] args) {Test t = new Test();t.f();}
}
1 0 1

简答

当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

答:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的

补足compare函数内的代码,不许添加其他函数。

class Circle {private double radius;public Circle(double r) {radius = r;}public Circle compare(Circle cir) {// 程序代码/** if(this.radius>cir.radius) return this; return cir;*/// return (this.radius>cir.radius)?this: cir;}
}class TC {public static void main(String[] args) {Circle cir1 = new Circle(1.0);Circle cir2 = new Circle(2.0);Circle cir;cir = cir1.compare(cir2);if (cir1 == cir)System.out.println("圆1的半径比较大");elseSystem.out.println("圆2的半径比较大");}
}

答:

class Circle {private double radius;public Circle(double r) {radius = r;}public Circle compare(Circle cir) {// 程序代码/** if(this.radius>cir.radius) return this; return cir;*/// return (this.radius>cir.radius)?this: cir;return  this.radius >cir.radius ? this : cir;}
}public  class TC {public static void main(String[] args) {Circle cir1 = new Circle(1.0);Circle cir2 = new Circle(2.0);Circle cir;cir = cir1.compare(cir2);if (cir1 == cir)System.out.println("圆1的半径比较大");elseSystem.out.println("圆2的半径比较大");}
}

面向对象(上) 章节练习题及面试题相关推荐

  1. 面向对象(中) 章节练习题及面试题

    继承性 java类是否可以多继承,怎么实现多继承? 答:java没有多继承,但可以通过接口的形式来达到多继承的目地. 继承练习 定义类A 和类B 如下: class A {int a = 1;doub ...

  2. 面向对象(高级)章节练习题

    //练习题1:输出:9.0 red // 100.0 red public class hello {public static void main(String[] args) {Car C =ne ...

  3. java 练习-多线程 章节练习题及面试题

    java中有几种方法可以实现一个线程(jdk5.0之前)?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 答:有两种实现方法,分别是继承Thread类与实现Runna ...

  4. java 练习--java常用类 章节练习题及面试题

    判断输出结果 public void testString(){String str1 = "尚硅谷";String str2 = "尚硅谷";String s ...

  5. 2019年3月计算机ms二级考试题库,2019年3月全国计算机二级MSOffice章节练习题(2).doc...

    2019年3月全国计算机二级MSOffice章节练习题(2).doc (4页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 1[单选题] ...

  6. C语言 --- 动态内存管理(上)+优化版通讯录+笔试题

    文章目录 前言 一.为什么存在动态内存分配 二.动态内存函数的介绍 2.1.malloc函数+free函数 2.2.calloc函数+free函数 2.3.realloc函数 三.常见的动态内存错误 ...

  7. 未来教育计算机二级收藏的题在哪看,2016年计算机二级office高级应用章节练习题(1)...

    2016年计算机二级office高级应用章节练习题(1) 浏览次数:     时间:2015/12/30 一.选择题 1.在冯·诺依曼型体系结构的计算机中引进两个重要的概念,它们是 A.引入CPU和内 ...

  8. 如何用计算机编程算题,计算机二级Web程序设计章节练习题

    计算机二级Web程序设计章节练习题 二级定位为程序员,考核内容包括公共基础知识和程序设计.所有科目对基础知识作统一要求,使用统一的公共基础知识考试大纲和教程.这是小编提供的计算机二级Web程序设计章节 ...

  9. 2019史上最全java面试题题库大全800题含答案

    2019史上最全java面试题题库大全800题含答案 1. meta标签的作用是什么 2. ReenTrantLock可重入锁(和synchronized的区别)总结 3. Spring中的自动装配有 ...

最新文章

  1. Log4Net的控制台,WinForm,WebApplication使用
  2. 第32题 最长匹配括号
  3. 在电脑上安装python的步骤-python中pygame安装过程(超级详细)
  4. 在 Microsoft Word 文档 中粘贴代码实现语法高亮的方法
  5. Ubuntu安装并使用sogou输入法
  6. 第十七章 我国农业科学技术
  7. mysql表空间被占用,同名表无法创建或导入
  8. 漫画算法:最小栈的实现
  9. java lambda 实现_Java 8 Lambda实现原理分析
  10. 前端面试题vue-element汇总
  11. 人工智能入门,怎么选择脚踏实地的工作岗位?
  12. 阿里巴巴在ITU-T成功立项数据安全相关标准
  13. Java:多线程,线程池,用Executors静态工厂生成常用线程池
  14. vue 鼠标点击事件_点击鼠标,利用VBA代码实现精准控制触发事件的第二方案
  15. Filter过滤器|敏感词汇过滤
  16. 通过UA判断手机的类型
  17. Python24中使用urllib时遇到IOError的正确打开方式
  18. docer-compose
  19. 有一个类似”abbc,d d.eeffgg,59.30ABDFR ”这样的包含大小写字母,数字,空格,逗号和句号的字符串,求各字符的数量。(设计一个一个函数,传入字符串,返回各字符数量的数据)
  20. Niubility (分享一) Flink 在快手实时多维分析场景的应用

热门文章

  1. Directx3D编程框架
  2. 阿里大鱼短信平台使用-Java版
  3. PHP对接阿里大鱼实现短信的发送
  4. JavaWeb-Xml
  5. EDI的国内外发展现状
  6. php MySQL简易模板_php 实现简易模板引擎
  7. Hybris阶段总结(1)何为hybris
  8. SAP 公司间交易简介和配置
  9. html 相册插件,23个超风靡的jQuery相册插件
  10. 二分法总结(超级详细)附带图解