第四周:C++指针和Java快速上手

CSDN学习小组–第四周

内存和指针

内存划分

内存是一段连续的地址空间用于CPU进行快速访问的物理存储器件,但每个内存地址的大小由机器字长指定,一个32位操作系统最多只能处理32位地址,所以可管理的空间大小为 2 32 2^{32} 232B,可换算成4GB,所以字长为32位的操作系统,最多可操纵的内存为4GB,而64位操作系统可管理的空间大小为 2 64 2^{64} 264B,这样,64位操作系统可管理的空间就很大了。
其内存结构图为:
在这里插入图片描述
一般我们将内存分为:堆区、栈区、全局区、代码区、常量区,各个区域存放的内容:

栈区:在程序中所创建的局部变量、参数、数组、指针等,当程序执行完后,将释放所占用的该块内存。

堆区:该片区域中存放着我们手工申请的内容,如:Malloc、new所创建。

全局区:全局变量、静态变量,在我们程序执行完之后将自动释放所占用的内存。

代码区:存放着函数体的二进制代码。

常量区:包含着整形常量、字符串常量,该区域内容不能被修改。

指针

Java快速上手

Java不同于一般的编译语言或直译语言。它首先将源代码编译成字节码,然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现了“一次编写,到处运行”的跨平台特性。在早期JVM中,这在一定程度上降低了Java程序的运行效率。但在J2SE1.4.2发布后,Java的运行速度有了大幅提升。

Java语言特性:
  1. 简单的
  2. 面向对象
  3. 分布式
  4. 健壮
  5. 安全
  6. 体系结构中立
  7. 可移植
  8. 解释型
  9. 高性能
  10. 多线程
  11. 动态
Java三个体系

Java 3个体系:

  • JavaSE (Java Platform Standard Edition,java平台标准版)
  • JavaEE (Java Platform,Enterprise Edition,java平台企业版)
  • JavaME (Java Platform Micro Edition,java平台微型版)
注释和命名

单行注释://
多行注释:/* */
类是Java当中所有源代码的基本组织单位

// 这是一行注释
public class HelloWorld { //单行注释 
    public static void main(String[] args) { //main方法为程序执行入口
        /*
        多行注释
        多行注释
        多行注释
        */
        System.out.println("Hello, World!");
    }
}

标识符
命名规则:(硬要求)

  1. 可以包含英文26个字母(大小写)、0-9数字,$(美元符号) 和 _(下划线)
  2. 不能以数字开头
  3. 不能是关键字

命名规范:(软建议)

  1. 类名:首字母大写,后面每个单词首字母大写(大驼峰)HelloWorld
  2. 变量名:首字母小写,后面每个单词首字母大写(小驼峰)helloworld
  3. 方法名:同变量名

常量:Java程序运行期间固定不变的数据

分类:

类型数据举例
整数常量0,1,567,-9
小数常量0.0,-0.1,2.55
字符常量‘a’,‘好’
字符串常量“A”,“HELLO”,“你好”
布尔常量true,false
空常量null,没有任何数据

示例:

public class Demo01Const { 
    public static void main(String[] args) {
        //字符串常量
        System.out.println("ABC");
        System.out.println("");//字符串两个双引号中间的内容为空

        // 整数常量
        System.out.println(30);
        System.out.println(-500);

        // 浮点数常量(小数)
        System.out.println(3.14);
        System.out.println(-2.5);

        // 字符常量
        System.out.println('A');
        System.out.println('6');
        // System.out.println('');必须要又且仅有一个字符,没有不行
        // System.out.println('AB');必须要又且仅有一个字符,有两个不行

        //布尔常量
        System.out.println(true);
        System.out.println(false);

        //空常量,空常量不能直接用来打印输出
        // System.out.println(null);
    }
}

运行结果:

ABC

30
-500
3.14
-2.5
A
6
true
false

数据类型分类:

基本数据类型:整数、浮点数、字符、布尔
引用数据类型:字符串、类、数组、接口、Lambda

基本数据类型
数据类型关键字内存占用取值范围默认值
字节型byte1个字节-128~1270
短整型short2个字节-32768~327670
整型int(默认)4个字节-231~231-10
长整型long8个字节-263~263-10L
单精度浮点数float4个字节1.4013E-45~3.4028E+380.0f
双精度浮点数double(默认)8个字节4.9E-324~1.7977E+3080.0d
字符型char2个字节0~65535‘u0000’
布尔类型boolean1个字节true、falsefalse
4种访问权限:
修饰符当前类(我自己)同一包内(我邻居)子孙类(同一包)(我儿子)子孙类(不同包)(陌生人)其他包
publicYYYYY
protectedYYYY/N(说明)N
defaultYYYNN
privateYNNNN
类和对象
  • :一组相关属性和行为的集合,可以看成是一类事物的模板,使用事物的属性等特征和行为特征来描述该类事物

  • 属性:该事物的状态信息
    行为:该事物能够做什么

举例:小猫
属性:名字、体重、年龄、颜色
行为:走、跑、叫
  • 对象:一类事物的具体体现,类的一个实例
//成员变量
	private String name;
	private int age;	
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
File类

java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作

重点:记住3个单词

  1. file:文件
  2. directory:文件夹/目录
  3. path:路径

路径:
绝对路径:完整的路径,以盘符(C:,D:)开始的路径,例如:c:\a.txt
相对路径:简化路径
相对值得是相对于当前项目的根目录,如果使用当前项目的根目录,路径可以简化书写

注意:

  1. 路径不区分大小写
  2. 注意文件分隔符
/*
 *@文件名:DemoFIle.java
 *@创建时间:2020年3月5日下午6:54:40
 *@作者:Fang
 *@注释:
*/
package File类;

import java.io.*;

public class DemoFile {
	public static void main(String[] args) {
		//static String pathSeparator 与系统有关的路径分隔符,为了方便,它被表示为一个字符串。 
        //static char pathSeparatorChar 与系统有关的路径分隔符。
		String pathSeparator=File.pathSeparator;
		System.out.println(pathSeparator);//路径分隔符 windows:分号;Linux:冒号
		
		//static String separator 与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。 
		//static char separatorChar 与系统有关的默认名称分隔符。 
		String separator=File.separator;
		System.out.println(separator);//文件名分隔符 windows:反斜杠\;Linux:正斜杆/		
	}
}

目录的遍历:
public String[] list():File目录中的所有子文件或目录
public File[] listFiles():File目录中的所有子文件或目录
注意:
list方法和listFiles方法遍历的是构造方法中给出的目录
构造方法中目录路径不存在和给出的目录不是一个目录,都会抛出空指针异常

/*
*@文件名:IteratorFile.java
*@创建时间:2020年3月6日下午4:26:25
*@作者:Fang
*@注释:对D盘下的文件输出遍历打印
*/
package File类;
import java.io.File;
import java.util.*;

public class IteratorFile {
   public static void main(String[] args) {
   	String path="D:\\";
   	getAllFile(new File(path));
   }
   
   public static void getAllFile(File fir) {
   	System.out.println(fir);//打印被遍历的目录名称
   	File[] files=fir.listFiles();
   	for (File fil : files) {
   		//对遍历得到的File对象f进行判断
   		if(fil.isDirectory()) {
   			//f是一个文件夹,继续遍历
   			//递归调用getAllFile
   			getAllFile(fil);
   		}else {
   			//f是一个文件,直接打印
   			System.out.println(fil);
   		}
   	}
   }
   
}

文件过滤器:
java.io.FileFilter接口:用于抽象路径名(File对象)的过滤器
作用:用来过滤文件(File对象)
抽象方法:
boolean accept(File pathname)

java.io.FilenameFilter接口:实现此接口的类实例可用于过滤器文件名
作用:用于过滤文件名称
抽象方法:
boolean accept(File dir,String name)
参数:
File dir:构造方法中转换的被遍历的目录
String name:使用ListFiles方法遍历目录,获取每一个文件/文件夹的名称

注意:两个过滤器接口是没有实现类的,需要我们自己写实现类,重写过来吧方法accept

/*
 *@文件名:FileFilter过滤.java
 *@创建时间:2020年3月6日下午5:53:53
 *@作者:Fang
 *@注释:
*/
package File类;
import java.io.*;
import java.util.*;

public class FileFilter过滤 {
	public static void main(String[] args) {
		String path="D:\\NET";
		getAllFile(new File(path));
	}
	
	public static void getAllFile(File fir) {
		System.out.println(fir);//打印被遍历的目录名称
		File[] files=fir.listFiles(new FileFilter过滤().new  FileFilterImpl());//传递过滤器对象
		for (File fil : files) {
			//对遍历得到的File对象f进行判断
			if(fil.isDirectory()) {
				//f是一个文件夹,继续遍历
				//递归调用getAllFile
				getAllFile(fil);
			}else {
				//f是一个文件,直接打印
				System.out.println(fil);
			}
		}
}

class FileFilterImpl implements FileFilter {

	@Override
	public boolean accept(File pathname) {
		System.out.println(pathname);
//		return true;
		return pathname.getName().toLowerCase().endsWith(".pptx");
	}
}
}
TCP编程

TCPClient客户端类代码:

/*
 *@文件名:TCPClient.java
 *@创建时间:2020年3月16日上午10:58:06
 *@作者:Fang
 *@注释:
*/
package TCP通信;

import java.io.*;
import java.net.*;

//TCP通信客户端:向服务器发送连接请求,给服务器发送数据,读取服务器回写的数据
//表示客户端的类:
// java.net.Socket:此类实现客户端套接字,套接字是两台机器之间通信的端点
// 套接字:包含了IP地址和端口号的网络单位

/*构造方法:
 * 	Socket(String host,int port)
 *成员方法:
 *	OutputStream getOutputStream()
 *	InputStream getInputStream()
 *	void close()
 * 
 */


public class TCPClient {
	//使用方法
	public static void main(String[] args) {

		try {
//		1. 创建一个客户端对象Socket,构造方法绑定服务器的IP地址和端口号			
			Socket sk=new Socket("127.0.1",8888);
//			2.使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
			OutputStream ops=sk.getOutputStream();
//			3.使用网络字节输出流OutputStream对象中的方法write,給服务器发送数据
			ops.write("你好服务器".getBytes());
			
//			4.使用Socket中的方法getInputStream()获取网络字节输入流InputStream对象
			InputStream ls=sk.getInputStream();
//			5.使用网络字节输入流InputStream对象中的方法read,读取服务器回写的数据
			byte[] bytes=new byte[1024];
			int len=ls.read(bytes);
			System.out.println(new String(bytes,0,len));
			
//			6.释放资源
			sk.close();
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

TCP服务端类示例:

/*
 *@文件名:TCPServer.java
 *@创建时间:2020年3月16日下午12:34:05
 *@作者:Fang
 *@注释:
*/
package TCP通信;
import java.io.*;
import java.net.*;
import java.util.*;

/* TCP通信的服务器端:接收客户端的请求,读取客户端发送的数据,给客户端回写数据
 * 表示服务器的类:
 *  	java.net.ServerSocket:此类实现服务器套接字
 *  构造方法:
 *  	ServerSocket(int port)
 *  服务器端必须明确一件事情,必须知道是哪个客户端请求的服务器
 *  所以可以使用accept方法获取到请求的客户端对象Socket
 *  成员方法:
 *  	Socket accept()
 *  
 * 
 */

public class TCPServer {
	public static void main(String[] args) {
		try {
//			1.创建服务器ServerSocket对象和系统要指定的端口号
			ServerSocket server=new ServerSocket(8888);
//			2.使用ServerSocket对象中的accept方法,获取到请求的客户端对象Socket
			Socket socket=server.accept();
//			3.使用Socket对象中的方法getInputStream()获取网络字节输入流
			InputStream ls=socket.getInputStream();
//			4.使用网络字节输入流InputStream对象中的方法read,读取客户端发送的数据
			byte[] bytes=new byte[1024];
			int len=ls.read(bytes);
			System.out.println(new String(bytes,0,len));
//			5.使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
			OutputStream os=socket.getOutputStream();
//			6.使用网络字节输出流OutputStream对象中的方法write,给客户端回写数据
			os.write("收到谢谢".getBytes());
//			7.释放资源,注意是两个!!!
			socket.close();
			server.close();
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值