一、课前分享/*------------------------------------------------------*/
早:
垃圾回收:如何分辨垃圾?GCRoot。标记清楚算法-容易产生内存碎片
压缩算法
复制算法-年轻代->老年代 扫描一次就将年龄加一,达到一定次数后进入老年代。
中:
流
字节流,字符流,
输入流,输出流
晚:
super关键字
腰肌缓解
二、上课内容/*------------------------------------------------------*/
上午:
对象的内存分析
类编译后生成的文件存放在out目录下
new的执行步骤:
1)在堆中开辟一块内存空间,同时类的成员变量跟随对象一起进入到堆内存附默认值
2)调用构造器为对象初始化信息
3)将对象的地址返回给引用
下午:
java中方法参数类型和返回值类型可以是任意数据类型,其本质为值传递,基本数据类型就传递数据值,引用型数据类型就传递对象的地址值。
构造器
有参,无参
用this在构造器中调用另一个构造器this()
this:在构造器中代表new的对象,在成员方法中代表调用该方法的对象。
自学了一会儿线程
实现多线程的方法有三种:继承Thread类、实现Runnable接口、实现Callable接口
并发控制可以通过重写特定的run()方法来实现
步骤如下:
1)循环
2)synchronized代码块或方法
3)判断静态量是否到结尾,是
4)判断静态量是否到结尾,否
学了一会儿网络编程
三大核心:IP、端口号、协议
IP:ipv4 32位,4组,IP不够用,所以有了ipv6 128位 8组
ipv4不够用时在一些公司或者学校里面会使用局域网用于节省IP。
127.0.0.1为localhost(本机IP),向这个IP发送消息永远是自己给自己发送消息,可用于测试。ipconfig查看IP,ping查看网络是否连通。
InetAdress是java中用于获取IP的类
InetAdress adress = InetAdress.getByName("主机名")
adress 即获取到的电脑IP,在网络中特地指代一台电脑。
端口号:
1)端口号是应用程序的唯一标识
2)端口号的范围是0~65535,其中0~1023为一些知名网络服务占用,我们能用的端口号是1024即以后的。
3)一个端口号只能被一个应用程序使用
协议:连接和通信的规则被称为网络通信协议
最初的网络服务协议是ISO模型(七层),后来有了TCP(四层),简化了协议的结构
UDP(用户数据报协议)和TCP(传输控制协议)的区别:
UDP是面向无连接通信协议,传输数据快,但一次最多只能传输64KB,且传输的数据不安全,一般应用与通话,线上会议,视频当中,即使丢失了一两帧数据也无所谓。
TCP是面向连接的通信协议,传输慢,但是没有大小限制,数据安全,一般用于文字聊天等。
三、代码练习/*------------------------------------------------------*/
package youjixian01a;
public class test21 {
public static void main(String[] args) {
Baker lihua = new Baker();
lihua.name = "lihua";
lihua.rank = 1;
System.out.println("lihua 是初级蛋糕师,只会做苹果蛋糕...");
Cake myCake = lihua.makeCake();
System.out.println(myCake);
}
}
class Baker{
public String name;
public int rank;
public Cake makeCake(){
Cake appleCake = new Cake();
appleCake.price = 99;
appleCake.color = "红色";
appleCake.size = 16;
return appleCake;
}
}
class Cake{
public int price;
public String color;
public int size;
@Override
public String toString() {
return "你的蛋糕做好啦--->"+"这是一个"+size+"寸的"+color+"蛋糕,价格是"+price+"元";
}
}
package youjixian01a;
//定义学生类,包含学生姓名,年龄,学科,学生所在学校等信息,测试使用
public class test22 {
public static void main(String[] args) {
Student s1 = new Student("李华",22,"计算机科学与技术","清华大学");
Student s2 = new Student("小伟",28,"计算机科学与技术","Colombia University");
System.out.println(s1);
System.out.println(s2);
s2.show("lihua");//成员方法中的this指向调用该成员方法的对象
}
}
class Student{
private String name;
private int age;
private String subject;
private String school;
public Student(){}
public Student(String name,int age,String subject,String school){
//this在构造器中指代当前new的对象
this(age,name,subject,school);
this.name = name;
this.age = age;
this.subject = subject;
this.school = school;
}
public Student(int age,String name,String subject,String school){
//this在构造器中指代当前new的对象
this.name = "test";
this.age = 0;
this.subject = subject;
this.school = school;
}
public void show(String name){
System.out.println(this.name);
System.out.println(name);
}
@Override
public String toString(){
return name+","+age+","+subject+","+school;
}
}