1.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明。
封装性是面向对象的第一大特性,所谓的封装性就是指对外部不可见,也就是说把代码封装到大括号中,只能访问本身内部的数据,外边的东西访问不了.
实现封装性的方法
属性封装:private 属性类型 属性名;
方法封装:private 方法返回值 方法名称(参数){}
例如java
class Data { private String year; private String month; private String day; }
2.阅读下面程序,分析是否能编译经过?若是不能,说明缘由。
(1)git
class A{ private int secret = 5; } public class Test{ public static void main(String args[]){ A a = new A(); System.out.println(a.secret++); } }
不能编译经过,secret被封装,不能被类外访问。
(2)数据库
public class Test{ int x = 50; static int y = 200; public static void method(){ System.out.println(x+y); } public static void main(String args[]){ Test.method(); } }
不能经过编译,static声明的方法不能调用非static类型声明的属性
3 . 使用类的静态变量和构造方法,能够跟踪某个类建立的对象个数。声明一个图书类,数据成员为编号,书名,书价,并拥有静态数据成员册数记录图书的总数。图书编号从1000开始,每产生一个对象,则编号自动递增(利用静态变量和构造方法实现)。下面给出了测试类代码和Book类的部分代码,将代码补充完整。设计模式
class Book{ private static int bookId; private String bookName; private double price; // 声明静态变量 static int totalBook; //定义静态代码块对静态变量初始化 static { totalBook=0; bookId=1000; } //构造方法 public Book(String bookName,double price){ this.bookName=bookName; this.price=price; totalBook++; } public String getBookName() { return bookName; } public void setBookName(String bookName) { this.bookName = bookName; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } //定义方法求图书总册数 public static int totalBook() { return totalBook; } //重写toString方法 public String toString(){ return "编号:"+Book.bookId+++" 书名:"+this.bookName+" 价钱"+this.price ; } } public class Test2{ public static void main(String args[]){ Book[] books = {new Book("c语言程序设计",29.3), new Book("数据库原理",30), new Book("Java学习笔记",68)}; System.out.println("图书总数为:"+ Book.totalBook()); for(Book book:books){ System.out.println(book.toString()); } } }
4.什么是单例设计模式?它具备什么特色?用单例设计模式设计一个太阳类Sun。
单例设计模式师确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。
特色:
1,一个类只能有一个实例
2,本身建立这个实例
3,整个系统都要使用这个实例
太阳类数组
public class Sun { private Sun() { } private static final Sun single = new Sun(); // 静态工厂方法 public static Sun getInstance() { return single; } }
5.理解Java参数传递机制,阅读下面的程序,运行结果是什么?说明理由。工具
public class Test { String str = new String("你好 "); char[] ch = { 'w','o','l','l','d' }; public static void main(String args[]) { Test test = new Test(); test.change(test.str, test.ch); System.out.print(test.str); System.out.print(test.ch); } public void change(String str, char ch[]) { str = "hello"; ch[0] = 'W'; } }
运行结果:你好 Wolld
理由:字符串的内容一旦声明是不可改变的,改变的只是其内存地址的指向,只是在栈内存中多了一个指针,改变的是堆内存的指向。而字符数组的内容能够改变。学习
1.日期类测试
2.计算工具this
实验问题分析:
问题1:不会随机产生大于1的float型的数
解决方案:先随机产生一个0到100之间的int型的数,再乘以0.1。.net
代码行数(新增/累积) | 学习时间(新增/累积) | 本周学习内容 | |
---|---|---|---|
目标 | 5000行 | 300小时 | |
第2-4周 | 100/100 | 20/20 | 学习了数组和方法 |
第5周 | 200/300 | 30/50 | 学习了String类和StringBuffer类 |
第6周 | 800/1100 | 40/90 | 学习了this、static关键字,Singleton模式 |