java初级笔记(翁恺男神
一、基础
1.类型转换
两个整数的运算结果只能是整数(自动向下取整

自动类型转换(由低变高
强制类型转换(从高到低

2.运算符优先级
正负号》乘除取余》加减连接》关系运算符》赋值
//所有的单目运算符优先级最高


* 简单应用
猜数游戏
package hello;
import java.util.Scanner;
public class GuessNum {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a, count = 0, n = (int)(Math.random() * 100 + 1);//[0,1)
do {
a = in.nextInt();
if(n == a)
System.out.println("All right!");
else if(n > a)
System.out.println("so small");
else
System.out.println("so big");
count++;
}while(n != a);
System.out.println("the all times:" + count);
}
}
求最大公约数 by辗转相除法
package hello;
import java.util.Scanner;
public class CommonDiv {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a = in.nextInt(), b = in.nextInt(), t;
while(b != 0) {
t = a % b;
a = b;
b = t;
}
System.out.println(a);
}
}
3.数组
what

定义

访问by下标

自动初始化为0 & 数组大小可以数组名.length

数组变量
不同于C,Java中可以进行数组变量之间的赋值

复制数组
只能一一拷贝

tips:遍历次数确定时,最合适的方式是for循环
for-each循环
where:适合于遍历场景,且和元素下标无关

4.字符
*简单应用之井字棋
package hello;
import java.util.Scanner;
public class Tic {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int size = in.nextInt(), numOfX = 0, numOf0 = 0, x, result = 0;
int[][] a = new int[size][size];
for(int i = 0; i < a.length; i++) {
for(int j = 0; j < size; j++) {
a[i][j] = in.nextInt();
}
}
for(int i = 0; i < a.length; i++) {//行
for(int j = 0; j < a[i].length; j++) {
if(a[i][j] == 0)
numOf0++;
else
numOfX++;
}
if(numOf0 == size || numOfX == size) {
result = 1;
break;
}
}
if(result != 1) {//列
numOf0 = numOfX = 0;
for(int i = 0; i < size; i++) {
for(int j = 0; j < size; j++) {
if(a[j][i] == 0)
numOf0++;
else
numOfX++;
}
if(numOf0 == size || numOfX == size) {
result = 1;
break;
}
}
}
if(result != 1) {//对角线
numOf0 = numOfX = 0;
for(int i = 0; i < size; i++) {
if(a[i][i] == 0)
numOf0++;
else if(a[i][i] == 'X')
numOfX++;
}
if(numOf0 == size || numOfX == size) {
result = 1;
}
}
if(result != 1) {//反对角线
numOf0 = numOfX = 0;
for(int i = 0; i < size; i++) {
if(a[i][size - i - 1] == 0)
numOf0++;
else if(a[i][size - i - 1] == 'X')
numOfX++;
}
if(numOf0 == size || numOfX == size) {
result = 1;
}
}
if(result == 1)
System.out.println("Win!");
else
System.out.println("Lose!");
}
}
逃逸字符(转义字符

.运算符

对于Character类而言常用的有:

字符串变量

== vs equals
== 是否指向同一个字符串
equals() 字符串内容是否相同
字符串操作


注意不是对s直接修改,而是根据要求修改出新的字符串
字符串的长度
注意未初始化的字符串不能求长度,人家连个小兵都没有,你问手下小兵几许,很不礼貌的欸
得子串

寻找字符

5.函数
本地变量(形参



二、入门
1.类
类vs对象
对象变量是变量的管理者,而不是所有者。对象需要new出来


封装:把数据和对数据进行的操作放在一起
简单应用
package hello;
public class Time {
private int limit = 0, value = 0;
public Time(int limit) {
this.limit = limit;
}
public void increase() {
value++;
if(value == limit)
value = 0;
}
public int getValue() {
return value;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Time t = new Time(24);
while(true) {
t.increase();
System.out.println(t.getValue());
}
}
}
package hello;
public class Clock {
private Time h = new Time(24);
private Time m = new Time(60);
public void start() {
m.increase();
if(m.getValue() == 0)
h.increase();
System.out.printf("%02d:%02d\n", h.getValue(), m.getValue());
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Clock c = new Clock();
while(true) {
c.start();
}
}
}
2.重载
在同一个作用域中,如果有多个函数的名字相同,但是形参列表不同(参数类型不同或参数个数不同),返回值类型可同也可不同,我们称之为重载函数。重载的函数是通过形参列表区分的,与返回值类型无关。函数重载其实是"一个名字,多种用法"的思想,不仅函数可以重载,运算符也可以重载。

3.封装的访问属性

private

public

friendly(即default
what: 成员变量和成员函数既没有public也没有private,前面是空的权限:被同一个包(package)里的其他人看到的。
4.泛型容器类
ArrayList 类是一个可以动态修改的数组

简单应用之记事本
package hello;
import java.util.ArrayList;
public class Notebook {
private ArrayList<String> notes = new ArrayList<String>();
public void add(String s) {
notes.add(s);
}
public void add(String s, int index) {
notes.add(index, s);//指定位置插入
}
public int getSize() {
return notes.size();
}
public String getString(int index) {
return notes.get(index);
}
public void remove(int index) {
notes.remove(index);
}
public String[] list(){
String[] a = new String[notes.size()];
for(int i = 0; i < notes.size(); i++) {
a[i] = notes.get(i);
}
return a;
}
public static void main(String[] args) {
Notebook note = new Notebook();
note.add("坚持");
note.add("胜利");
note.add("逃避", 2);
note.remove(2);
String[] a = note.list();
System.out.println(note.getSize());
System.out.println(note.getString(0));
for(String s: a) {
System.out.println(s);
}
}
}
5.对象数组

6.继承

多态变量

造型cast
大学生属于学生(可以向上造型),但学生不能直接说大学生(类型不匹配)


向上造型

7.多态
函数调用的绑定

覆盖

8.Object类
所有的类都是继承自Object类
Object类的函数

可扩展性vs可维护性
可扩展性:可适应新的东西
可维护性:进行修改后 可适应新的东西
9.消除重复代码
问题引入之城堡游戏
package hello;//Game.java
import java.util.*;
public class Game {
private Room currentRoom;
public Game()
{
creatRooms();
}
private void creatRooms()
{
Room outside, lobby,pub,study,bedroom;
// 制造房间
outside = new Room("城堡外");
lobby = new Room("大堂");
pub = new Room("小酒吧");
study = new Room("书房");
bedroom = new Room("卧室");
// 初始化房间的出口
outside.setExits(null,lobby,study,pub);
lobby.setExits(null,null,null,outside);
pub.setExits(outside,bedroom,null,null);
bedroom.setExits(null,null,null,study);
currentRoom = outside; //从城堡门外开始
}
private void printWelcome()
{
System.out.println();
System.out.println("欢迎来到城堡!");
System.out.println("这是一个超级无聊的游戏。");
System.out.println("如果需要帮助,请输入'help'");
System.out.println();
System.out.println("现在你在:" + currentRoom);
System.out.println("欢迎来到城堡");
System.out.println("出口有:");
if(currentRoom.northExit !=null)
System.out.print("north ");
if(currentRoom.eastExit !=null)
System.out.print("east ");
if(currentRoom.southExit !=null)
System.out.print("south ");
if(currentRoom.westExit !=null)
System.out.print("west");
System.out.println();
}
// 以下为用户命令
private void printHelp()
{
System.out.println("迷路了吗?你可以做的命令有:go bye help");
System.out.println("如:\tgo east");
}
private void goRoom(String direction)
{
Room nextRoom = null;
if(direction.equals("north")){
nextRoom = currentRoom.northExit;
}
if(direction.equals("east")){
nextRoom = currentRoom.eastExit;
}
if(direction.equals("south")){
nextRoom = currentRoom.southExit;
}
if(direction.equals("west")){
nextRoom = currentRoom.westExit;
}
if(nextRoom == null){
System.out.println("那里没有门!");
}
else{
currentRoom = nextRoom;
System.out.println("你在"+ currentRoom);
System.out.println("出口有:");
if(currentRoom.northExit != null)
System.out.println("norh");
if(currentRoom.eastExit != null)
System.out.println("east");
if(currentRoom.southExit != null)
System.out.println("south");
if(currentRoom.westExit != null)
System.out.println("west");
System.out.println();
}
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
Game game = new Game();
game.printWelcome();
while (true){
String line = in.nextLine();
String[] words = line.split(" ");
if ( words[0].equals("help")){
game.printHelp();
}else if ( words[0].equals("go")){
game.goRoom(words[1]);
}else if ( words[0].equals("bye")){
break;
}
}
System.out.println("感谢您的光临。再见!");
in.close();
}
}
package hello;\\Room.java
public class Room {
public String description;
public Room northExit;
public Room southExit;
public Room eastExit;
public Room westExit;
public Room(String description)
{
this.description = description;
}
public void setExits(Room north,Room east,Room south,Room west)
{
if(north != null)
northExit = north;
if(east != null)
eastExit = east;
if(south != null)
southExit = east;
if(west != null)
westExit = west;
}
@Override
public String toString()
{
return description;
}
public void southExit(Object object, Room lobby, Room study, Room pub) {
// TODO Auto-generated method stub
}
}
何为好代码
可维护性高

低耦合高内聚
用封装来降低耦合(解耦

用接口来实现耦合

用容器来实现灵活性

10.抽象

抽象在两种语境下的含义

简单应用之细胞自动机

11.数据与表现分离

网格化

12.接口
interface是一种特殊的class

面向接口的编程方式

java初级笔记(翁恺男神的更多相关文章
- java初级笔记
1:java核心优势:跨平台,一次编译,四处运行,只要安装了对应的jvm虚拟机: 2:JVM其实就是一种规范,就是一个虚拟的用于执行bytecode字节码的计算机: 3:数据类型分为四类八种,整数型( ...
- 初始C语言中的指针(翁凯男神MOOC)
运算符 & ● scanf("%d",&i); ●获得变量的地址,它的操作数必须是变量 ● int i; printf("%x",& ...
- 判断素数(翁凯男神MOOC)
从2到x-1测试是否可以整除 int isPrime(int x); int main(int argc, char **argv) { int x; scanf("%d",&am ...
- c++子类父类关系(翁恺c++公开课[15-16]学习笔记)
关于类的继承有三种:public继承.private继承.protected继承 首先说明,关于类的成员变量.函数的权限有三种(public.private.protected) 我们通常会让所有的成 ...
- WUSTOJ 1275: 男神的逆袭(Java)
1275: 男神的逆袭 题目 计算两个日期相差的天数.更多内容点击标题. 分析 下面说一下我的思路(自己写的,无扩展性): 给定一个日期,首先计算这个日期是这一年的第多少天. 给定两个日期,直 ...
- c++拷贝构造函数(翁恺c++公开课[26-27]学习笔记)
这节课在p26.拷贝构造中讲的很清楚,建议大家耐心的去看下. 什么时候会发生拷贝构造: 对象之间的初始化赋值 使用对象作为变量进行函数传参(通常使用引用来传参从而减去不必要的拷贝构造,提高效率和代码健 ...
- c++模板(翁恺c++公开课[34-35]学习笔记)
为什么要有模板(templates):当我们需要一个列表(list),列表中元素可能都为X类型也可能都为Y类型,怎么来实现呢? 定义基类?可以实现,很多情况下可能不够简明的表达设计思想 克隆代码(写一 ...
- c++中的运算符重载operator2(翁恺c++公开课[31-33]学习笔记)
上一篇operator1中,大概说了下重载的基本用法,接下来对c++中常见的可重载运算符归一下类,说一下它们的返回值,讨论下较为复杂的运算符重载上的坑
- c++中的运算符重载operator1(翁恺c++公开课[30]学习笔记)
运算符重载规则: 只有已经存在的运算符才能被重载,不能自己制造一个c++中没有的运算符进行重载 重载可以在类或枚举类型内进行,也可以是全局函数,但int.float这种已有的类型内是不被允许的 不能二 ...
- static在c\c++中的作用(翁恺c++公开课[28-29]学习笔记)
static相对来说是一个较复杂的修饰符,c++中的static在c的基础之上又包含了static在类中的应用(也就是说多了static的成员变量和static的成员函数):c\c++中静态变量.对象 ...
随机推荐
- Clean WeChat X 微信垃圾清理工具,提升硬盘空间
Clean WeChat X是一款专业的微信清理工具,其拥有软件轻巧.干净.高效.免费等等特点,其能识别你电脑里的微信缓存.聊天记录.文件备份.小程序等等信息,方便大家选择性的清理文件. 多账号登录: ...
- Springboot - [06] yaml语法讲解
Yaml是一种标记语言,Yaml也不是一种标记语言. 一.yaml写法示例 application.yaml # 普通的key-value name: harley server.port: 8081 ...
- python sqlmap 检测sql注入点及php网站sql注入防护运维操作实例
问题描述:使用python sqlmap 检测存在sql注入风险,网站为php语言 操作步骤:1.本地电脑系统是win 7,查看未安装python,需要先安装python,注:win 7安装pytho ...
- Abaqus-Steady-State-Dynamic-Analysis的求解原理
0. 总括 基于模态的谐响应分析,可以通过扫频的方式求解频率范围内结构的线性稳态响应情况.阻尼是和频率相关的,但模态叠加法只需要知道n个模态阻尼即可推广到其他频率范围(原因详见文内公式). 1. 谐响 ...
- ITSS 运维2.0 实践
最近公司在评审itss 2.0,参与了一部分工作,对工作过程中的问题梳理如下: 大的背景:评审itss 2.0会有评审 为什么公司会申请各种资质 首次申请资质后,公司可以申请一笔费用(x万元)! 申请 ...
- CentOs7 lnmp 安装记录
CentOs7 lnmp 安装记录 安装php 选择安装目录 # eg:/usr/src cd /usr/src 安装必要的源 yum -y install pcre pcre-devel zlib ...
- 启动workman stream_socket_server() has been disabled for security reasons
启动workman报错 Workerman[start.php] start in DEBUG mode stream_socket_server() has been disabled for se ...
- wincurl:一款基于HTTP协议的轻量级web资源抓取和上传工具
编写web程序经常要进行接口调测,通常我们会使用curl或者postman等工具,通过这些工具可以方便的发送GET或POST请求来验证接口的正确与否. 对于复杂的接口业务,我们可以通过这些工具构造po ...
- Docker中应用的性能调优指南(一)- 先谈谈容器化性能调优
前言 性能调优是一个老生常谈的话题,通常情况下,一个应用在上线之前会进行容量规划.压力测试并进行验证,而性能调优则是在容量规划与验证结果之间出现差异时会进行的必然手段.从某种角度来讲,性能调优是一个非 ...
- 生产环境swarm集群规划和管理
swarm集群角色 swarm集群中有两种角色,manager node和 worker ndoe. manager的功能: 维护集群状态 任务调度 为swarm集群提供HTTP API 可以创建只有 ...
