java学习笔记

来源:互联网 发布:java web war包混淆 编辑:程序博客网 时间:2024/05/16 19:34
封装的必要性:
  1.把成员变量弄成private是封装的一种形式。便于控制对成员变量的赋值。使用set方法,提供对外访问方式,就是    因为可以在访问方式中添加逻辑判断语句。对访问数据进行操作,提高代码健壮性。 而get方法多用于取值。
例如:public class People {
        private String name;
        private int age;
                public int getAge() {
                        return age;
                }
                public void setAge(int age) {
                        if(age<0){
                                System.out.println("年龄不能为负数!");
                        }
                        this.age = age;
                }
}
由此可知:在set方法中就可以添加判断,使赋值合法化。如果没有封装和set方法中的判读,就可能出现为人的年龄赋负值,并且赋值成功的不合理性出现!
在java中使用set与get方法只是通用形式便于阅读理解,当然我们也可以自己定义方法方法名来控制对成员变量的赋值。
   2.封装是为了数据安全,因为数据都有自己合理的取值范围,不是说一个成员变量是int就能取int的所有值都有意义。直接操作的话,任何人都可以更改你的变量,不过这不是关键,用set也可以改,关键在于,你可以在set方法里面加很多限制,比如取值范围,如果不符合就不允许set,而直接改没法这样限制。








访问控制符是相对类外部而言的;


函数重载:同一个类内部,可以允许若干个函数名字相同,但是函数签名不允许相同,即:函数名字相同,函数的参数不同,函数参数不同,也就是参数的类型或者个数不同。ps:函数的返回值不能作为函数重载的表现条件




操作系统把内存中的一个程序至少分配出四个区域(实际不止四个);这四个区域分别是:
堆:new出来的东西
栈:局部变量
数据段:静态变量和字符串常量
代码段:存放代码




java自动为每一个没有赋值过的全局变量赋予相应的默认值,但是不为局部变量赋予默认值,所以java规定局部变量在使用前必须要先赋予初值。




类成员(就是static修饰的成员)存放在数据段中,并且是首次加载时分配,且只分配一次,并且是在加载类时存放的,实例成员和实例方法依赖于具体的对象,没有对象无法使用其实例成员和实例方法。
static修饰的成员或方法虽然属于类的,但是他是否能在类外访问,还必须满足他是非private修饰的




静态成员是属于类的,虽然他也是可以被对象的操作,但是本质上还是属于类,而不属于对象,而且他只在类首次加载时初始化,之后再建造对象时系统不再为他再分配一段空间,因为他是属于类,只有一份在内存中。除非对他进行操作,否则它的值不变。




继承:
父类的私有成员在物理上被继承过来了,但是程序员在逻辑上不能访问
子类不能继承父类的构造函数,只能通过super(成员列表)来调用父类构造方法
继承是子类物理上继承父类的所有成员,但是逻辑上只继承非私有的成员
一个构造函数内部显式或者隐式的有且只有调用一个super方法


多态:
同样一段代码,实现的功能不一样,就是多态
即是,子类的引用可以隐式发送给父类的引用


注意:1.同一个类中不能有两个方法是函数签名是一样的(要注意该类本身的方法和父类继承过来的方法的比较)


     2. 父类方法被覆盖时要注意,被覆盖的方法,在子类中要有相同名字,形参列表和相同返回值类型,访问权限可以相同或者变得更大。
3.父类到子类的关系是一般到特殊的关系,父类是一般,子类是父类的一个特殊


4.父类的引用赋值给子类的引用变量,语法上没错,但是运行时会出错


5.可以把子类引用赋值给父类的引用变量,但是赋值后只能调用子类从父类中继承过来的成员,或者子类对父类的方法的重写过的方法,父类引用不能调用子类对象特有的成员。


6.当父类引用本身已经指向一个子类的对象时,可以把父类引用强制转换为子类引用,然后对子类的所有成员进行操作

接口:
1.接口就是抽象方法和静态常量值的集合
2.类是实现接口,即implements,不是继承接口
3.不可以new接口对象,但是可以定义一个接口引用类型的变量并将其指向实现接口的对象,达到多态的目的
4.接口与接口可以多继承,而类与类只能是单继承,但是类可以实现多个类


包:
类放入包之后,其名字会被识别为包名.类名


访问控制符:
public:允许不同包中的的不同类和其成员相互访问;
protected:允许同一个包内的不同类和其成员进行相互访问,并且允许不同包内的,但是有继承关系的子类在其内部可以访问其父类中被protected修饰的成员,但是不能在子类之外访问protected修饰的父类成员;
default:允许同一个包内的不同类之间相互访问;
private:只允许一个类在其内部访问,不允许在外部访问


异常:
1.只有在try语句中抛出的异常,catch语句中的才能捕获到
2.java编译器认为所有存放在try里面的语句都可能执行不成功
3.try{ } catch( ){ } catch( ){ }.....catch( ){ } (finally{ })
4.在子类覆盖父类的方法的方法中,子类覆盖的方法抛出的异常个数和种类必须和父类的一样或者是父类中的若干个,也可以不抛出(子类覆盖的方法不能抛出父类中被覆盖方法不存在的异常)


toString:
输出对象名就是输出对象名.toString()


线程:
线程是程序里的不同执行路径
1.Thread类的start()方法的执行会有两个效果,第一是创建一个新线程,第二是之后自动执行run()方法。(看郝斌java70线程)
2.执行一个线程就是执行一个run()方法
3.一个继承Thread类的子类创建的对象只能创建一个进程,并且一个对象只能调用一次start()方法
4.线程执行的时间片是一定的。


创建线程的方法:
1.用继承了Thread类的子类创建一个对象,然后用该对象调用start()方法
2.看截图


事件:
1.用户对组件的某个操作,叫做一个事件
2.要对某个事件源产生的事件进行处理,就用该事件源的对象添加一个监听器,也就是为事件源对象注册一个监听器






郝斌的java教程的88中最后20分钟左右是重点,精彩必看


文件不是以后缀名分类的,后缀名只是方便用户和操作系统找到并使用相应的软件来打开


字符流:FileReader,FileWriter
字节流:FileInputStream,FileOutputStream






hashSet:把对象存入hashSet容器时,对象自动先调用其hashCode()方法,然后如果hashCode()返回相同值,就继续调用equals()方法,如果也相同,就不加入hashSet中;




事件对象的是将一段短时间内的操作后和相应的事件源封装成事件对象,注意是一段短时间后才封装的,不是立即封装




网络编程:


import java.net.*;
类:DatagramSocket,DatagramPacket,InetAddress;


UDP:
发送端:1.定义DatagramSocket对象,即是码头。
2.提供数据,并将数据封装到数据包对象(DatagramPacket)中,
3.通过DatagramSocket对象的发送功能,将数据包发出去
4.关闭资源




接收端:1.定义DatagramSocket对象,即是码头。通常会监听一个端口;其实就是给这个接受网络应   用程序定义数字标识;方便于明确那些数据过来该应用程序可以处理。
2.定义一个数据包,因为要存储接收到的字节数据。
 因为数据包对象中有更多功能可以提取字节数据中的不同数据信息。
3.通过Socket服务的receive方法将接收到的数据存入已定义好的数据包中。
4.通过数据包对象特有的功能,将这些不同的数据取出。
5.关闭资源




Tcp编程:
客户端:
1.建立Socket服务,指定要链接的主机和端口。
2.获取Socket流中的输出流,并将数据写到该流中。
3.获取Socket流中的输入流,将服务端反馈的数据获取到。
4.关闭客户端资源
服务端:
1.建立服务端的ServerSocket(),并监听一个端口;
2.获取连接过来的客户端对象;通过ServerSocket的accepte方法,没有链接就会等,
 所以该方法是阻塞式方法;
3.客户端如果发送过来数据,那么服务端就要使用对应的客户端对象,并获取到该客户端对 象的读取流来读取发送过来的数据;
4.关闭服务器。(可选)








正则表达式:
专门用于对字符串处理;;
  1.字符串匹配,查看java的api(正则表达式在java的api中类 Pattern可以查看)
2.字符串分割,String类的split方法。
(为了可以让规则被重用,可以将一个规则封装成一个组,组的出现都有编号,从1开始,要使用组通过\n来获取(n是组的编号),并且括号中有多少个字符,该组就有多少个字符)
3.字符串的替换;String类的replace及replaceAll方法。
4.字符串的获取:Patern类和Macher类
邮件地址正则表达式匹配:1."[a-zA-Z0-9_]+@[a-zA-Z0-9_]+(\\.[a-zA-Z]+)+"
2."\\w+@\\w+(\\.\\w+)+"

0 0
原创粉丝点击