(一)学习总结
1.什么是构造方法
是实例化对象的时候需要调用构造方法进行实例化,
重载就是方法名相同,参数不同的调用,
public class Test {
public static void main(String args[]) {
Foo obj = new Foo();
}
}
class Foo{
int value;
public Foo(int intValue){
value = intValue;
}
}
这个构造方法不能用,当类里面没有构造方法时他会默认一个空的构造方法,当类里面有声明构造方法时,默认的空的构造方法就不存在了,这是需要自己写默认的构造方法。
2
public class Test {
public static void main(String[] args) {
MyClass[] arr=new MyClass[3];
arr[1].value=100;
}
}
class MyClass{
public int value=1;
}
运行结果是空指针异常,
意思就是[1]没有对他进行实例化
public class Test {
public static void main(String[] args) {
MyClass[] arr=new MyClass[3];
arr[1]=new MyClass();
arr[1].value=100;
System.out.println(arr[1].value);
}
}
class MyClass{
public int value=1;
}
对他进行实力化
3.
public class Test {
public static void main(String[] args) {
Foo obj1 = new Foo();
Foo obj2 = new Foo();
System.out.println(obj1 == obj2);
}
}
class Foo{
int value = 100;
}
结果是flase
原因:
实例化会分配空间 所以obj1和obj2的地址不一样,会出现flase
4. .什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明
封装性:一是指把对象的属性和行为看成一个密不可分的整体,二是“信息隐蔽”,只保留接口存在可以访问他,修改他
如何实现封装性,对需要封装的属性或者方法加上private前缀此时,只能由方法自身更对他进行修改,如需要其他的类或主方法对他进行修改或赋值需要在封装的方法里加上get();set();方法进行调用修改
public class Test {
public static void main(String[] args) {
MyClass arr=new MyClass();
arr.setValue(100);
System.out.println(arr.getValue());
}
}
class MyClass{
private int value=1;
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
(1)
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在A里面是私有类不能直接调用
(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();
}
}
x不是静态变量不能在static里面调用
6.
package Teat1;
class Book{
int bookId;
String bookName;
double price;
static int m;
// 声明静态变量
static
{
m=1000;
}
//定义静态代码块对静态变量初始化
public Book (String q,double n)
{
this.setBookName(q);
this.setPrice(n);
this.bookId=m;
m=m+1;
} //构造方法
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 m-1000;
}//重写toString方法
public String toString ()
{
return "编号\t"+bookId+"书名\t"+getBookName()+"价格\t"+getPrice();
}
}
public class Test{
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());
}
} `
}
7.什么是单例设计模式?它具有什么特点?用单例设计模式设计一个太阳类Sun。
单例模式:一个类有且仅有一个实例,并且自行实例化向整个系统提供
特点:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例
public class sun {
private sun(){}
private static sun num=new sun();
public static sun getNum(){
return num;
}
}
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';
}
}
输出结果你好和world,原因:change方法里面的str是新开辟的空间指向你好,而Test里面并没有变,但是char数组就不一样了他是可以改变的,string和stringbuffer是不一样的,
9.其他内容
静态变量需要看书
(二)实验总结
1.用面向对象思想完成评分系统
设计思路:
定义选手类,分数类,还有测试类,各自的属性,在分数类里面进行评委的打分,
问题: 刚开始的时候对Java的各个类的应用认识的还不是很全,这些东西都是摸索出来的然后自己总结方法,对于各个类的调用注意一定要实例化对象才能将参数传进去。
2.Email验证
设计思路:
根据题目要求,用if判断只要那些要求成立就可以
问题: 没有
3.查找子串
设计思路:
用到了String的方法,从某个位置查找str字符串的位置,找到之后再加上str的长度再往后查找,直到找不到为止
问题: 没有哦
4.统计文件
设计思路:
先按照,分再找到每一个str的最后一个\. 之后的字符串放到另一个数组里,然后定义第一个对应的数组,进行遍历查找重复然后标记就可以
问题: 注意他本身要记得加一;还有就是.Java.TXT要找到最后一个.之后的东西,还有就是大小写那里有简单方法,先把第一个字符调出来,然后修改大小写,再连接就可以了。
5.类的设计
设计思路:
这个题比较麻烦,每一个类里面都要定义其他类的对象,然后在输入数据的时候对某些数据所属的类型进行关系声明,有些队形的关系是双向的,因为在查找数据时,不仅可以按照部门找到员工,也可以按照员工找到部门,所以当关系声明好的时候,剩下的调用就非常简单了。
问题:
刚开始思路不是很完全,写到一半才有了一个整体的框架,别的就没有了。
https://gitee.com/The-king/java-hebau/tree/master/ex02